]> git.lizzy.rs Git - xdecor.git/blob - rope.lua
Merge pull request #67 from Napiophelios/master
[xdecor.git] / 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                 if minetest.is_protected(pos, placer:get_player_name()) then
10                         return itemstack
11                 end
12
13                 while oldnode.name == "air" and not itemstack:is_empty() do
14                         local newnode = {name = stackname, param1 = 0}
15                         minetest.set_node(pos, newnode)
16                         itemstack:take_item()
17                         pos.y = pos.y - 1
18                         oldnode = minetest.get_node(pos)
19                 end
20         end
21         return itemstack
22 end
23
24 function rope.remove(pos, oldnode, digger, rope_name)
25         local num = 0
26         local below = {x=pos.x, y=pos.y, z=pos.z}
27         local digger_inv = digger:get_inventory()
28
29         while minetest.get_node(below).name == rope_name do
30                 minetest.remove_node(below)
31                 below.y = below.y - 1
32                 num = num + 1
33         end
34         if num == 0 then return end
35         digger_inv:add_item("main", rope_name.." "..num)
36         return true
37 end
38
39 xdecor.register("rope", {
40         description = "Rope",
41         drawtype = "plantlike",
42         walkable = false,
43         climbable = true,
44         groups = {snappy=3, flammable=3},
45         tiles = {"xdecor_rope.png"},
46         inventory_image = "xdecor_rope_inv.png",
47         wield_image = "xdecor_rope_inv.png",
48         selection_box = xdecor.pixelbox(8, {{3, 0, 3, 2, 8, 2}}),
49         on_place = rope.place,
50         on_punch = function(pos, node, puncher, pointed_thing)
51                 local player_name = puncher:get_player_name()
52                 if not minetest.is_protected(pos, player_name) or
53                         minetest.get_player_privs(player_name).protection_bypass then
54                         rope.remove(pos, node, puncher, "xdecor:rope")
55                 end
56         end
57 })