diff --git a/GROUPS.md b/GROUPS.md index ce28e0e..d9ab81c 100644 --- a/GROUPS.md +++ b/GROUPS.md @@ -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 diff --git a/mods/hades_core/functions.lua b/mods/hades_core/functions.lua index c957cb1..0652de7 100644 --- a/mods/hades_core/functions.lua +++ b/mods/hades_core/functions.lua @@ -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 diff --git a/mods/hades_farming/api.lua b/mods/hades_farming/api.lua index 346213f..ce1715a 100644 --- a/mods/hades_farming/api.lua +++ b/mods/hades_farming/api.lua @@ -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 diff --git a/mods/hades_farming/nodes.lua b/mods/hades_farming/nodes.lua index f27c2cb..4ab04b2 100644 --- a/mods/hades_farming/nodes.lua +++ b/mods/hades_farming/nodes.lua @@ -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'}}, } }, diff --git a/mods/hades_grass/init.lua b/mods/hades_grass/init.lua index f243a4f..2e17612 100644 --- a/mods/hades_grass/init.lua +++ b/mods/hades_grass/init.lua @@ -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", diff --git a/mods/hades_grass/textures/hades_grass_grass_seed.png b/mods/hades_grass/textures/hades_grass_grass_seed.png new file mode 100644 index 0000000..15c5ae9 Binary files /dev/null and b/mods/hades_grass/textures/hades_grass_grass_seed.png differ diff --git a/mods/hades_seeds/API.md b/mods/hades_seeds/API.md index ba60b89..f516f58 100644 --- a/mods/hades_seeds/API.md +++ b/mods/hades_seeds/API.md @@ -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 + `:seed_`, + 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 diff --git a/mods/hades_seeds/init.lua b/mods/hades_seeds/init.lua index fb4a92e..81f27c9 100644 --- a/mods/hades_seeds/init.lua +++ b/mods/hades_seeds/init.lua @@ -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,