Flora spread: Allow spread on rainforest litter. Other improvements
authorparamat <mat.gregory@virginmedia.com>
Sat, 18 Mar 2017 17:54:03 +0000 (17:54 +0000)
committerparamat <mat.gregory@virginmedia.com>
Mon, 20 Mar 2017 00:14:56 +0000 (00:14 +0000)
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
mods/flowers/init.lua

index e410172f00729e2c403d83161bdb641963556bee..c70f614bcbc3662a558b37c1e44cbaf8179c0b3f 100644 (file)
@@ -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},
index da82bb7c6757226933f1ea19395befaed7df321e..c71bc29c6488a2544b50fe9cdc094297feb67b79 100644 (file)
@@ -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(...)