Keys: Update default.can_interact_with_node to new item meta
authorSmallJoker <mk939@ymail.com>
Sun, 12 Mar 2017 13:03:37 +0000 (14:03 +0100)
committerAuke Kok <sofar+github@foo-projects.org>
Sun, 12 Mar 2017 19:20:31 +0000 (12:20 -0700)
Completes a forgotten update in 9d3a526

mods/default/functions.lua
mods/default/nodes.lua
mods/doors/init.lua

index 9ba0e7821aae021b11307e1b5a1a3ae78552b911..eeac0c2a5c115f9a3241a0c42274401717db85be 100644 (file)
@@ -551,21 +551,23 @@ function default.can_interact_with_node(player, pos)
 
        local meta = minetest.get_meta(pos)
 
+       if player:get_player_name() == meta:get_string("owner") then
+               -- Owner can access the node to any time
+               return true
+       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
+               local key_meta = item:get_meta()
 
-               return true
-       end
+               if key_meta:get_string("secret") == "" then
+                       key_meta:set_string("secret", minetest.parse_json(item:get_metadata()).secret)
+                       item:set_metadata("")
+               end
 
-       if player:get_player_name() ~= meta:get_string("owner") then
-               return false
+               return meta:get_string("key_lock_secret") == key_meta:get_string("secret")
        end
 
-       return true
-end
\ No newline at end of file
+       return false
+end
index 1eb2f30524adc0e1c8456afdddc39d29e70aa9d7..0523097c1212b3ffe21c13fefc521b62e4ea69ee 100644 (file)
@@ -1805,6 +1805,7 @@ minetest.register_node("default:chest_locked", {
 
                if key_meta:get_string("secret") == "" then
                        key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret)
+                       itemstack:set_metadata("")
                end
 
                if secret ~= key_meta:get_string("secret") then
index 53e27938c50456a2f4cbdee22b92dbb00985e3bb..0ed98b3392596c4f4add5469d3b50106ff3f1db4 100644 (file)
@@ -149,6 +149,7 @@ function _doors.door_toggle(pos, node, clicker)
 
                        if key_meta:get_string("secret") == "" then
                                key_meta:set_string("secret", minetest.parse_json(item:get_metadata()).secret)
+                               item:set_metadata("")
                        end
 
                        if secret ~= key_meta:get_string("secret") then