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