151 lines
4.4 KiB
Lua
151 lines
4.4 KiB
Lua
-- generating of forest soils
|
|
|
|
local RaDiuS = {
|
|
-- WE1 NS1 WE2 NS2 WE3 NS3
|
|
{-1,-2, -2,-2, -2,-3},
|
|
{ 0,-2, -3,-1, -3,-2},
|
|
{ 1,-2, -3, 0, -4,-1},
|
|
{-2,-1, -3, 1, -4, 0},
|
|
{-1,-1, -2, 2, -4, 1},
|
|
{ 0,-1, -1, 3, -3, 2},
|
|
{ 1,-1, 0, 3, -2, 3},
|
|
{ 2,-1, 1, 3, -1, 4},
|
|
{-2, 0, 2, 2, 0, 4},
|
|
{-1, 0, 3, 1, 1, 4},
|
|
{ 0, 0, 3, 0, 2, 3},
|
|
{ 1, 0, 3,-1, 3, 2},
|
|
{ 2, 0, 2,-2, 4, 1},
|
|
{-2, 1, 1,-3, 4, 0},
|
|
{-1, 1, 0,-3, 4,-1},
|
|
{ 0, 1, -1,-3, 3,-2},
|
|
{ 1, 1, 0, 0, 2,-3},
|
|
{ 2, 1, 0, 0, 1,-4},
|
|
{-1, 2, 0, 0, 0,-4},
|
|
{ 0, 2, 0, 0, -1,-4},
|
|
{ 1, 2, 0, 0, 0, 0},
|
|
}
|
|
-- e = + , n = +
|
|
abstract_woodsoils.place_soil = function(pos)
|
|
|
|
if minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name, "soil") > 0
|
|
or minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}).name, "soil") > 0 then
|
|
for i in pairs(RaDiuS) do
|
|
local WE1 = RaDiuS[i][1]
|
|
local NS1 = RaDiuS[i][2]
|
|
local WE2 = RaDiuS[i][3]
|
|
local NS2 = RaDiuS[i][4]
|
|
local WE3 = RaDiuS[i][5]
|
|
local NS3 = RaDiuS[i][6]
|
|
local radius_1a = {x=pos.x+WE1,y=pos.y-1,z=pos.z+NS1}
|
|
local radius_1b = {x=pos.x+WE1,y=pos.y-2,z=pos.z+NS1}
|
|
local radius_2a = {x=pos.x+WE2,y=pos.y-1,z=pos.z+NS2}
|
|
local radius_2b = {x=pos.x+WE2,y=pos.y-2,z=pos.z+NS2}
|
|
local radius_3a = {x=pos.x+WE3,y=pos.y-1,z=pos.z+NS3}
|
|
local radius_3b = {x=pos.x+WE3,y=pos.y-2,z=pos.z+NS3}
|
|
--local node_1a = minetest.get_node(radius_1a)
|
|
--local node_1b = minetest.get_node(radius_1b)
|
|
local node_2a = minetest.get_node(radius_2a)
|
|
local node_2b = minetest.get_node(radius_2b)
|
|
local node_3a = minetest.get_node(radius_3a)
|
|
local node_3b = minetest.get_node(radius_3b)
|
|
-- Dirt with Leaves 1
|
|
if minetest.get_item_group(minetest.get_node(radius_1a).name, "soil") > 0 then
|
|
minetest.swap_node(radius_1a, {name="woodsoils:dirt_with_leaves_1"})
|
|
end
|
|
if minetest.get_item_group(minetest.get_node(radius_1b).name, "soil") > 0 then
|
|
minetest.swap_node(radius_1b, {name="woodsoils:dirt_with_leaves_1"})
|
|
end
|
|
-- Grass with Leaves 2
|
|
if string.find(node_2a.name, "dirt_with_grass") then
|
|
minetest.swap_node(radius_2a, {name="woodsoils:grass_with_leaves_2"})
|
|
end
|
|
if string.find(node_2b.name, "dirt_with_grass") then
|
|
minetest.swap_node(radius_2b, {name="woodsoils:grass_with_leaves_2"})
|
|
end
|
|
-- Grass with Leaves 1
|
|
if string.find(node_3a.name, "dirt_with_grass") then
|
|
minetest.swap_node(radius_3a, {name="woodsoils:grass_with_leaves_1"})
|
|
end
|
|
if string.find(node_3b.name, "dirt_with_grass") then
|
|
minetest.swap_node(radius_3b, {name="woodsoils:grass_with_leaves_1"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
biome_lib.register_on_generate({
|
|
surface = {
|
|
"group:tree",
|
|
"ferns:fern_03",
|
|
"ferns:fern_02",
|
|
"ferns:fern_01"
|
|
},
|
|
max_count = 1000,
|
|
rarity = 1,
|
|
min_elevation = 1,
|
|
max_elevation = 40,
|
|
near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"},
|
|
near_nodes_size = 5,
|
|
near_nodes_vertical = 1,
|
|
near_nodes_count = 4,
|
|
plantlife_limit = -1,
|
|
check_air = false,
|
|
},
|
|
"abstract_woodsoils.place_soil"
|
|
)
|
|
|
|
biome_lib.register_on_generate({
|
|
surface = {
|
|
"moretrees:apple_tree_sapling_ongen",
|
|
"moretrees:beech_sapling_ongen",
|
|
"moretrees:birch_sapling_ongen",
|
|
"moretrees:fir_sapling_ongen",
|
|
"moretrees:jungletree_sapling_ongen",
|
|
"moretrees:oak_sapling_ongen",
|
|
"moretrees:palm_sapling_ongen",
|
|
"moretrees:rubber_tree_sapling_ongen",
|
|
"moretrees:sequoia_sapling_ongen",
|
|
"moretrees:spruce_sapling_ongen",
|
|
"moretrees:willow_sapling_ongen"
|
|
},
|
|
max_count = 1000,
|
|
rarity = 2,
|
|
min_elevation = 1,
|
|
max_elevation = 40,
|
|
plantlife_limit = -0.9,
|
|
check_air = false,
|
|
},
|
|
"abstract_woodsoils.place_soil"
|
|
)
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"default:papyrus"},
|
|
neighbors = {
|
|
"woodsoils:dirt_with_leaves_1",
|
|
"woodsoils:dirt_with_leaves_2",
|
|
"woodsoils:grass_with_leaves_1",
|
|
"woodsoils:grass_with_leaves_2"
|
|
},
|
|
interval = 50,
|
|
chance = 20,
|
|
action = function(pos, node)
|
|
pos.y = pos.y-1
|
|
local name = minetest.get_node(pos).name
|
|
if string.find(name, "_with_leaves_") then
|
|
if minetest.find_node_near(pos, 3, {"group:water"}) == nil then
|
|
return
|
|
end
|
|
pos.y = pos.y+1
|
|
local height = 0
|
|
while minetest.get_node(pos).name == "default:papyrus" and height < 4 do
|
|
height = height+1
|
|
pos.y = pos.y+1
|
|
end
|
|
if height < 4 then
|
|
if minetest.get_node(pos).name == "air" then
|
|
minetest.swap_node(pos, {name="default:papyrus"})
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
})
|