4 local function leafdecay_after_destruct(pos, oldnode, def)
5 for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius),
6 vector.add(pos, def.radius), def.leaves)) do
7 local node = minetest.get_node(v)
8 local timer = minetest.get_node_timer(v)
9 if node.param2 ~= 1 and not timer:is_started() then
10 timer:start(math.random())
15 local function leafdecay_on_timer(pos, def)
16 if minetest.find_node_near(pos, def.radius, def.trunks) then
20 local node = minetest.get_node(pos)
21 local drops = minetest.get_node_drops(node.name)
22 for _, item in ipairs(drops) do
24 for _, v in pairs(def.leaves) do
29 if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or
32 x = pos.x - 0.5 + math.random(),
33 y = pos.y - 0.5 + math.random(),
34 z = pos.z - 0.5 + math.random(),
39 minetest.remove_node(pos)
40 minetest.check_for_falling(pos)
42 minetest.add_particlespawner({
45 minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5},
46 maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
47 minvel = {x=0, y=0, z=0},
48 maxvel = {x=0, y=0, z=0},
49 minacc = {x=0, y=0, z=0},
50 maxacc = {x=0, y=0, z=0},
55 collisiondetection = false,
57 texture = "treecapitator.png"
61 function treecaptitator.register_leafdecay(def)
65 for _, v in pairs(def.trunks) do
66 minetest.override_item(v, {
67 after_destruct = function(pos, oldnode)
68 leafdecay_after_destruct(pos, oldnode, def)
72 for _, v in pairs(def.leaves) do
73 minetest.override_item(v, {
74 on_timer = function(pos)
75 leafdecay_on_timer(pos, def)
81 ----------------------------- registration
82 treecaptitator.register_leafdecay({
83 trunks = {"main:tree"},
84 leaves = {"main:leaves"},