properly-limit abm-based growth to just the proper surfaces

(if no surface list is given, just grow on anything)
This commit is contained in:
Vanessa Dannenberg 2019-05-22 20:01:31 -04:00
parent d72e15f1d0
commit a96f015ce9
1 changed files with 19 additions and 4 deletions

View File

@ -2,6 +2,19 @@ local time_scale = ...
-- The growing ABM
function biome_lib.check_surface(name, nodes)
if not nodes then return true end
if type(nodes) == "string" then return nodes == name end
if nodes.set and nodes[name] then
return true
else
for _, n in ipairs(nodes) do
if name == n then return true end
end
end
return false
end
function biome_lib:grow_plants(opts)
local options = opts
@ -49,11 +62,13 @@ function biome_lib:grow_plants(opts)
minetest.swap_node(p_top, { name = options.grow_plant, param2 = walldir})
end
elseif not options.grow_result and not options.grow_function then
minetest.swap_node(pos, biome_lib.air)
elseif biome_lib.check_surface(n_bot.name, options.grow_nodes) then
if not options.grow_result and not options.grow_function then
minetest.swap_node(pos, biome_lib.air)
else
biome_lib:replace_object(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff)
else
biome_lib:replace_object(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff)
end
end
end
end