3 local dropper = {"main:leaves","main:stick","main:apple"}
6 local function leafdecay_after_destruct(pos, oldnode, def)
7 for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius),
8 vector.add(pos, def.radius), def.leaves)) do
9 local node = minetest.get_node(v)
10 local timer = minetest.get_node_timer(v)
11 if node.param2 ~= 1 and not timer:is_started() then
12 timer:start((math.random()+math.random())*math.random())
17 local function leafdecay_on_timer(pos, def)
18 if minetest.find_node_near(pos, def.radius, def.trunks) then
22 local node = minetest.get_node(pos)
23 local drops = minetest.get_node_drops(node.name)
24 for _, item in ipairs(drops) do
26 for _, v in pairs(def.leaves) do
31 if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or
34 x = pos.x - 0.5 + math.random(),
35 y = pos.y - 0.5 + math.random(),
36 z = pos.z - 0.5 + math.random(),
41 minetest.remove_node(pos)
42 minetest.check_for_falling(pos)
44 minetest.add_particlespawner({
47 minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5},
48 maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
49 minvel = vector.new(-0.5,0,-0.5),
50 maxvel = vector.new(0.5,0,0.5),
51 minacc = {x=0, y=-9.81, z=0},
52 maxacc = {x=0, y=-9.81, z=0},
57 collisiondetection = true,
59 texture = "treecapitator.png"
61 minetest.sound_play("leaves", {pos=pos, gain = 0.2, max_hear_distance = 60,pitch = math.random(70,100)/100})
63 if math.random() > 0.75 then
64 local obj = minetest.add_item(pos,dropper[math.random(1,3)])
65 obj:get_luaentity().collection_timer = 2
69 function treecaptitator.register_leafdecay(def)
73 for _, v in pairs(def.trunks) do
74 minetest.override_item(v, {
75 after_destruct = function(pos, oldnode)
76 leafdecay_after_destruct(pos, oldnode, def)
80 for _, v in pairs(def.leaves) do
81 minetest.override_item(v, {
82 on_timer = function(pos)
83 leafdecay_on_timer(pos, def)
89 ----------------------------- registration
90 treecaptitator.register_leafdecay({
91 trunks = {"main:tree"},
92 leaves = {"main:leaves"},