-- Mushroom spread and death
+function flowers.mushroom_spread(pos, node)
+ if minetest.get_node_light(pos, nil) == 15 then
+ minetest.remove_node(pos)
+ return
+ end
+ local positions = minetest.find_nodes_in_area_under_air(
+ {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1},
+ {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1},
+ {"group:soil", "group:tree"})
+ if #positions == 0 then
+ return
+ end
+ local pos2 = positions[math.random(#positions)]
+ pos2.y = pos2.y + 1
+ if minetest.get_node_light(pos, 0.5) <= 3 and
+ minetest.get_node_light(pos2, 0.5) <= 3 then
+ minetest.set_node(pos2, {name = node.name})
+ end
+end
+
minetest.register_abm({
label = "Mushroom spread",
nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"},
interval = 11,
- chance = 50,
- action = function(pos, node)
- if minetest.get_node_light(pos, nil) == 15 then
- minetest.remove_node(pos)
- return
- end
- local random = {
- x = pos.x + math.random(-2, 2),
- y = pos.y + math.random(-1, 1),
- z = pos.z + math.random(-2, 2)
- }
- local random_node = minetest.get_node_or_nil(random)
- if not random_node or random_node.name ~= "air" then
- return
- end
- local node_under = minetest.get_node_or_nil({x = random.x,
- y = random.y - 1, z = random.z})
- if not node_under then
- return
- end
-
- if (minetest.get_item_group(node_under.name, "soil") ~= 0 or
- minetest.get_item_group(node_under.name, "tree") ~= 0) and
- minetest.get_node_light(pos, 0.5) <= 3 and
- minetest.get_node_light(random, 0.5) <= 3 then
- minetest.set_node(random, {name = node.name})
- end
- end
+ chance = 150,
+ action = function(...)
+ flowers.mushroom_spread(...)
+ end,
})