summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--technic_chests/common.lua28
1 files changed, 26 insertions, 2 deletions
diff --git a/technic_chests/common.lua b/technic_chests/common.lua
index 47054f5..b8e30a4 100644
--- a/technic_chests/common.lua
+++ b/technic_chests/common.lua
@@ -65,7 +65,31 @@ function technic.chests.on_inv_take(pos, listname, index, stack, player)
..minetest.pos_to_string(pos))
end
-function has_locked_chest_privilege(meta, player)
- return player:get_player_name() == meta:get_string("owner")
+local function has_locked_chest_privilege(meta, player)
+ if player then
+ if minetest.check_player_privs(player, "protection_bypass") then
+ return true
+ end
+ else
+ return false
+ end
+
+ -- is player wielding the right key?
+ local item = player:get_wielded_item()
+ if item:get_name() == "default:key" then
+ local key_meta = minetest.parse_json(item:get_metadata())
+ local secret = meta:get_string("key_lock_secret")
+ if secret ~= key_meta.secret then
+ return false
+ end
+
+ return true
+ end
+
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+
+ return true
end