Moretrees support added back
Code cleanup
This commit is contained in:
parent
b64e8fa5ad
commit
cb3b84b846
@ -6,21 +6,21 @@ local schem_table= {}
|
||||
|
||||
y = 0
|
||||
|
||||
for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
--[[for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
if string.find(dec_name, "tree") then
|
||||
minetest.debug(dec_name)
|
||||
minetest.debug("just name: "..dec_name)
|
||||
end
|
||||
end
|
||||
end]]--
|
||||
|
||||
for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
if string.find(dec_name, "tree") then
|
||||
if string.find(dec_name, "tree") and not string.find(dec_name, "sapling") then
|
||||
local d_name -- Decoration name
|
||||
local size -- Schematic dimensions, standard pos format eg (x=5,y=12,z=5)
|
||||
local leaves = {} -- Table to store leaf node names
|
||||
local fruit = {} -- Table to store fruit/atatched node names
|
||||
local trunk = ""
|
||||
local schematic
|
||||
--minetest.debug(dec_name)
|
||||
|
||||
local schem_filepath = defs.schematic -- file path to schematic mts binary file
|
||||
|
||||
if type(schem_filepath) == "table" then -- some schematics stored as lua tables
|
||||
@ -28,6 +28,8 @@ for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
else
|
||||
schematic = minetest.read_schematic(schem_filepath, "all") -- Reads in all probabilities of nodes from .mts file
|
||||
end
|
||||
|
||||
if schematic ~= nil then
|
||||
size = schematic.size -- stored in standard pos format eg (x=5,y=12,z=5)
|
||||
d_name = dec_name
|
||||
local ts = "" -- ts = (t)emporary (s)tring variable
|
||||
@ -40,13 +42,22 @@ for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
for i = 1,#schematic.data do -- Read-in every defined node in schematic
|
||||
local temp_name = schematic.data[i].name
|
||||
|
||||
if not minetest.registered_nodes[temp_name] then -- Any node not registered treat as air.
|
||||
temp_name = "air"
|
||||
end
|
||||
|
||||
grps[temp_name] = minetest.registered_nodes[temp_name].groups
|
||||
grp = grps[temp_name] -- Get the groups our current specified schematic node has
|
||||
|
||||
--[[old redundant code
|
||||
if not grp[temp_name] then
|
||||
|
||||
grps[temp_name] = minetest.registered_nodes[temp_name].groups
|
||||
grp = grps[temp_name] -- Get the groups our current specified schematic node has
|
||||
else
|
||||
grp = grps[temp_name]
|
||||
|
||||
end
|
||||
end]]--
|
||||
|
||||
if grp.leaves == 1 then -- Check Leaves
|
||||
nt_name = "L"
|
||||
@ -56,6 +67,9 @@ for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
nt_name = "T"
|
||||
trunk = temp_name
|
||||
|
||||
elseif grp.soil == 1 then -- Check for Soil replace with air
|
||||
nt_name = "A"
|
||||
|
||||
elseif string.find(temp_name, "air") then -- Air has no groups so I just use the name check
|
||||
nt_name = "A"
|
||||
|
||||
@ -103,15 +117,15 @@ for dec_name,defs in pairs(minetest.registered_decorations) do
|
||||
schem_table[d_name]["leaves"] = leaves -- store leave(s) node name
|
||||
schem_table[d_name]["fruit"] = fruit -- store fruit(s) node name
|
||||
schem_table[d_name]["trunk"] = trunk -- store trunk node name
|
||||
--[[
|
||||
--[[
|
||||
minetest.debug(dump(schem_table[d_name]["leaves"])) -- for debugging assistance
|
||||
minetest.debug(dump(schem_table[d_name]["fruit"]))
|
||||
for k,v in ipairs(schem_table[d_name]) do
|
||||
minetest.debug(d_name.." X/Z Slice: Y= "..k.." of "..schem_table[d_name].size.y)
|
||||
minetest.debug("\n"..v)
|
||||
end
|
||||
]]--
|
||||
|
||||
]]--
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -408,8 +422,8 @@ local th_start = math.ceil(def_str.size.y * 0.25)
|
||||
end
|
||||
|
||||
|
||||
--[[ -- debugging
|
||||
|
||||
-- debugging
|
||||
--[[
|
||||
local tree_sum = {[def_str.trunk] = {
|
||||
["th"] = tree.th,
|
||||
["tt"] = tree.tt,
|
||||
@ -432,39 +446,39 @@ local th_start = math.ceil(def_str.size.y * 0.25)
|
||||
|
||||
end
|
||||
tree_debug = string.gsub(tree_debug, "return", "")
|
||||
minetest.debug("\n"..def_str.trunk..tree_debug) ]]--
|
||||
|
||||
minetest.debug("\n"..def_str.trunk..tree_debug)
|
||||
]]--
|
||||
-----------------------------------------------------------
|
||||
-- Check if tree_name and tree.tt are already registered --
|
||||
-- and either update values or register new record --
|
||||
-----------------------------------------------------------
|
||||
|
||||
if not tree_config[def_str.trunk] then -- Check if tree top table exists if not create
|
||||
tree_config[def_str.trunk] = {}
|
||||
if not falling_tree_capitator.tree_config[def_str.trunk] then -- Check if tree top table exists if not create
|
||||
falling_tree_capitator.tree_config[def_str.trunk] = {}
|
||||
end
|
||||
|
||||
|
||||
if not tree_config[def_str.trunk][tree.tt] then -- If tree already has a config record we need to check
|
||||
if not falling_tree_capitator.tree_config[def_str.trunk][tree.tt] then -- If tree already has a config record we need to check
|
||||
|
||||
tree_config[def_str.trunk][tree.tt] = {}
|
||||
tree_config[def_str.trunk][tree.tt]["th"] = tree.th
|
||||
tree_config[def_str.trunk][tree.tt]["tt"] = tree.tt
|
||||
tree_config[def_str.trunk][tree.tt]["lv"] = tree.lv
|
||||
tree_config[def_str.trunk][tree.tt]["lw"] = tree.lw
|
||||
tree_config[def_str.trunk][tree.tt]["lh"] = tree.lh
|
||||
tree_config[def_str.trunk][tree.tt]["bx"] = tree.bx
|
||||
tree_config[def_str.trunk][tree.tt]["bn"] = tree.bn
|
||||
tree_config[def_str.trunk][tree.tt]["bw"] = tree.bw
|
||||
tree_config[def_str.trunk][tree.tt]["ft"] = tree.ft
|
||||
tree_config[def_str.trunk][tree.tt]["fx"] = tree.fx
|
||||
tree_config[def_str.trunk][tree.tt]["fn"] = tree.fn
|
||||
tree_config[def_str.trunk][tree.tt]["sp"] = tree.sp
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt] = {}
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["th"] = tree.th
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["tt"] = tree.tt
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["lv"] = tree.lv
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["lw"] = tree.lw
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["lh"] = tree.lh
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["bx"] = tree.bx
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["bn"] = tree.bn
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["bw"] = tree.bw
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["ft"] = tree.ft
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["fx"] = tree.fx
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["fn"] = tree.fn
|
||||
falling_tree_capitator.tree_config[def_str.trunk][tree.tt]["sp"] = tree.sp
|
||||
|
||||
--minetest.debug("db: "..dump(tree_config))
|
||||
--minetest.debug("db: "..dump(falling_tree_capitator.tree_config))
|
||||
|
||||
elseif tree_config[def_str.trunk][tree.tt] then
|
||||
elseif falling_tree_capitator.tree_config[def_str.trunk][tree.tt] then
|
||||
|
||||
local tree_config_data = tree_config[def_str.trunk][tree.tt]
|
||||
local tree_config_data = falling_tree_capitator.tree_config[def_str.trunk][tree.tt]
|
||||
for k,v in pairs(tree_config_data) do
|
||||
local rev_tab = {}
|
||||
local fin_tab = {}
|
||||
@ -506,7 +520,7 @@ local th_start = math.ceil(def_str.size.y * 0.25)
|
||||
end
|
||||
]]--
|
||||
|
||||
for k,v in pairs(tree_config) do
|
||||
for k,v in pairs(falling_tree_capitator.tree_config) do
|
||||
|
||||
minetest.debug(k)
|
||||
|
||||
@ -519,19 +533,19 @@ local th_start = math.ceil(def_str.size.y * 0.25)
|
||||
end
|
||||
|
||||
|
||||
tree_config[def_str.trunk..count] = {}
|
||||
tree_config[def_str.trunk..count]["th"] = tree.th
|
||||
tree_config[def_str.trunk..count]["tt"] = tree.tt
|
||||
tree_config[def_str.trunk..count]["lv"] = tree.lv
|
||||
tree_config[def_str.trunk..count]["lw"] = tree.lw
|
||||
tree_config[def_str.trunk..count]["lh"] = tree.lh
|
||||
tree_config[def_str.trunk..count]["bx"] = tree.bx
|
||||
tree_config[def_str.trunk..count]["bn"] = tree.bn
|
||||
tree_config[def_str.trunk..count]["bw"] = tree.bw
|
||||
tree_config[def_str.trunk..count]["ft"] = tree.ft
|
||||
tree_config[def_str.trunk..count]["fx"] = tree.fx
|
||||
tree_config[def_str.trunk..count]["fn"] = tree.fn
|
||||
tree_config[def_str.trunk..count]["sp"] = tree.sp
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count] = {}
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["th"] = tree.th
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["tt"] = tree.tt
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["lv"] = tree.lv
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["lw"] = tree.lw
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["lh"] = tree.lh
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["bx"] = tree.bx
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["bn"] = tree.bn
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["bw"] = tree.bw
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["ft"] = tree.ft
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["fx"] = tree.fx
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["fn"] = tree.fn
|
||||
falling_tree_capitator.tree_config[def_str.trunk..count]["sp"] = tree.sp
|
||||
|
||||
end
|
||||
|
||||
|
124
i_register_tree_element_entity.lua
Normal file
124
i_register_tree_element_entity.lua
Normal file
@ -0,0 +1,124 @@
|
||||
----------------------------------------------------
|
||||
-- Tree Entity Setup --
|
||||
----------------------------------------------------
|
||||
minetest.register_entity("falling_tree_capitator:tree_element", {
|
||||
initial_properties = {
|
||||
physical = true,
|
||||
collide_with_objects = false,
|
||||
pointable = false,
|
||||
collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
|
||||
visual = "wielditem",
|
||||
textures = {},
|
||||
automatic_face_movement_dir = 0.0,
|
||||
visual_size = {x=falling_tree_capitator.bvav_settings.scaling, y=falling_tree_capitator.bvav_settings.scaling}
|
||||
},
|
||||
|
||||
node = {},
|
||||
set_node = function(self, node)
|
||||
self.node = node
|
||||
local prop = {
|
||||
is_visible = true,
|
||||
textures = {node.name},
|
||||
visual_size = {x=falling_tree_capitator.bvav_settings.scaling, y=falling_tree_capitator.bvav_settings.scaling}
|
||||
}
|
||||
self.object:set_properties(prop)
|
||||
end,
|
||||
|
||||
get_staticdata = function(self)
|
||||
return self.node.name
|
||||
end,
|
||||
|
||||
on_activate = function(self, staticdata)
|
||||
self.object:set_armor_groups({immortal=1})
|
||||
if staticdata then
|
||||
self:set_node({name=staticdata})
|
||||
end
|
||||
minetest.after(0,function()
|
||||
|
||||
if self.parent ~= nil and self.relative ~= nil then
|
||||
self.object:set_attach(self.parent, "", {x=self.relative.x,y=self.relative.y,z=self.relative.z}, {x=0,y=0,z=0})
|
||||
self.object:set_properties({visual_size = {x=falling_tree_capitator.bvav_settings.scaling*3, y=falling_tree_capitator.bvav_settings.scaling*3}})
|
||||
--self.object:set_properties({})
|
||||
else
|
||||
--this fixes issues with scaling
|
||||
self.object:set_properties({visual_size = {x=falling_tree_capitator.bvav_settings.scaling, y=falling_tree_capitator.bvav_settings.scaling}})
|
||||
|
||||
end
|
||||
end)
|
||||
end,
|
||||
rotation = vector.new(0,0,0),
|
||||
|
||||
on_step = function(self, dtime)
|
||||
|
||||
if self.rotator and self.rotate_dir then
|
||||
local current_rot = self.object:get_rotation()
|
||||
|
||||
-- Throw items on ground that made up parts of the tree:
|
||||
-- logs, leaves, sticks,saplings and fruit/attachments
|
||||
|
||||
if math.abs(current_rot.x) > math.pi/2 or math.abs(current_rot.z) > math.pi/2 then
|
||||
|
||||
-- Create a table of all items that may need throwing as result of the
|
||||
-- tree being cut down. This includes adding sticks(1/10 leaves) and saplings(1/20 leaves)
|
||||
-- note The below only throws 1/10 of the actual leaf nodes in the tree.
|
||||
|
||||
local tree_type = self.ttype
|
||||
local throw_ref_table = {["logs"] = self.logs,
|
||||
["leaf"] = falling_tree_capitator.tree_config[self.node.name][tree_type].lv,
|
||||
["fruit"] = falling_tree_capitator.tree_config[self.node.name][tree_type].ft}
|
||||
local throw_parts = {}
|
||||
local throw_parts2={}
|
||||
local leaf_total = 0
|
||||
|
||||
|
||||
for k,obj_tab in pairs(throw_ref_table) do
|
||||
|
||||
if type(obj_tab) == "table" then
|
||||
for k2,name in pairs(obj_tab) do
|
||||
|
||||
if k == "leaf" then
|
||||
leaf_total = leaf_total + self[name]
|
||||
throw_parts[name]=self[name]/10
|
||||
|
||||
else
|
||||
throw_parts[name]=self[name]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
else
|
||||
throw_parts[self.node.name]=obj_tab
|
||||
end
|
||||
end
|
||||
|
||||
throw_parts[falling_tree_capitator.tree_config[self.node.name][tree_type].sp] = leaf_total/20
|
||||
throw_parts["default:stick"] = leaf_total/10
|
||||
|
||||
-- Loop through the above table and use throw_item to distribute the items.
|
||||
for node_name,node_num in pairs(throw_parts) do
|
||||
-- "if" misses fruit if the name is set to "0"
|
||||
if node_name ~= 0 then
|
||||
for i = 1,node_num do
|
||||
local pos = self.object:get_pos()
|
||||
minetest.throw_item(pos,{name=node_name},self.rotate_dir,falling_tree_capitator.tree_config[self.node.name][tree_type].th)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.sound_play("tree_thud",{pos=self.object:get_pos()})
|
||||
self.object:remove()
|
||||
end
|
||||
|
||||
if self.rotate_dir.x ~= 0 then
|
||||
current_rot.x = current_rot.x + (dtime/(self.rotate_dir.x*2.82))
|
||||
elseif self.rotate_dir.z ~= 0 then
|
||||
current_rot.z = current_rot.z + (dtime/(self.rotate_dir.z*2.82))
|
||||
end
|
||||
self.object:set_rotation(current_rot)
|
||||
else
|
||||
if not self.parent or not self.parent:get_luaentity() then
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
@ -12,157 +12,178 @@
|
||||
-- fn == fruit min below trunk height max
|
||||
-- sp == sapling name
|
||||
|
||||
tree_config["moretrees:beech_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:beech_trunk"] = {
|
||||
s = {
|
||||
["th"] = 8,
|
||||
["tt"] = "s",
|
||||
["lv"] = "moretrees:beech_leaves",
|
||||
["lv"] = {"moretrees:beech_leaves"},
|
||||
["lw"] = 4,
|
||||
["lh"] = 2,
|
||||
["bx"] = 1,
|
||||
["bn"] = 2,
|
||||
["bw"] = 2,
|
||||
["ft"] = 0,
|
||||
["ft"] = {},
|
||||
["fx"] = 0,
|
||||
["fn"] = 0,
|
||||
["sp"] = "moretrees:beech_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:apple_tree_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:apple_tree_trunk"] = {
|
||||
s = {
|
||||
["th"] = 8,
|
||||
["tt"] = "s",
|
||||
["lv"] = "moretrees:apple_tree_leaves",
|
||||
["lv"] = {"moretrees:apple_tree_leaves"},
|
||||
["lw"] = 9,
|
||||
["lh"] = 2,
|
||||
["bx"] = 1,
|
||||
["bn"] = 5,
|
||||
["bw"] = 7,
|
||||
["ft"] = "default:apple",
|
||||
["ft"] = {"default:apple"},
|
||||
["fx"] = 2,
|
||||
["fn"] = 6,
|
||||
["sp"] = "moretrees:apple_tree_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:oak_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:oak_trunk"] = {
|
||||
x = {
|
||||
["th"] = 22,
|
||||
["tt"] = "x",
|
||||
["lv"] = "moretrees:oak_leaves",
|
||||
["lv"] = {"moretrees:oak_leaves"},
|
||||
["lw"] = 11,
|
||||
["lh"] = 4,
|
||||
["bx"] = 2,
|
||||
["bn"] = 16,
|
||||
["bw"] = 10,
|
||||
["ft"] = "moretrees:acorn",
|
||||
["ft"] = {"moretrees:acorn"},
|
||||
["fx"] = 1,
|
||||
["fn"] = 18,
|
||||
["sp"] = "moretrees:oak_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:poplar_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:poplar_trunk"] = {
|
||||
s = {
|
||||
["th"] = 24,
|
||||
["tt"] = "s",
|
||||
["lv"] = "moretrees:poplar_leaves",
|
||||
["lv"] = {"moretrees:poplar_leaves"},
|
||||
["lw"] = 4,
|
||||
["lh"] = 4,
|
||||
["bx"] = 0,
|
||||
["bn"] = 0,
|
||||
["bw"] = 0,
|
||||
["ft"] = 0,
|
||||
["ft"] = {},
|
||||
["fx"] = 0,
|
||||
["fn"] = 0,
|
||||
["sp"] = "moretrees:poplar_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:sequoia_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:sequoia_trunk"] = {
|
||||
x = {
|
||||
["th"] = 40,
|
||||
["tt"] = "x",
|
||||
["lv"] = "moretrees:sequoia_leaves",
|
||||
["lv"] = {"moretrees:sequoia_leaves"},
|
||||
["lw"] = 9,
|
||||
["lh"] = 4,
|
||||
["bx"] = 4,
|
||||
["bn"] = 30,
|
||||
["bw"] = 8,
|
||||
["ft"] = 0,
|
||||
["ft"] = {},
|
||||
["fx"] = 0,
|
||||
["fn"] = 0,
|
||||
["sp"] = "moretrees:sequoia_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:birch_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:birch_trunk"] = {
|
||||
s = {
|
||||
["th"] = 19,
|
||||
["tt"] = "s",
|
||||
["lv"] = "moretrees:birch_leaves",
|
||||
["lv"] = {"moretrees:birch_leaves"},
|
||||
["lw"] = 7,
|
||||
["lh"] = 5,
|
||||
["bx"] = 4,
|
||||
["bn"] = 12,
|
||||
["bw"] = 5,
|
||||
["ft"] = 0,
|
||||
["ft"] = {},
|
||||
["fx"] = 0,
|
||||
["fn"] = 0,
|
||||
["sp"] = "moretrees:birch_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:spruce_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:spruce_trunk"] = {
|
||||
x = {
|
||||
["th"] = 32,
|
||||
["tt"] = "x",
|
||||
["lv"] = "moretrees:spruce_leaves",
|
||||
["lv"] = {"moretrees:spruce_leaves"},
|
||||
["lw"] = 9,
|
||||
["lh"] = 2,
|
||||
["bx"] = 1,
|
||||
["bn"] = 27,
|
||||
["bw"] = 6,
|
||||
["ft"] = "moretrees:spruce_cone",
|
||||
["ft"] = {"moretrees:spruce_cone"},
|
||||
["fx"] = 1,
|
||||
["fn"] = 28,
|
||||
["sp"] = "moretrees:spruce_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:cedar_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:cedar_trunk"] = {
|
||||
s = {
|
||||
["th"] = 22,
|
||||
["tt"] = "s",
|
||||
["lv"] = "moretrees:cedar_leaves",
|
||||
["lv"] = {"moretrees:cedar_leaves"},
|
||||
["lw"] = 9,
|
||||
["lh"] = 4,
|
||||
["bx"] = 3,
|
||||
["bn"] = 17,
|
||||
["bw"] = 7,
|
||||
["ft"] = "moretrees:cedar_cone",
|
||||
["ft"] = {"moretrees:cedar_cone"},
|
||||
["fx"] = 1,
|
||||
["fn"] = 18,
|
||||
["sp"] = "moretrees:cedar_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:willow_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:willow_trunk"] = {
|
||||
x = {
|
||||
["th"] = 15,
|
||||
["tt"] = "x",
|
||||
["lv"] = "moretrees:willow_leaves",
|
||||
["lv"] = {"moretrees:willow_leaves"},
|
||||
["lw"] = 12,
|
||||
["lh"] = 4,
|
||||
["bx"] = 3,
|
||||
["bn"] = 13,
|
||||
["bw"] = 11,
|
||||
["ft"] = 0,
|
||||
["ft"] = {},
|
||||
["fx"] = 0,
|
||||
["fn"] = 0,
|
||||
["sp"] = "moretrees:willow_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:rubber_tree_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:rubber_tree_trunk"] = {
|
||||
d = {
|
||||
["th"] = 10,
|
||||
["tt"] = "d",
|
||||
["lv"] = "moretrees:rubber_tree_leaves",
|
||||
["lv"] = {"moretrees:rubber_tree_leaves"},
|
||||
["lw"] = 8,
|
||||
["lh"] = 7,
|
||||
["bx"] = 6,
|
||||
["bn"] = 6,
|
||||
["bw"] = 6,
|
||||
["ft"] = 0,
|
||||
["ft"] = {},
|
||||
["fx"] = 0,
|
||||
["fn"] = 0,
|
||||
["sp"] = "moretrees:rubber_tree_sapling"
|
||||
}
|
||||
}
|
||||
|
||||
tree_config["moretrees:jungletree_trunk"] = {
|
||||
falling_tree_capitator.tree_config["moretrees:jungletree_trunk"] = {
|
||||
s = {
|
||||
["th"] = 11,
|
||||
["tt"] = "a",
|
||||
["lv"] = {"default:jungleleaves","moretrees:jungletree_leaves_red","moretrees:jungletree_leaves_yellow"},
|
||||
@ -171,13 +192,12 @@ tree_config["moretrees:jungletree_trunk"] = {
|
||||
["bx"] = 0,
|
||||
["bn"] = 5,
|
||||
["bw"] = 3,
|
||||
["ft"] = "vines:vine",
|
||||
["ft"] = {"vines:vine"},
|
||||
["fx"] = 2,
|
||||
["fn"] = 11,
|
||||
["sp"] = "moretrees:jungletree_sapling"
|
||||
}
|
||||
|
||||
tree_config["moretrees:jungletree_trunk_d"] = {
|
||||
},
|
||||
d = {
|
||||
["th"] = 34,
|
||||
["tt"] = "d",
|
||||
["lv"] = {"default:jungleleaves","moretrees:jungletree_leaves_red","moretrees:jungletree_leaves_yellow"},
|
||||
@ -186,13 +206,12 @@ tree_config["moretrees:jungletree_trunk_d"] = {
|
||||
["bx"] = 1,
|
||||
["bn"] = 26,
|
||||
["bw"] = 6,
|
||||
["ft"] = "vines:vine",
|
||||
["ft"] = {"vines:vine"},
|
||||
["fx"] = 2,
|
||||
["fn"] = 34,
|
||||
["sp"] = "moretrees:jungletree_sapling"
|
||||
}
|
||||
|
||||
tree_config["moretrees:jungletree_trunk_x"] = {
|
||||
},
|
||||
x = {
|
||||
["th"] = 24,
|
||||
["tt"] = "x",
|
||||
["lv"] = {"default:jungleleaves","moretrees:jungletree_leaves_red","moretrees:jungletree_leaves_yellow"},
|
||||
@ -201,13 +220,12 @@ tree_config["moretrees:jungletree_trunk_x"] = {
|
||||
["bx"] = 1,
|
||||
["bn"] = 12,
|
||||
["bw"] = 6,
|
||||
["ft"] = "vines:vine",
|
||||
["ft"] = {"vines:vine"},
|
||||
["fx"] = 2,
|
||||
["fn"] = 24,
|
||||
["sp"] = "moretrees:jungletree_sapling"
|
||||
}
|
||||
|
||||
tree_config["moretrees:jungletree_trunk_t"] = {
|
||||
},
|
||||
t = {
|
||||
["th"] = 34,
|
||||
["tt"] = "t",
|
||||
["lv"] = {"default:jungleleaves","moretrees:jungletree_leaves_red","moretrees:jungletree_leaves_yellow"},
|
||||
@ -216,12 +234,9 @@ tree_config["moretrees:jungletree_trunk_t"] = {
|
||||
["bx"] = 1,
|
||||
["bn"] = 26,
|
||||
["bw"] = 6,
|
||||
["ft"] = "vines:vine",
|
||||
["ft"] = {"vines:vine"},
|
||||
["fx"] = 2,
|
||||
["fn"] = 34,
|
||||
["sp"] = "moretrees:jungletree_sapling"
|
||||
}
|
||||
--tree_config = {
|
||||
-- ["moretrees:palm_trunk"] = {["h"] = 11,["t"] = "a",["w"] = 10,["bx"] = 6,["bn"] = 0, ["bw"] = 4, ["lv"] = "moretrees:palm_leaves" ,["ft"] = 0 ,["ftx"] = 0, ["ftn"] = 0},
|
||||
-- ["moretrees:fir_trunk"] = {["h"] = 15,["t"] = "s",["w"] = 12,["bx"] = 3,["bn"] = 14,["bw"] = 11,["lv"] = "moretrees:willow_leaves" ,["ft"] = "moretrees:fir_cone" ,["ftx"] = 0, ["ftn"] = 0}
|
||||
-- }"moretrees:rubber_tree_trunk""moretrees:fir_trunk"
|
||||
}
|
213
init.lua
213
init.lua
@ -20,25 +20,24 @@ local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
local S = minetest.get_translator(modname)
|
||||
|
||||
falling_tree_capitator = {}
|
||||
falling_tree_capitator.tree_config = {}
|
||||
falling_tree_capitator.bvav_settings = {}
|
||||
falling_tree_capitator.bvav_settings.attach_scaling = 30
|
||||
falling_tree_capitator.bvav_settings.scaling = 0.667
|
||||
-----------------------------------------------------
|
||||
-- Tree Config --
|
||||
-----------------------------------------------------
|
||||
tree_config = {}
|
||||
--dofile(modpath .. "/i_tree_config_default.lua")
|
||||
--dofile(modpath .. "/i_tree_config_moretrees.lua")
|
||||
dofile(modpath .. "/i_register_tree_element_entity.lua")
|
||||
dofile(modpath .. "/i_register_schematic_trees.lua")
|
||||
dofile(modpath .. "/i_tree_config_moretrees.lua")
|
||||
|
||||
--minetest.debug("db: "..dump(tree_config))
|
||||
|
||||
-----------------------------------------------------
|
||||
bvav_settings = {}
|
||||
bvav_settings.attach_scaling = 30
|
||||
bvav_settings.scaling = 0.667
|
||||
--minetest.debug("db: "..dump(falling_tree_capitator.tree_config))
|
||||
|
||||
-----------------------------------------------------
|
||||
-- Tree override on_dig --
|
||||
-----------------------------------------------------
|
||||
for tree_name,def in pairs(tree_config) do
|
||||
for tree_name,def in pairs(falling_tree_capitator.tree_config) do
|
||||
if minetest.registered_nodes[tree_name] then
|
||||
minetest.override_item(tree_name,
|
||||
{
|
||||
@ -82,130 +81,6 @@ function minetest.throw_item(pos, item, dir, height)
|
||||
return obj
|
||||
end
|
||||
|
||||
----------------------------------------------------
|
||||
-- Tree Entity Setup --
|
||||
----------------------------------------------------
|
||||
minetest.register_entity("falling_tree_capitator:tree_element", {
|
||||
initial_properties = {
|
||||
physical = true,
|
||||
collide_with_objects = false,
|
||||
pointable = false,
|
||||
collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
|
||||
visual = "wielditem",
|
||||
textures = {},
|
||||
automatic_face_movement_dir = 0.0,
|
||||
visual_size = {x=bvav_settings.scaling, y=bvav_settings.scaling}
|
||||
},
|
||||
|
||||
node = {},
|
||||
|
||||
set_node = function(self, node)
|
||||
self.node = node
|
||||
local prop = {
|
||||
is_visible = true,
|
||||
textures = {node.name},
|
||||
visual_size = {x=bvav_settings.scaling, y=bvav_settings.scaling}
|
||||
}
|
||||
self.object:set_properties(prop)
|
||||
end,
|
||||
|
||||
get_staticdata = function(self)
|
||||
return self.node.name
|
||||
end,
|
||||
|
||||
on_activate = function(self, staticdata)
|
||||
self.object:set_armor_groups({immortal=1})
|
||||
if staticdata then
|
||||
self:set_node({name=staticdata})
|
||||
end
|
||||
minetest.after(0,function()
|
||||
|
||||
if self.parent ~= nil and self.relative ~= nil then
|
||||
self.object:set_attach(self.parent, "", {x=self.relative.x,y=self.relative.y,z=self.relative.z}, {x=0,y=0,z=0})
|
||||
self.object:set_properties({visual_size = {x=bvav_settings.scaling*3, y=bvav_settings.scaling*3}})
|
||||
--self.object:set_properties({})
|
||||
else
|
||||
--this fixes issues with scaling
|
||||
self.object:set_properties({visual_size = {x=bvav_settings.scaling, y=bvav_settings.scaling}})
|
||||
|
||||
end
|
||||
end)
|
||||
end,
|
||||
rotation = vector.new(0,0,0),
|
||||
on_step = function(self, dtime)
|
||||
|
||||
if self.rotator and self.rotate_dir then
|
||||
local current_rot = self.object:get_rotation()
|
||||
|
||||
-- Throw items on ground that made up parts of the tree:
|
||||
-- logs, leaves, sticks,saplings and fruit/attachments
|
||||
|
||||
if math.abs(current_rot.x) > math.pi/2 or math.abs(current_rot.z) > math.pi/2 then
|
||||
|
||||
-- Create a table of all items that may need throwing as result of the
|
||||
-- tree being cut down. This includes adding sticks(1/10 leaves) and saplings(1/20 leaves)
|
||||
-- note The below only throws 1/10 of the actual leaf nodes in the tree.
|
||||
|
||||
local tree_type = self.ttype
|
||||
local throw_ref_table = {["logs"] = self.logs,
|
||||
["leaf"] = tree_config[self.node.name][tree_type].lv,
|
||||
["fruit"] = tree_config[self.node.name][tree_type].ft}
|
||||
local throw_parts = {}
|
||||
local throw_parts2={}
|
||||
local leaf_total = 0
|
||||
|
||||
|
||||
for k,obj_tab in pairs(throw_ref_table) do
|
||||
|
||||
if type(obj_tab) == "table" then
|
||||
for k2,name in pairs(obj_tab) do
|
||||
|
||||
if k == "leaf" then
|
||||
leaf_total = leaf_total + self[name]
|
||||
throw_parts[name]=self[name]/10
|
||||
|
||||
else
|
||||
throw_parts[name]=self[name]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
else
|
||||
throw_parts[self.node.name]=obj_tab
|
||||
end
|
||||
end
|
||||
|
||||
throw_parts[tree_config[self.node.name][tree_type].sp] = leaf_total/20
|
||||
throw_parts["default:stick"] = leaf_total/10
|
||||
|
||||
-- Loop through the above table and use throw_item to distribute the items.
|
||||
for node_name,node_num in pairs(throw_parts) do
|
||||
-- "if" misses fruit if the name is set to "0"
|
||||
if node_name ~= 0 then
|
||||
for i = 1,node_num do
|
||||
local pos = self.object:get_pos()
|
||||
minetest.throw_item(pos,{name=node_name},self.rotate_dir,tree_config[self.node.name][tree_type].th)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.sound_play("tree_thud",{pos=self.object:get_pos()})
|
||||
self.object:remove()
|
||||
end
|
||||
|
||||
if self.rotate_dir.x ~= 0 then
|
||||
current_rot.x = current_rot.x + (dtime/(self.rotate_dir.x*2.82))
|
||||
elseif self.rotate_dir.z ~= 0 then
|
||||
current_rot.z = current_rot.z + (dtime/(self.rotate_dir.z*2.82))
|
||||
end
|
||||
self.object:set_rotation(current_rot)
|
||||
else
|
||||
if not self.parent or not self.parent:get_luaentity() then
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
function spawn_bvav_element(p, node)
|
||||
@ -346,7 +221,7 @@ it simplifies checks later on.
|
||||
end
|
||||
|
||||
-- Check from largest trunk size to smallest trunk size
|
||||
if tree_config[tree_name]["t"] then
|
||||
if falling_tree_capitator.tree_config[tree_name]["t"] then
|
||||
for k,v in pairs(trp_trk) do
|
||||
if type(cross_arr[v[1]]) =="table" and
|
||||
type(cross_arr[v[2]]) =="table" and
|
||||
@ -364,7 +239,7 @@ it simplifies checks later on.
|
||||
end
|
||||
end
|
||||
|
||||
if type(trunk_pieces) ~= "table" and tree_config[tree_name]["x"] then
|
||||
if type(trunk_pieces) ~= "table" and falling_tree_capitator.tree_config[tree_name]["x"] then
|
||||
for k,v in pairs(crs_trk) do
|
||||
if type(cross_arr[v[1]]) =="table" and
|
||||
type(cross_arr[v[2]]) =="table" and
|
||||
@ -377,7 +252,7 @@ it simplifies checks later on.
|
||||
end
|
||||
end
|
||||
|
||||
if type(trunk_pieces) ~= "table" and tree_config[tree_name]["d"] then
|
||||
if type(trunk_pieces) ~= "table" and falling_tree_capitator.tree_config[tree_name]["d"] then
|
||||
for k,v in pairs(dbl_trk) do
|
||||
if type(cross_arr[v[1]]) =="table" and
|
||||
type(cross_arr[v[2]]) =="table" and
|
||||
@ -394,17 +269,17 @@ it simplifies checks later on.
|
||||
|
||||
local tree = tree_name
|
||||
|
||||
tree_h = tree_config[tree][trunk_pieces.type].th
|
||||
tree_t = tree_config[tree][trunk_pieces.type].tt
|
||||
leaf_n = tree_config[tree][trunk_pieces.type].lv
|
||||
leaf_w = tree_config[tree][trunk_pieces.type].lw
|
||||
leaf_h = tree_config[tree][trunk_pieces.type].lh
|
||||
brch_h = tree_config[tree][trunk_pieces.type].bx
|
||||
brch_l = tree_config[tree][trunk_pieces.type].bn
|
||||
brch_w = tree_config[tree][trunk_pieces.type].bw
|
||||
frut_n = tree_config[tree][trunk_pieces.type].ft
|
||||
frut_h = tree_config[tree][trunk_pieces.type].fx
|
||||
frut_l = tree_config[tree][trunk_pieces.type].fn
|
||||
tree_h = falling_tree_capitator.tree_config[tree][trunk_pieces.type].th
|
||||
tree_t = falling_tree_capitator.tree_config[tree][trunk_pieces.type].tt
|
||||
leaf_n = falling_tree_capitator.tree_config[tree][trunk_pieces.type].lv
|
||||
leaf_w = falling_tree_capitator.tree_config[tree][trunk_pieces.type].lw
|
||||
leaf_h = falling_tree_capitator.tree_config[tree][trunk_pieces.type].lh
|
||||
brch_h = falling_tree_capitator.tree_config[tree][trunk_pieces.type].bx
|
||||
brch_l = falling_tree_capitator.tree_config[tree][trunk_pieces.type].bn
|
||||
brch_w = falling_tree_capitator.tree_config[tree][trunk_pieces.type].bw
|
||||
frut_n = falling_tree_capitator.tree_config[tree][trunk_pieces.type].ft
|
||||
frut_h = falling_tree_capitator.tree_config[tree][trunk_pieces.type].fx
|
||||
frut_l = falling_tree_capitator.tree_config[tree][trunk_pieces.type].fn
|
||||
|
||||
-- write related node positions to all nodes meta plus tree trunk type,
|
||||
-- skip ["type"] field using ipairs as not a position
|
||||
@ -422,17 +297,17 @@ it simplifies checks later on.
|
||||
local rel_pos2 = minetest.deserialize(temp_p_t)
|
||||
local tree = tree_name
|
||||
|
||||
tree_h = tree_config[tree][rel_pos2.type].th
|
||||
tree_t = tree_config[tree][rel_pos2.type].tt
|
||||
leaf_n = tree_config[tree][rel_pos2.type].lv
|
||||
leaf_w = tree_config[tree][rel_pos2.type].lw
|
||||
leaf_h = tree_config[tree][rel_pos2.type].lh
|
||||
brch_h = tree_config[tree][rel_pos2.type].bx
|
||||
brch_l = tree_config[tree][rel_pos2.type].bn
|
||||
brch_w = tree_config[tree][rel_pos2.type].bw
|
||||
frut_n = tree_config[tree][rel_pos2.type].ft
|
||||
frut_h = tree_config[tree][rel_pos2.type].fx
|
||||
frut_l = tree_config[tree][rel_pos2.type].fn
|
||||
tree_h = falling_tree_capitator.tree_config[tree][rel_pos2.type].th
|
||||
tree_t = falling_tree_capitator.tree_config[tree][rel_pos2.type].tt
|
||||
leaf_n = falling_tree_capitator.tree_config[tree][rel_pos2.type].lv
|
||||
leaf_w = falling_tree_capitator.tree_config[tree][rel_pos2.type].lw
|
||||
leaf_h = falling_tree_capitator.tree_config[tree][rel_pos2.type].lh
|
||||
brch_h = falling_tree_capitator.tree_config[tree][rel_pos2.type].bx
|
||||
brch_l = falling_tree_capitator.tree_config[tree][rel_pos2.type].bn
|
||||
brch_w = falling_tree_capitator.tree_config[tree][rel_pos2.type].bw
|
||||
frut_n = falling_tree_capitator.tree_config[tree][rel_pos2.type].ft
|
||||
frut_h = falling_tree_capitator.tree_config[tree][rel_pos2.type].fx
|
||||
frut_l = falling_tree_capitator.tree_config[tree][rel_pos2.type].fn
|
||||
end
|
||||
|
||||
-- name
|
||||
@ -614,11 +489,11 @@ it simplifies checks later on.
|
||||
else
|
||||
local child = spawn_bvav_element(npos_t, {name=tree_name})
|
||||
child:get_luaentity().parent = parent
|
||||
child:get_luaentity().relative = {x=(npos_t.x - t_cent.x )* bvav_settings.attach_scaling,
|
||||
y=y * bvav_settings.attach_scaling,
|
||||
z=(npos_t.z-t_cent.z)* bvav_settings.attach_scaling}
|
||||
child:get_luaentity().relative = {x=(npos_t.x - t_cent.x )* falling_tree_capitator.bvav_settings.attach_scaling,
|
||||
y=y * falling_tree_capitator.bvav_settings.attach_scaling,
|
||||
z=(npos_t.z-t_cent.z)* falling_tree_capitator.bvav_settings.attach_scaling}
|
||||
child:set_attach(parent, "", {x=0,y=0,z=0}, {x=0,y=0,z=0})
|
||||
child:set_properties({visual_size = {x=bvav_settings.scaling, y=bvav_settings.scaling}})
|
||||
child:set_properties({visual_size = {x=falling_tree_capitator.bvav_settings.scaling, y=falling_tree_capitator.bvav_settings.scaling}})
|
||||
parent:get_luaentity().logs = parent:get_luaentity().logs + 1
|
||||
end
|
||||
end
|
||||
@ -649,9 +524,9 @@ it simplifies checks later on.
|
||||
local z = l_pos.z - tp_pos.z
|
||||
local child = spawn_bvav_element(l_pos, {name=v2})
|
||||
child:get_luaentity().parent = parent
|
||||
child:get_luaentity().relative = {x=x * bvav_settings.attach_scaling,y=y * bvav_settings.attach_scaling,z=z * bvav_settings.attach_scaling}
|
||||
child:set_attach(parent, "", {x=x * bvav_settings.attach_scaling,y=y * bvav_settings.attach_scaling,z=z * bvav_settings.attach_scaling}, {x=0,y=0,z=0})
|
||||
child:set_properties({visual_size = {x=bvav_settings.scaling, y=bvav_settings.scaling}})
|
||||
child:get_luaentity().relative = {x=x * falling_tree_capitator.bvav_settings.attach_scaling,y=y * falling_tree_capitator.bvav_settings.attach_scaling,z=z * falling_tree_capitator.bvav_settings.attach_scaling}
|
||||
child:set_attach(parent, "", {x=x * falling_tree_capitator.bvav_settings.attach_scaling,y=y * falling_tree_capitator.bvav_settings.attach_scaling,z=z * falling_tree_capitator.bvav_settings.attach_scaling}, {x=0,y=0,z=0})
|
||||
child:set_properties({visual_size = {x=falling_tree_capitator.bvav_settings.scaling, y=falling_tree_capitator.bvav_settings.scaling}})
|
||||
parent:get_luaentity()[v2] = parent:get_luaentity()[v2] + 1
|
||||
end
|
||||
end
|
||||
@ -666,9 +541,9 @@ it simplifies checks later on.
|
||||
local z = l_pos.z - tp_pos.z
|
||||
local child = spawn_bvav_element(l_pos, {name=v[1]})
|
||||
child:get_luaentity().parent = parent
|
||||
child:get_luaentity().relative = {x=x * bvav_settings.attach_scaling,y=y * bvav_settings.attach_scaling,z=z * bvav_settings.attach_scaling}
|
||||
child:set_attach(parent, "", {x=x * bvav_settings.attach_scaling,y=y * bvav_settings.attach_scaling,z=z * bvav_settings.attach_scaling}, {x=0,y=0,z=0})
|
||||
child:set_properties({visual_size = {x=bvav_settings.scaling, y=bvav_settings.scaling}})
|
||||
child:get_luaentity().relative = {x=x * falling_tree_capitator.bvav_settings.attach_scaling,y=y * falling_tree_capitator.bvav_settings.attach_scaling,z=z * falling_tree_capitator.bvav_settings.attach_scaling}
|
||||
child:set_attach(parent, "", {x=x * falling_tree_capitator.bvav_settings.attach_scaling,y=y * falling_tree_capitator.bvav_settings.attach_scaling,z=z * falling_tree_capitator.bvav_settings.attach_scaling}, {x=0,y=0,z=0})
|
||||
child:set_properties({visual_size = {x=falling_tree_capitator.bvav_settings.scaling, y=falling_tree_capitator.bvav_settings.scaling}})
|
||||
parent:get_luaentity()[k] = parent:get_luaentity()[k] + 1
|
||||
end
|
||||
end
|
||||
|
2
mod.conf
2
mod.conf
@ -1,4 +1,4 @@
|
||||
name = falling_tree_capitator
|
||||
depends = default
|
||||
optional_depends = willow,baldcypress,bamboo,birch,cherrytree,chestnuttree,clementinetree,ebony,hollytree,jacaranda,larch,lemontree,mahogany,maple,oak,palm,pineapple,plumtree,pomegranate,willow
|
||||
optional_depends = lib_materials,moretrees,willow,baldcypress,bamboo,birch,cherrytree,chestnuttree,clementinetree,ebony,hollytree,jacaranda,larch,lemontree,mahogany,maple,oak,palm,pineapple,plumtree,pomegranate
|
||||
description = Trees fall when cut down with an axe or tool
|
||||
|
Loading…
x
Reference in New Issue
Block a user