2 minetest,vector,pairs,math
4 minetest,vector,pairs,math
6 local treecaptitator = {}
9 local function leafdecay_after_destruct(pos, oldnode, def)
10 for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius),
11 vector.add(pos, def.radius), def.leaves)) do
12 local node = minetest.get_node(v)
13 local timer = minetest.get_node_timer(v)
14 if node.param2 ~= 1 and not timer:is_started() then
15 timer:start(math.random()+math.random()+math.random())
20 local function leafdecay_on_timer(pos, def)
21 if minetest.find_node_near(pos, def.radius, def.trunks) then
25 minetest.dig_node(pos)
28 minetest.add_particlespawner({
31 minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5},
32 maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
33 minvel = vector.new(-1,0,-1),
34 maxvel = vector.new(1,0,1),
35 minacc = {x=0, y=-9.81, z=0},
36 maxacc = {x=0, y=-9.81, z=0},
41 collisiondetection = true,
43 node = {name= def.leaves[1]},
45 minetest.sound_play("leaves", {pos=pos, gain = 0.2, max_hear_distance = 60,pitch = math.random(70,100)/100})
48 function treecaptitator.register_leafdecay(def)
52 for _, v in pairs(def.trunks) do
53 minetest.override_item(v, {
54 after_destruct = function(pos, oldnode)
55 leafdecay_after_destruct(pos, oldnode, def)
59 for _, v in pairs(def.leaves) do
60 minetest.override_item(v, {
61 on_timer = function(pos)
62 leafdecay_on_timer(pos, def)
68 ----------------------------- registration
69 treecaptitator.register_leafdecay({
70 trunks = {"main:tree"},
71 leaves = {"main:leaves"},