-- -- Convert default:dirt to something that fits the environment -- minetest.register_abm({ label = "Grass spread", nodenames = {"group:family:default:dirt"}, neighbors = { "air", "group:grass", "group:dry_grass", "default:snow", }, interval = 6, chance = 50, catch_up = false, action = function(pos, node) -- Check for darkness: night, shadow or under a light-blocking node -- Returns if ignore above local above = {x = pos.x, y = pos.y + 1, z = pos.z} if (minetest.get_node_light(above) or 0) < 13 then return end -- Look for spreading dirt-type neighbours local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type") if p2 then local n3 = minetest.get_node(p2) local shape = minetest.get_item_group(node.name, "natural_slope") local all_shapes = naturalslopeslib.get_all_shapes(n3.name) if #all_shapes > 1 then minetest.set_node(pos, {name = all_shapes[shape + 1], param2 = node.param2}) else minetest.set_node(pos, {name = n3.name}) end return end -- Else, any seeding nodes on top? local name = minetest.get_node(above).name -- Snow check is cheapest, so comes first if name == "default:snow" then minetest.set_node(pos, {name = "default:dirt_with_snow"}) elseif minetest.get_item_group(name, "grass") ~= 0 then minetest.set_node(pos, {name = "default:dirt_with_grass"}) elseif minetest.get_item_group(name, "dry_grass") ~= 0 then minetest.set_node(pos, {name = "default:dirt_with_dry_grass"}) end end })