trees/conifertree.lua

78 lines
2.1 KiB
Lua

function add_section(pos,size)
local leave = "trees:leaves_conifer"
minetest.env:add_node(pos, {name="trees:tree_conifer"})
for y = size , 0, -1 do
if y <= 0 then return end
for x = y, -y, -1 do
for z = y, -y, -1 do
if math.abs(x)+math.abs(z) <= size then
local p = {x=pos.x+x, y=pos.y+size-1-y, z=pos.z+z}
local n = minetest.env:get_node(p)
if (n.name=="air") then
minetest.env:add_node(p, {name=leave})
elseif (n.name=="ignore") then
minetest.after(20, function()
minetest.env:add_node(p, {name=leave})
end)
end
end
end
end
end
end
abstract_trees.grow_conifertree = function(pos)
minetest.after(5, function()
local size = 5+math.random(10)
local inter = size/7
local walk = 2
minetest.env:add_node({x=pos.x, y=pos.y+size, z=pos.z}, {name="trees:leaves_conifer"})
for i=1,size,1 do
if walk < inter then
minetest.env:add_node({x=pos.x, y=pos.y+size-i, z=pos.z}, {name="trees:tree_conifer"})
walk = walk + 1
else
if i > size*0.9 then
minetest.env:add_node({x=pos.x, y=pos.y+size-i, z=pos.z}, {name="trees:tree_conifer"})
else
add_section({x=pos.x, y=pos.y+size-i, z=pos.z},math.ceil(inter))
end
walk = 1
inter = inter + (i/size)*3
end
end
end)
end
-- abm
minetest.register_abm({
nodenames = "trees:sapling_conifer",
interval = 1000,
chance = 4,
action = function(pos, node, _, _)
if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
abstract_trees.grow_conifertree({x = pos.x, y = pos.y, z = pos.z})
end
end
})
--spawn
biome_lib:register_generate_plant({
surface = {"default:dirt", "default:dirt_with_grass", "snow:dirt_with_snow"},
max_count = 10,
avoid_nodes = {"group:tree"},
avoid_radius = 2,
rarity = 50,
seed_diff = 777,
min_elevation = 10,
max_elevation = 200,
plantlife_limit = -0.9,
humidity_max = -0.7,
humidity_min = 0.4,
temp_max = -0.2,
temp_min = 0.4,
},
"abstract_trees.grow_conifertree"
)