Hybrid Dog 68662c91ef Some updates
Drop support for minetest versions without minetest.override_item
Disallow registering trees before registering their trunk nodes
Abort if nodes can't be overridden correctly

Code style fixes
2017-03-16 16:36:14 +01:00

49 lines
1.4 KiB
Lua

-- the table containing the tree definitions
treecapitator.trees = {}
-- test if trunk nodes were redefined
local after_dig_nodes = {}
minetest.after(2, function()
for i = 1,#after_dig_nodes do
local nodename = after_dig_nodes[i]
if not minetest.registered_nodes[nodename].after_dig_node then
error(nodename .. " didn't keep after_dig_node.")
end
end
after_dig_nodes = nil
end)
-- wrapping is necessary, someone may overwrite treecapitator.capitate_tree
local function after_dig_wrap(pos, _,_, digger)
treecapitator.capitate_tree(pos, digger)
end
-- For the usage of this function, see trees.lua.
function treecapitator.register_tree(tab)
for name,value in pairs(treecapitator.default_tree) do
if tab[name] == nil then
tab[name] = value --replaces not defined stuff
end
end
treecapitator.trees[#treecapitator.trees+1] = tab
for i = 1,#tab.trees do
local nodename = tab.trees[i]
local data = minetest.registered_nodes[nodename]
if not data then
error(nodename .. " has to be registered before calling " ..
"treecapitator.register_tree.")
end
local func = after_dig_wrap
local prev_after_dig = data.after_dig_node
if prev_after_dig then
func = function(pos, oldnode, oldmetadata, digger)
prev_after_dig(pos, oldnode, oldmetadata, digger)
treecapitator.capitate_tree(pos, digger)
end
end
minetest.override_item(nodename, {after_dig_node = func})
after_dig_nodes[#after_dig_nodes+1] = nodename
end
end