From 86fd616f3c7ae820934dcd99f4c15342f4eda4ec Mon Sep 17 00:00:00 2001 From: paramat Date: Sat, 18 Mar 2017 17:54:03 +0000 Subject: [PATCH] Flora spread: Allow spread on rainforest litter. Other improvements Use the soil group more instead of checking for multiple node names. Remove 'neighbors' from ABM. Turn any flora to dry shrub if on a non-soil, except when on default:sand to avoid dune grasses being replaced. Search for "group:soil" when searching for a position for the new flora node, instead of searching for multiple node names, however do not spread flora onto desert sand, which is in the soil group. Remove default:dirt_with_snow from the soil group as it would be frozen soil. It can be dug and placed to turn it into dirt (consider this some extra work needed to make it cultivatable). --- mods/default/nodes.lua | 2 +- mods/flowers/init.lua | 29 +++++++++++++++-------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index e410172..c70f614 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -434,7 +434,7 @@ minetest.register_node("default:dirt_with_snow", { tiles = {"default_snow.png", "default_dirt.png", {name = "default_dirt.png^default_snow_side.png", tileable_vertical = false}}, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1, snowy = 1}, + groups = {crumbly = 3, spreading_dirt_type = 1, snowy = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua index da82bb7..c71bc29 100644 --- a/mods/flowers/init.lua +++ b/mods/flowers/init.lua @@ -107,12 +107,11 @@ function flowers.flower_spread(pos, node) pos.y = pos.y - 1 local under = minetest.get_node(pos) pos.y = pos.y + 1 - if under.name == "default:desert_sand" then + if minetest.get_item_group(under.name, "soil") == 0 and + -- Do not replace sand dune grasses + under.name ~= "default:sand" then minetest.set_node(pos, {name = "default:dry_shrub"}) return - elseif under.name ~= "default:dirt_with_grass" and - under.name ~= "default:dirt_with_dry_grass" then - return end local light = minetest.get_node_light(pos) @@ -126,24 +125,26 @@ function flowers.flower_spread(pos, node) return end - local seedling = minetest.find_nodes_in_area_under_air(pos0, pos1, - {"default:dirt_with_grass", "default:dirt_with_dry_grass"}) - if #seedling > 0 then - seedling = seedling[math.random(#seedling)] - seedling.y = seedling.y + 1 - light = minetest.get_node_light(seedling) - if not light or light < 13 then + local soils = minetest.find_nodes_in_area_under_air( + pos0, pos1, "group:soil") + if #soils > 0 then + local seedling = soils[math.random(#soils)] + local seedling_above = + {x = seedling.x, y = seedling.y + 1, z = seedling.z} + light = minetest.get_node_light(seedling_above) + if not light or light < 13 or + -- Desert sand is in the soil group + minetest.get_node(seedling).name == "default:desert_sand" then return end - minetest.set_node(seedling, {name = node.name}) + + minetest.set_node(seedling_above, {name = node.name}) end end minetest.register_abm({ label = "Flower spread", nodenames = {"group:flora"}, - neighbors = {"default:dirt_with_grass", "default:dirt_with_dry_grass", - "default:desert_sand"}, interval = 13, chance = 96, action = function(...)