92 lines
2.6 KiB
Lua
92 lines
2.6 KiB
Lua
-- Renew mod for Minetest
|
|
-- Copyright © 2018 Alex Yst <https://y.st./>
|
|
|
|
-- This program is free software; you can redistribute it and/or
|
|
-- modify it under the terms of the GNU Lesser General Public
|
|
-- License as published by the Free Software Foundation; either
|
|
-- version 2.1 of the License, or (at your option) any later version.
|
|
|
|
-- This software is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
-- Lesser General Public License for more details.
|
|
|
|
-- You should have received a copy of the GNU Lesser General Public
|
|
-- License along with this program. If not, see
|
|
-- <https://www.gnu.org./licenses/>.
|
|
|
|
if minetest.get_mapgen_setting("mgname") ~= "v6" then
|
|
local coral_colour = {
|
|
"default:coral_brown" ,
|
|
"default:coral_orange",
|
|
}
|
|
|
|
local rooted_coral_colour = {
|
|
"default:coral_cyan",
|
|
"default:coral_green",
|
|
"default:coral_pink",
|
|
}
|
|
|
|
minetest.register_abm({
|
|
label = "Coral Propagation",
|
|
nodenames = {"default:coral_brown", "default:coral_orange"},
|
|
neighbors = {"group:water"},
|
|
interval = 1800,
|
|
chance = 900,
|
|
catch_up = true,
|
|
action = function(pos)
|
|
local new_pos = {
|
|
{x=pos.x,y=pos.y+1,z=pos.z},
|
|
{x=pos.x+1,y=pos.y,z=pos.z},
|
|
{x=pos.x,y=pos.y,z=pos.z+1},
|
|
{x=pos.x-1,y=pos.y,z=pos.z},
|
|
{x=pos.x,y=pos.y,z=pos.z-1},
|
|
{x=pos.x,y=pos.y-1,z=pos.z},
|
|
}
|
|
new_pos = new_pos[math.random(6)]
|
|
local old_node = minetest.get_node_or_nil(new_pos)
|
|
if new_pos.y >= -8 and new_pos.y <= 0 and old_node
|
|
and minetest.get_item_group(old_node.name, "water") > 0
|
|
and minetest.find_node_near(new_pos, 4, "group:sand")
|
|
and not minetest.find_node_near(new_pos, 1, "air") then
|
|
minetest.set_node(new_pos, {name = coral_colour[math.random(2)]})
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
label = "Coral Seeding",
|
|
nodenames = {"group:water"},
|
|
neighbors = {"group:sand"},
|
|
interval = 3600,
|
|
chance = 7200,
|
|
catch_up = false,
|
|
action = function(pos)
|
|
if pos.y >= -8 and pos.y <= 0
|
|
and not minetest.find_node_near(pos, 1, "air") then
|
|
minetest.set_node(pos, {name = coral_colour[math.random(2)]})
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
label = "Rooted Coral Propagation",
|
|
nodenames = {"default:coral_skeleton"},
|
|
neighbors = {"group:water"},
|
|
interval = 1800,
|
|
chance = 900,
|
|
catch_up = true,
|
|
action = function(pos)
|
|
if minetest.get_node({
|
|
x = pos.x,
|
|
y = pos.y + 1,
|
|
z = pos.z,
|
|
}).name == "default:water_source" then
|
|
minetest.set_node(new_pos, {
|
|
name = rooted_coral_colour[math.random(3)],
|
|
})
|
|
end
|
|
end,
|
|
})
|
|
end
|