]> git.lizzy.rs Git - Crafter.git/blob - mods/main/saplings.lua
436d68aa932df751dbe2fb76279b3520ad8dd8c7
[Crafter.git] / mods / main / saplings.lua
1 --saplings
2 --
3 --
4 --local sapling_min = 120
5 --local sapling_max = 720
6 --make sapling grow
7 local function sapling_grow(pos)
8         if minetest.get_node_light(pos, nil) < 10 then
9                 --print("failed to grow at "..dump(pos))
10                 return
11         end
12         --print("growing at "..dump(pos))
13         if minetest.get_node_group(minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name, "soil") > 0 then
14                 local good_to_grow = true
15                 --check if room to grow (leaves or air)
16                 for i = 1,4 do
17                         local node_name = minetest.get_node(vector.new(pos.x,pos.y+i,pos.z)).name
18                         if node_name ~= "air" and node_name ~= "main:leaves" then
19                                 good_to_grow = false
20                         end
21                 end
22                 if good_to_grow == true then
23                         minetest.set_node(pos,{name="main:tree"})
24                         local schemmy = math.random(1,2)
25                         if schemmy == 1 then
26                                 minetest.place_schematic(pos, tree_big,"0",nil,false,"place_center_x, place_center_z")
27                         elseif schemmy == 2 then
28                                 minetest.place_schematic(pos, tree_small,"0",nil,false,"place_center_x, place_center_z")
29                         end
30                         --override leaves
31                         local max = 3
32                         if schemmy == 2 then
33                                 max = 1
34                         end
35                         for i = 1,max do
36                                 minetest.set_node(vector.new(pos.x,pos.y+i,pos.z),{name="main:tree"})
37                         end
38                 end
39         end
40 end
41
42 minetest.register_node("main:sapling", {
43         description = "Sapling",
44         drawtype = "plantlike",
45         inventory_image = "sapling.png",
46         waving = 1,
47         walkable = false,
48         climbable = false,
49         paramtype = "light",
50         is_ground_content = false,      
51         tiles = {"sapling.png"},
52         groups = {leaves = 1, plant = 1, axe = 1, hand = 0,instant=1, sapling=1, attached_node=1,flammable=1},
53         sounds = main.dirtSound(),
54         drop = "main:sapling",
55         node_placement_prediction = "",
56         selection_box = {
57                 type = "fixed",
58                 fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
59         },
60         on_place =  function(itemstack, placer, pointed_thing)
61                 if not pointed_thing.type == "node" then
62                         return
63                 end
64                 
65                 local sneak = placer:get_player_control().sneak
66                 local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
67                 
68                 if not sneak and noddef.on_rightclick then
69                         minetest.item_place(itemstack, placer, pointed_thing)
70                         return
71                 end
72                 
73                 local buildable = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name].buildable_to
74                 --replace buildable
75                 if buildable and minetest.get_node_group(minetest.get_node(vector.new(pointed_thing.under.x,pointed_thing.under.y-1,pointed_thing.under.z)).name, "soil") > 0 then
76                         return(minetest.item_place(itemstack, placer, pointed_thing))
77                 end
78                 local buildable = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name].buildable_to
79                 if buildable and minetest.get_node_group(minetest.get_node(vector.new(pointed_thing.above.x,pointed_thing.above.y-1,pointed_thing.above.z)).name, "soil") > 0 then
80                         return(minetest.item_place(itemstack, placer, pointed_thing))
81                 end
82                 --place sapling
83                 local pos = pointed_thing.above
84                 if minetest.get_node_group(minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name, "soil") > 0 and minetest.get_node(pointed_thing.above).name == "air" then
85                         minetest.set_node(pointed_thing.above, {name="main:sapling"})
86                         minetest.sound_play("dirt",{pos=pointed_thing.above})
87                         itemstack:take_item(1)
88                         return(itemstack)
89                 end
90         end,
91 })
92
93
94 --growing abm for sapling
95 minetest.register_abm({
96         label = "Tree Grow",
97         nodenames = {"group:sapling"},
98         neighbors = {"group:soil"},
99         interval = 6,
100         chance = 250,
101         catch_up = true,
102         action = function(pos)
103                 sapling_grow(pos)
104         end,
105 })