summaryrefslogtreecommitdiff
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
parent1e10553838c8ebcb8534fd65b352219cd6ef99ab (diff)
added protector placement tool (thanks shara)
-rw-r--r--README.md3
-rw-r--r--init.lua1
-rw-r--r--tool.lua115
3 files changed, 119 insertions, 0 deletions
diff --git a/README.md b/README.md
index 5fc0bd9..13c93dc 100644
--- a/README.md
+++ b/README.md
@@ -42,6 +42,9 @@ Change log:
1.9 - Renamed 'protector_pvp_spawn' setting to 'protector_spawn' which protects
an area around static spawnpoint and disables pvp if active.
(note: previous name can still be used)
+2.0 - Added protector placement tool (thanks to Shara) so that players can easily
+ stand on a protector, face in a direction and it places a new one at a set
+ distance to cover protection radius.
Lucky Blocks: 6
diff --git a/init.lua b/init.lua
index bc8e7ab..54d1e7d 100644
--- a/init.lua
+++ b/init.lua
@@ -644,6 +644,7 @@ local path = minetest.get_modpath("protector")
dofile(path .. "/doors_chest.lua")
dofile(path .. "/pvp.lua")
dofile(path .. "/admin.lua")
+dofile(path .. "/tool.lua")
dofile(path .. "/lucky_block.lua")
print (S("[MOD] Protector Redo loaded"))
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"}
+})