on_key_use = function(pos, player)
local secret = minetest.get_meta(pos):get_string("key_lock_secret")
local itemstack = player:get_wielded_item()
- local key_meta = minetest.parse_json(itemstack:get_metadata())
+ local key_meta = itemstack:get_meta()
- if secret ~= key_meta.secret then
+ if key_meta:get_string("secret") == "" then
+ key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret)
+ end
+
+ if secret ~= key_meta:get_string("secret") then
return
end
-- finish and return the new key
itemstack:take_item()
itemstack:add_item("default:key")
- itemstack:set_metadata(minetest.write_json({
- secret = secret
- }))
+ local meta = itemstack:get_meta()
+ meta:set_string("secret", secret)
+ meta:set_string("description", "Key to "..placer:get_player_name().."'s "
+ ..minetest.registered_nodes[node.name].description)
return itemstack
end
end
local item = clicker:get_wielded_item()
local owner = meta:get_string("doors_owner")
if item:get_name() == "default:key" then
- local key_meta = minetest.parse_json(item:get_metadata())
+ local key_meta = item:get_meta()
local secret = meta:get_string("key_lock_secret")
- if secret ~= key_meta.secret then
+
+ if key_meta:get_string("secret") == "" then
+ key_meta:set_string("secret", minetest.parse_json(item:get_metadata()).secret)
+ end
+
+ if secret ~= key_meta:get_string("secret") then
return false
end
local meta = minetest.get_meta(pos)
local owner = meta:get_string("doors_owner")
if item:get_name() == "default:key" then
- local key_meta = minetest.parse_json(item:get_metadata())
+ local key_meta = item:get_meta()
local secret = meta:get_string("key_lock_secret")
- if secret ~= key_meta.secret then
+
+ if key_meta:get_string("secret") == "" then
+ key_meta:set_string("secret", minetest.parse_json(item:get_metadata()).secret)
+ end
+
+ if secret ~= key_meta:get_string("secret") then
return false
end