summaryrefslogtreecommitdiff
path: root/tool.lua
diff options
context:
space:
mode:
authorTenPlus1 <kinsellaja@yahoo.com>2016-11-22 11:12:11 +0000
committerTenPlus1 <kinsellaja@yahoo.com>2016-11-22 11:12:11 +0000
commitc0e02303670645e8b49160fdc73a1d31760be27f (patch)
treed1612cf3a78b94167a72df68fcbde0b219fef38f /tool.lua
parent1e10553838c8ebcb8534fd65b352219cd6ef99ab (diff)
added protector placement tool (thanks shara)
Diffstat (limited to 'tool.lua')
-rw-r--r--tool.lua115
1 files changed, 115 insertions, 0 deletions
diff --git a/tool.lua b/tool.lua
new file mode 100644
index 0000000..b7a7118
--- /dev/null
+++ b/tool.lua
@@ -0,0 +1,115 @@
+
+-- protector placement tool (thanks to Shara for code and idea)
+
+minetest.register_craftitem("protector:tool", {
+ description = "Protector Placer Tool (stand on protector, face direction and use)",
+ inventory_image = "protector_display.png",
+ stack_max = 1,
+
+ on_use = function(itemstack, user, pointed_thing)
+
+ local name = user:get_player_name()
+
+ -- check node player occupies
+ local pos = user:getpos()
+ local nod = minetest.get_node(pos).name
+ if nod ~= "protector:protect2" then
+ -- check node under player
+ pos.y = pos.y - 1
+ nod = minetest.get_node(pos).name
+ if nod ~= "protector:protect"
+ and nod ~= "protector:protect2" then
+ return
+ end
+ end
+
+ -- get direction player is facing
+ local dir = minetest.dir_to_facedir( user:get_look_dir() )
+ local vec = {x = 0, y = 0, z = 0}
+ local gap = (protector.radius * 2) + 1
+
+ -- set placement coords
+ if dir == 0 then
+ vec.z = gap -- north
+ elseif dir == 1 then
+ vec.x = gap -- east
+ elseif dir == 2 then
+ vec.z = -gap -- south
+ elseif dir == 3 then
+ vec.x = -gap -- west
+ end
+
+ -- new position
+ pos.x = pos.x + vec.x
+ pos.y = pos.y + vec.y
+ pos.z = pos.z + vec.z
+
+ -- does placing a protector overlap existing area
+ if not protector.can_dig(protector.radius * 2, pos,
+ user:get_player_name(), true, 3) then
+
+ minetest.chat_send_player(name,
+ "Overlaps into above players protected area")
+
+ return
+ end
+
+ -- does a protector already exist ?
+ if #minetest.find_nodes_in_area(
+ vector.subtract(pos, 1), vector.add(pos, 1),
+ {"protector:protect", "protector:protect2"}) > 0 then
+
+ minetest.chat_send_player(name, "Protector already in place!")
+ return
+ end
+
+ -- do we have protectors to use ?
+ local inv = user:get_inventory()
+
+ if not inv:contains_item("main", "protector:protect")
+ and not inv:contains_item("main", "protector:protect2") then
+ minetest.chat_send_player(name, "No protectors available to place!")
+ return
+ end
+
+ -- take protector
+ if inv:contains_item("main", "protector:protect") then
+ inv:remove_item("main", "protector:protect")
+ elseif inv:contains_item("main", "protector:protect2") then
+ inv:remove_item("main", "protector:protect2")
+ end
+
+ -- place protector
+ minetest.set_node(pos, {name = nod, param2 = 1})
+
+ -- set protector metadata
+ local meta = minetest.get_meta(pos)
+ meta:set_string("owner", name)
+ meta:set_string("infotext", "Protection (owned by " .. name .. ")")
+ meta:set_string("members", "")
+
+ end,
+})
+
+-- tool recipe
+minetest.register_craft({
+ output = "protector:tool",
+ recipe = {
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+ {"default:steel_ingot", "protector:protect", "default:steel_ingot"},
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+ }
+})
+
+-- recipes to switch between protectors
+minetest.register_craft({
+ type = "shapeless",
+ output = "protector:protect",
+ recipe = {"protector:protect2"}
+})
+
+minetest.register_craft({
+ type = "shapeless",
+ output = "protector:protect2",
+ recipe = {"protector:protect"}
+})