]> git.lizzy.rs Git - xdecor.git/blob - src/rope.lua
Global code style cleaning
[xdecor.git] / src / rope.lua
1 local rope = {}
2
3 -- Code by Mirko K. (modified by Temperest, Wulfsdad and kilbith) (License: GPL).
4 function rope.place(itemstack, placer, pointed_thing)
5         if pointed_thing.type == "node" then
6                 local pos = pointed_thing.above
7                 local oldnode = minetest.get_node(pos)
8                 local stackname = itemstack:get_name()
9
10                 if minetest.is_protected(pos, placer:get_player_name()) then
11                         return itemstack
12                 end
13
14                 while oldnode.name == "air" and not itemstack:is_empty() do
15                         local newnode = {name = stackname, param1 = 0}
16                         minetest.set_node(pos, newnode)
17                         itemstack:take_item()
18                         pos.y = pos.y - 1
19                         oldnode = minetest.get_node(pos)
20                 end
21         end
22
23         return itemstack
24 end
25
26 function rope.remove(pos, oldnode, digger, rope_name)
27         local num = 0
28         local below = {x = pos.x, y = pos.y, z = pos.z}
29         local digger_inv = digger:get_inventory()
30
31         while minetest.get_node(below).name == rope_name do
32                 minetest.remove_node(below)
33                 below.y = below.y - 1
34                 num = num + 1
35         end
36
37         if num == 0 then return end
38         digger_inv:add_item("main", rope_name.." "..num)
39
40         return true
41 end
42
43 xdecor.register("rope", {
44         description = "Rope",
45         drawtype = "plantlike",
46         walkable = false,
47         climbable = true,
48         groups = {snappy = 3, flammable = 3},
49         tiles = {"xdecor_rope.png"},
50         inventory_image = "xdecor_rope_inv.png",
51         wield_image = "xdecor_rope_inv.png",
52         selection_box = xdecor.pixelbox(8, {{3, 0, 3, 2, 8, 2}}),
53         on_place = rope.place,
54
55         on_punch = function(pos, node, puncher, pointed_thing)
56                 local player_name = puncher:get_player_name()
57
58                 if not minetest.is_protected(pos, player_name) or
59                         minetest.get_player_privs(player_name).protection_bypass then
60                         rope.remove(pos, node, puncher, "xdecor:rope")
61                 end
62         end
63 })
64
65 -- Recipes
66
67 minetest.register_craft({
68         output = "xdecor:rope",
69         recipe = {
70                 {"farming:string"},
71                 {"farming:string"},
72                 {"farming:string"}
73         }
74 })