119 lines
5.5 KiB
Lua
119 lines
5.5 KiB
Lua
-- general handling of trees that are to be grown as part of
|
|
-- schematics placed in villages and in the flattened/partly
|
|
-- flattened area around the village
|
|
|
|
local trees_to_grow_via_voxelmanip = {};
|
|
|
|
-- figure out which tree to grow in RealTest
|
|
-- (this is also accessed in mapgen.lua)
|
|
mg_villages.sapling_to_tree_realtest = {}
|
|
for k,v in pairs(replacements_group['wood'].data) do
|
|
-- if the sapling exists in this game
|
|
if( minetest.registered_nodes[v[6]]
|
|
and v[2] == "trees:") then
|
|
-- we are intrested in the tree name
|
|
mg_villages.sapling_to_tree_realtest[v[6]] = "trees:"..v[1]
|
|
mg_villages.sapling_to_tree_realtest[minetest.get_content_id(v[6])] = "trees:"..v[1]
|
|
end
|
|
end
|
|
|
|
-- called from mg_villages.place_villages_via_voxelmanip
|
|
mg_villages.grow_trees_voxelmanip = function( vm )
|
|
for tree_nr, pos in ipairs( trees_to_grow_via_voxelmanip ) do
|
|
-- print("GROWING "..tostring(pos.path).." at "..minetest.pos_to_string(pos))
|
|
minetest.place_schematic_on_vmanip(vm, {x=pos.x, y=pos.y, z=pos.z}, pos.path, "random", nil, true)
|
|
end
|
|
trees_to_grow_via_voxelmanip = {};
|
|
end
|
|
|
|
|
|
-- called from mg_villages.flatten_village_area (randomly height adjusted area),
|
|
-- mg_villages.village_area_fill_with_plants (farmland around the village) and
|
|
-- mg_villages.place_villages_via_voxelmanip (saplings inside spawned structures, i.e. gardens)
|
|
mg_villages.grow_a_tree = function( pos, plant_id, minp, maxp, data, a, cid, pr, snow )
|
|
-- the name of the sapling is more practical here than its content_id
|
|
local sapling_name = minetest.get_name_from_content_id(plant_id)
|
|
-- a normal tree; sometimes comes with apples
|
|
if( sapling_name == "default:sapling") then
|
|
mg_villages.grow_tree( data, a, pos, math.random(1, 4) == 1, math.random(1,100000), snow)
|
|
return true;
|
|
-- a normal jungletree
|
|
elseif( sapling_name == "default:junglesapling") then
|
|
mg_villages.grow_jungletree( data, a, pos, math.random(1,100000), snow)
|
|
return true;
|
|
-- a pine tree
|
|
elseif( sapling_name == "default:pine_sapling") then
|
|
mg_villages.grow_pinetree( data, a, pos, snow);
|
|
return true;
|
|
-- an acacia tree; it does not have its own grow function
|
|
elseif( sapling_name == "default:acacia_sapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-4, y=pos.y-1, z=pos.z-4,
|
|
path = minetest.get_modpath("default").."/schematics/acacia_tree_from_sapling.mts"})
|
|
return true;
|
|
-- aspen tree from newer minetest game
|
|
elseif( sapling_name == "default:aspen_sapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-2, y=pos.y-1, z=pos.z-2,
|
|
path = minetest.get_modpath("default").."/schematics/aspen_tree_from_sapling.mts"})
|
|
return true;
|
|
-- a savannatree from the mg mod
|
|
elseif( sapling_name == "mg:savannasapling") then
|
|
mg_villages.add_savannatree( data, a, pos.x, pos.y, pos.z, minp, maxp, pr) -- TODO: snow
|
|
return true;
|
|
-- a pine tree from the mg mod
|
|
elseif( sapling_name == "mg:pinesapling") then
|
|
mg_villages.add_pinetree( data, a, pos.x, pos.y, pos.z, minp, maxp, pr) -- TODO: snow
|
|
return true;
|
|
|
|
-- trees from MineClone2
|
|
elseif( sapling_name == "mcl_core:sapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-2, y=pos.y-1, z=pos.z-2,
|
|
path = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts"})
|
|
return true;
|
|
elseif( sapling_name == "mcl_core:darksapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-3, y=pos.y-1, z=pos.z-4,
|
|
path = minetest.get_modpath("mcl_core").."/schematics/mcl_core_dark_oak.mts"})
|
|
return true;
|
|
elseif( sapling_name == "mcl_core:sprucesapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
-- there are three variats of spruce trees in MineClone2
|
|
local r = math.random(1, 3)
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-3, y=pos.y-1, z=pos.z-3,
|
|
path = minetest.get_modpath("mcl_core").."/schematics/mcl_core_spruce_"..r..".mts"})
|
|
return true;
|
|
elseif( sapling_name == "mcl_core:acaciasapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
-- there are seven variats of acacia trees in MineClone2
|
|
local r = math.random(1, 7)
|
|
local offset = 0
|
|
if r == 2 or r == 3 then offset = -4
|
|
elseif r == 4 or r == 6 or r == 7 then offset = -3
|
|
elseif r == 1 or r == 5 then offset = -5
|
|
end
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-offset, y=pos.y-1, z=pos.z-offset,
|
|
path = minetest.get_modpath("mcl_core").."/schematics/mcl_core_acacia_"..r..".mts"})
|
|
return true;
|
|
elseif( sapling_name == "mcl_core:junglesapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
-- just normal ones - no huge ones inside a village
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-2, y=pos.y-1, z=pos.z-2,
|
|
path = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree.mts"})
|
|
return true;
|
|
elseif( sapling_name == "mcl_core:birchsapling") then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
-- just normal ones - no huge ones inside a village
|
|
table.insert( trees_to_grow_via_voxelmanip, {x=pos.x-2, y=pos.y-1, z=pos.z-2,
|
|
path = minetest.get_modpath("mcl_core").."/schematics/mcl_core_birch.mts"})
|
|
return true;
|
|
-- RealTest trees
|
|
elseif( mg_villages.sapling_to_tree_realtest[sapling_name]) then
|
|
data[ a:index( pos.x, pos.y, pos.z )] = plant_id
|
|
mg_villages.grow_realtest_tree(data, a, pos, snow, mg_villages.sapling_to_tree_realtest[sapling_name])
|
|
end
|
|
return false;
|
|
end
|
|
|