Add grass seed

master
Wuzzy 2021-07-20 10:36:07 +02:00
parent 8924cb564b
commit 55d10a48d2
8 changed files with 91 additions and 28 deletions

View File

@ -19,6 +19,7 @@ Node identities:
* `simple_bush`: Bush
* `seed`: Seed
* `seed_farming`: Seed from the `hades_farming` mod
* `wheat`: Wheat plant
* `strawberry` Strawberry plant
* `tomato` Tomato plant

View File

@ -186,7 +186,7 @@ minetest.register_abm({
-- Takes a node name and if it's capable of being covered by grass,
-- returns the node name of the next level of "grassiness",
-- otherwise it returns nil
local function get_next_grass_cover_level(nodename)
function hades_core.get_next_grass_cover_level(nodename)
if nodename == "hades_core:dirt" then
return "hades_core:dirt_with_grass_l1"
elseif nodename == "hades_core:dirt_with_grass_l1" then
@ -195,15 +195,13 @@ local function get_next_grass_cover_level(nodename)
return "hades_core:dirt_with_grass_l3"
elseif nodename == "hades_core:dirt_with_grass_l3" then
return "hades_core:dirt_with_grass"
else
return nodename
end
end
-- Dirt ABMs
-- Dirt-with-Grass ABMs
minetest.register_abm({
label = "Grow grass on dirt under bright light",
nodenames = {"group:dirt"},
label = "Increase Dirt-with-Grass grass level on Dirt-with-Grass under bright light",
nodenames = {"group:dirt_with_grass"},
interval = 2,
chance = 200,
action = function(pos, node)
@ -213,7 +211,7 @@ minetest.register_abm({
if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light")
and nodedef.liquidtype == "none"
and (minetest.get_node_light(above) or 0) >= 13 then
local nextnode = get_next_grass_cover_level(node.name)
local nextnode = hades_core.get_next_grass_cover_level(node.name)
if nextnode then
minetest.set_node(pos, {name = nextnode, param2 = node.param2})
end
@ -222,15 +220,15 @@ minetest.register_abm({
})
minetest.register_abm({
label = "Grow grass on dirt under air in faint light",
nodenames = {"group:dirt"},
label = "Increase Dirt-with-Grass level on Dirt-with-Grass under air in faint light",
nodenames = {"group:dirt_with_grass"},
interval = 50,
chance = 20,
action = function(pos, node)
local name = minetest.get_node(pos).name
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
if node.name == "air" and (minetest.get_node_light(pos) or 0) >= 8 then
local nextnode = get_next_grass_cover_level(node.name)
local nextnode = hades_core.get_next_grass_cover_level(node.name)
if nextnode then
minetest.set_node(pos, {name = nextnode, param2 = node.param2})
end

View File

@ -145,6 +145,8 @@ hades_farming.register_plant = function(name, def)
for k, v in pairs(def.fertility) do
g[v] = 1
end
-- Extra group to distinguish from other seeds
g["seed_farming"] = 1
local surface_check = function(node)
return minetest.get_item_group(node.name, "soil") >= 2
@ -153,7 +155,7 @@ hades_farming.register_plant = function(name, def)
hades_seeds.register_seed(":" .. mname .. ":seed_" .. pname, {
description = def.description_seed,
_tt_help = def._tt_help,
inventory_image = def.inventory_image,
image = def.inventory_image,
place_param2 = def.place_param2,
surface_check = surface_check,
extra_groups = g,
@ -214,7 +216,7 @@ hades_farming.register_plant = function(name, def)
-- Growing ABM
minetest.register_abm({
label = "Grow farming seeds and plants: "..pname,
nodenames = {"group:" .. pname, "group:seed"},
nodenames = {"group:" .. pname, "group:seed_farming"},
neighbors = {"group:soil"},
interval = 93,
chance = 12,
@ -235,7 +237,7 @@ hades_farming.register_plant = function(name, def)
local node_def = minetest.registered_items[node.name] or nil
-- grow seed
if minetest.get_item_group(node.name, "seed") ~= 0 and node_def.fertility then
if minetest.get_item_group(node.name, "seed_farming") ~= 0 and node_def.fertility then
local can_grow = false
local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z})
if not soil_node then

View File

@ -121,9 +121,10 @@ for i = 1, 5 do
drop = {
max_items = 1,
items = {
{items = {'hades_farming:seed_wheat'},rarity = 10},
{items = {'hades_farming:seed_spice'},rarity = 10},
{items = {'hades_farming:seed_strawberry'},rarity = 10},
{items = {'hades_farming:seed_wheat'},rarity = 13},
{items = {'hades_farming:seed_spice'},rarity = 13},
{items = {'hades_farming:seed_strawberry'},rarity = 13},
{items = {'hades_grass:seed_grass'},rarity = 13},
{items = {'hades_grass:grass_1'}},
}
},

View File

@ -1,5 +1,12 @@
local S = minetest.get_translator("hades_grass")
local grass_drop = {
items = {
{ items = { "hades_grass:grass_1" }, rarity = 1 },
{ items = { "hades_grass:grass_seed" }, rarity = 8 },
}
}
minetest.register_node("hades_grass:grass_1", {
description = S("Grass Clump"),
drawtype = "plantlike",
@ -16,6 +23,7 @@ minetest.register_node("hades_grass:grass_1", {
is_ground_content = true,
buildable_to = true,
floodable = true,
drop = grass_drop,
groups = {snappy=3,flammable=3,flora=1,grass_clump=1,grass=1,attached_node=1},
sounds = hades_sounds.node_sound_grass_defaults(),
selection_box = {
@ -30,7 +38,6 @@ minetest.register_node("hades_grass:grass_1", {
end,
})
local drop_counts = { 1, 1, 2, 2, 3 }
for i=2,5 do
minetest.register_node("hades_grass:grass_"..i, {
description = S("Grass Clump (Stage @1)", i),
@ -47,7 +54,7 @@ for i=2,5 do
buildable_to = true,
floodable = true,
is_ground_content = true,
drop = "hades_grass:grass_1 " .. drop_counts[i],
drop = grass_drop,
groups = {snappy=3,flammable=3,flora=1,grass=1,grass_clump=1,attached_node=1,not_in_creative_inventory=1},
sounds = hades_sounds.node_sound_grass_defaults(),
selection_box = {
@ -57,6 +64,51 @@ for i=2,5 do
})
end
hades_seeds.register_seed("hades_grass:seed_grass", {
description = S("Grass Seed"),
image = "hades_grass_grass_seed.png",
surface_check = function(node)
return minetest.get_item_group(node.name, "dirt") > 0 or minetest.get_item_group(node.name, "soil") > 0
end,
_tt_help = S("Grows on Dirt, Dirt with Grass, Soil and Wet Soil in light"),
})
minetest.register_abm({
label = "Grow grass seeds in light",
nodenames = {"hades_grass:seed_grass"},
interval = 10,
chance = 25,
action = function(pos, node)
local light = minetest.get_node_light(pos)
if light < 8 then
return
end
local param2 = hades_core.get_seasonal_grass_color_param2()
local below = {x=pos.x, y=pos.y-1, z=pos.z}
local bnode = minetest.get_node(below)
-- Growth behavior depends on node below ...
if bnode.name == "hades_core:dirt_with_grass" then
-- grow grass clump on (full) dirt with grass
minetest.set_node(pos, {name = "hades_grass:grass_"..math.random(1,5)})
elseif minetest.get_item_group(bnode.name, "dirt") >= 1 or minetest.get_item_group(bnode.name, "soil") > 1 then
-- Turn dirt and soil into dirt-with-grass;
-- For an intermediate dirt-with-grass stage,
-- increase grass cover level by 1
local next_node = hades_core.get_next_grass_cover_level(bnode.name)
if not next_node then
next_node = "hades_core:dirt_with_grass_l1"
end
minetest.remove_node(pos)
minetest.set_node(below, {name = next_node, param2 = param2})
else
-- Seeds are on wrong node, let's kill them!
minetest.remove_node(pos)
end
end
})
minetest.register_node("hades_grass:junglegrass", {
description = S("Tropical Grass"),
drawtype = "plantlike",

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

View File

@ -1,20 +1,26 @@
# Hades Seeds API
You can register seeds and that's it. Seeds do now grow on their own, you are
supposed to implement that yourselves, e.g. with ABMs.
You can register seeds and that's it. All seeds start with the groups
`seed=1`, `snappy=3`, `attached_node=1`.
Seeds do now grow on their own, you are supposed to implement that yourselves,
e.g. with ABMs.
## `hades_seeds.register_seed(name, def)`
Register a seed node.
* `name`: Full itemstring of seed node
* `name`: Full itemstring of seed node. MUST be of the form
`<your_modname>:seed_<your_identifier>`,
e.g. `hades_farming:seed_wheat`
* `def`: Definition table:
* `description`: Same as for normal node def
* `inventory_image`: Same as for normal node def
* `_tt_help`: Tooltip extension (for 'tt' mod)
* `image`: Node texture, inventory and wield image
* `place_param2`: Same as for normal node def
* `surface_check`: Function that takes the node on which the seed is
placed as argument, must return true if seed is allowed
to be placed here and false otherwise
* `_tt_help`: Tooltip extension (for 'tt' mod)
* `extra_groups`: Optional table of groups to add to the default seed node groups
* `fertilty`: internal argument required for `hades_farming` plants only
ignore this otherwise

View File

@ -72,12 +72,15 @@ hades_seeds.register_seed = function(name, def)
placename = string.sub(name, 2)
end
-- Check def table
if not def.inventory_image then
def.inventory_image = "unknown_item.png"
if not def.image then
def.image = "unknown_item.png"
end
if def.meshoptions then
def.place_param2 = def.meshoptions
end
if not def.extra_groups then
def.extra_groups = {}
end
-- Register seed
local g = {seed = 1, snappy = 3, attached_node = 1}
@ -87,10 +90,10 @@ hades_seeds.register_seed = function(name, def)
minetest.register_node(name, {
description = def.description,
_tt_help = def._tt_help,
tiles = {def.inventory_image, def.inventory_image, "blank.png"},
tiles = {def.image, def.image, "blank.png"},
use_texture_alpha = "clip",
inventory_image = def.inventory_image,
wield_image = def.inventory_image,
inventory_image = def.image,
wield_image = def.image,
drawtype = "nodebox",
groups = g,
fertility = def.fertility,