diff options
author | TenPlus1 <kinsellaja@yahoo.com> | 2016-11-22 11:12:11 +0000 |
---|---|---|
committer | TenPlus1 <kinsellaja@yahoo.com> | 2016-11-22 11:12:11 +0000 |
commit | c0e02303670645e8b49160fdc73a1d31760be27f (patch) | |
tree | d1612cf3a78b94167a72df68fcbde0b219fef38f | |
parent | 1e10553838c8ebcb8534fd65b352219cd6ef99ab (diff) |
added protector placement tool (thanks shara)
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | init.lua | 1 | ||||
-rw-r--r-- | tool.lua | 115 |
3 files changed, 119 insertions, 0 deletions
@@ -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 @@ -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"}
+})
|