]> git.lizzy.rs Git - Crafter.git/blob - mods/treecapitator/init.lua
Add in experimental redstone queue
[Crafter.git] / mods / treecapitator / init.lua
1 local
2 minetest,vector,pairs,math
3 =
4 minetest,vector,pairs,math
5
6 local treecaptitator = {}
7
8 -- Leafdecay
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())
16                 end
17         end
18 end
19
20 local function leafdecay_on_timer(pos, def)
21         if minetest.find_node_near(pos, def.radius, def.trunks) then
22                 return false
23         end
24
25         minetest.dig_node(pos)
26         
27         
28         minetest.add_particlespawner({
29                 amount = 20,
30                 time = 0.0001,
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},
37                 minexptime = 0.5,
38                 maxexptime = 1.5,
39                 minsize = 0,
40                 maxsize = 0,
41                 collisiondetection = true,
42                 vertical = false,
43                 node = {name= def.leaves[1]},
44         })
45         minetest.sound_play("leaves", {pos=pos, gain = 0.2, max_hear_distance = 60,pitch = math.random(70,100)/100})
46 end
47
48 function treecaptitator.register_leafdecay(def)
49         assert(def.leaves)
50         assert(def.trunks)
51         assert(def.radius)
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)
56                         end,
57                 })
58         end
59         for _, v in pairs(def.leaves) do
60                 minetest.override_item(v, {
61                         on_timer = function(pos)
62                                 leafdecay_on_timer(pos, def)
63                         end,
64                 })
65         end
66 end
67
68 ----------------------------- registration
69 treecaptitator.register_leafdecay({
70         trunks = {"main:tree"},
71         leaves = {"main:leaves"},
72         radius = 2,
73 })