55 lines
1.5 KiB
Lua
55 lines
1.5 KiB
Lua
local rope = {}
|
|
|
|
-- Code by Mirko K. (modified by Temperest, Wulfsdad and kilbith) (License: GPL).
|
|
minetest.register_on_punchnode(function(pos, oldnode, digger)
|
|
if oldnode.name == "xdecor:rope" then
|
|
rope:remove(pos, oldnode, digger, "xdecor:rope")
|
|
end
|
|
end)
|
|
|
|
function rope.place(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.above
|
|
local oldnode = minetest.get_node(pos)
|
|
local stackname = itemstack:get_name()
|
|
if minetest.is_protected(pos, placer:get_player_name()) then return end
|
|
|
|
while oldnode.name == "air" and not itemstack:is_empty() do
|
|
local newnode = {name = stackname, param1 = 0}
|
|
minetest.set_node(pos, newnode)
|
|
itemstack:take_item()
|
|
pos.y = pos.y - 1
|
|
oldnode = minetest.get_node(pos)
|
|
end
|
|
end
|
|
return itemstack
|
|
end
|
|
|
|
function rope:remove(pos, oldnode, digger, rope_name)
|
|
local num = 0
|
|
local below = {x=pos.x, y=pos.y, z=pos.z}
|
|
local digger_inv = digger:get_inventory()
|
|
|
|
while minetest.get_node(below).name == rope_name do
|
|
minetest.remove_node(below)
|
|
below.y = below.y - 1
|
|
num = num + 1
|
|
end
|
|
if num == 0 then return end
|
|
digger_inv:add_item("main", rope_name.." "..num)
|
|
return true
|
|
end
|
|
|
|
xdecor.register("rope", {
|
|
description = "Rope",
|
|
drawtype = "plantlike",
|
|
walkable = false,
|
|
climbable = true,
|
|
groups = {snappy=3, flammable=3},
|
|
tiles = {"xdecor_rope.png"},
|
|
inventory_image = "xdecor_rope_inv.png",
|
|
wield_image = "xdecor_rope_inv.png",
|
|
selection_box = xdecor.pixelbox(8, {{3, 0, 3, 2, 8, 2}}),
|
|
on_place = rope.place
|
|
})
|