1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- -- LUALOCALS < ---------------------------------------------------------
- local minetest, nodecore
- = minetest, nodecore
- -- LUALOCALS > ---------------------------------------------------------
- local modname = minetest.get_current_modname()
- local dirt = modname .. ":dirt"
- local grass = modname .. ":dirt_with_grass"
- local breathable = {
- airlike = true,
- allfaces = true,
- allfaces_optional = true,
- torchlike = true,
- signlike = true,
- plantlike = true,
- firelike = true,
- raillike = true,
- nodebox = true,
- mesh = true,
- plantlike_rooted = true
- }
- -- nil = stay, false = die, true = grow
- local function grassable(above)
- local node = minetest.get_node(above)
- if node.name == "ignore" then return end
- local def = minetest.registered_items[node.name] or {}
- if (not def.drawtype) or (not breathable[def.drawtype])
- or (def.damage_per_second and def.damage_per_second > 0)
- then return false end
- local ln = nodecore.get_node_light(above)
- if not ln then return end
- return ln >= 10
- end
- nodecore.register_limited_abm({
- label = "grass spread",
- nodenames = {"group:soil"},
- neighbors = {grass},
- interval = 6,
- chance = 50,
- action = function(pos, node)
- if node.name == grass then return end
- local above = {x = pos.x, y = pos.y + 1, z = pos.z}
- if not grassable(above) then return end
- return minetest.set_node(pos, {name = grass})
- end
- })
- nodecore.register_limited_abm({
- label = "grass decay",
- nodenames = {grass},
- interval = 8,
- chance = 50,
- action = function(pos)
- local above = {x = pos.x, y = pos.y + 1, z = pos.z}
- if grassable(above) ~= false then return end
- return minetest.set_node(pos, {name = dirt})
- end
- })
- nodecore.register_dirt_leaching(dirt, modname .. ":sand_loose")
|