summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShadowNinja <noreply@gmail.com>2013-09-06 23:08:01 -0400
committerShadowNinja <noreply@gmail.com>2013-09-06 23:08:01 -0400
commite86c760c782d4c521ebcac031d9c3f1fd691880e (patch)
tree0dc1753bd2717c5a8592558e7a8de9b5949c2e8a
parentb1a4f878ef56b23d7e49051e361819b2f7e96e14 (diff)
Actually fix buildable_to nodes and update for protection support pull
-rw-r--r--interact.lua59
1 files changed, 34 insertions, 25 deletions
diff --git a/interact.lua b/interact.lua
index feba9e5..9720cc2 100644
--- a/interact.lua
+++ b/interact.lua
@@ -1,42 +1,51 @@
-- Gives a player a warning message about a area being protected
-local function printWarning(name, pos)
+local function printWarning(pos, name)
local owners = areas:getNodeOwners(pos)
minetest.chat_send_player(name, ("%s is protected by %s.")
:format(minetest.pos_to_string(pos), table.concat(owners, ", ")))
end
-if minetest.can_interact then
- old_can_interact = minetest.can_interact
- function minetest.can_interact(pos, name)
+if minetest.is_protected then
+ old_is_protected = minetest.is_protected
+ function minetest.is_protected(pos, name)
if not areas:canInteract(pos, name) then
- return false
+ return true
end
- return old_can_interact(pos, name)
+ return old_is_protected(pos, name)
end
-end
-local old_node_place = minetest.item_place_node
-function minetest.item_place_node(itemstack, placer, pointed_thing)
- local pos = pointed_thing.above
- local ndef = minetest.registered_nodes[pointed_thing.under]
- if ndef and ndef.buildable_to then
- pos = pointed_thing.under
- end
+ minetest.register_on_protection_violation(function(pos, name)
+ if not areas:canInteract(pos, name) then
+ printWarning(pos, name)
+ end
+ end)
+
+else
+ local old_node_place = minetest.item_place_node
+ function minetest.item_place_node(itemstack, placer, pointed_thing)
+ local pos = pointed_thing.above
+ local under_node = minetest.get_node(pointed_thing.under)
+ local under_def = minetest.registered_nodes[under_node.name]
- if not areas:canInteract(pos, placer:get_player_name()) then
- printWarning(placer:get_player_name(), pos)
- return itemstack -- Abort place.
+ if under_def and under_def.buildable_to then
+ pos = pointed_thing.under
+ end
+
+ if not areas:canInteract(pos, placer:get_player_name()) then
+ printWarning(pos, placer:get_player_name())
+ return itemstack -- Abort place.
+ end
+ return old_node_place(itemstack, placer, pointed_thing)
end
- return old_node_place(itemstack, placer, pointed_thing)
-end
-local old_node_dig = minetest.node_dig
-function minetest.node_dig(pos, node, digger)
- if not areas:canInteract(pos, digger:get_player_name()) then
- printWarning(digger:get_player_name(), pos)
- return -- Abort dig.
+ local old_node_dig = minetest.node_dig
+ function minetest.node_dig(pos, node, digger)
+ if not areas:canInteract(pos, digger:get_player_name()) then
+ printWarning(pos, digger:get_player_name())
+ return -- Abort dig.
+ end
+ return old_node_dig(pos, node, digger)
end
- return old_node_dig(pos, node, digger)
end