update wrench (#359)

This commit is contained in:
DS 2017-06-05 16:53:18 +02:00 committed by Vanessa Ezekowitz
parent 844e2fad47
commit 9167d4fc6f

View File

@ -39,9 +39,10 @@ local function restore(pos, placer, itemstack)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local data = minetest.deserialize(itemstack:get_metadata()) local data = itemstack:get_meta():get_string("data")
data = (data ~= "" and data) or itemstack:get_metadata()
data = minetest.deserialize(data)
minetest.set_node(pos, {name = data.name, param2 = node.param2}) minetest.set_node(pos, {name = data.name, param2 = node.param2})
local lists = data.lists
for name, value in pairs(data.metas) do for name, value in pairs(data.metas) do
local meta_type = get_meta_type(data.name, name) local meta_type = get_meta_type(data.name, name)
if meta_type == wrench.META_TYPE_INT then if meta_type == wrench.META_TYPE_INT then
@ -52,6 +53,7 @@ local function restore(pos, placer, itemstack)
meta:set_string(name, value) meta:set_string(name, value)
end end
end end
local lists = data.lists
for listname, list in pairs(lists) do for listname, list in pairs(lists) do
inv:set_list(listname, list) inv:set_list(listname, list)
end end
@ -96,8 +98,9 @@ minetest.register_tool("wrench:wrench", {
if not placer or not pos then if not placer or not pos then
return return
end end
if minetest.is_protected(pos, placer:get_player_name()) then local player_name = placer:get_player_name()
minetest.record_protection_violation(pos, placer:get_player_name()) if minetest.is_protected(pos, player_name) then
minetest.record_protection_violation(pos, player_name)
return return
end end
local name = minetest.get_node(pos).name local name = minetest.get_node(pos).name
@ -114,9 +117,9 @@ minetest.register_tool("wrench:wrench", {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if def.owned then if def.owned then
local owner = meta:get_string("owner") local owner = meta:get_string("owner")
if owner and owner ~= placer:get_player_name() then if owner and owner ~= player_name then
minetest.log("action", placer:get_player_name().. minetest.log("action", player_name..
" tried to pick up a owned node belonging to ".. " tried to pick up an owned node belonging to "..
owner.." at ".. owner.." at "..
minetest.pos_to_string(pos)) minetest.pos_to_string(pos))
return return
@ -130,9 +133,6 @@ minetest.register_tool("wrench:wrench", {
local inv = meta:get_inventory() local inv = meta:get_inventory()
local lists = {} local lists = {}
for _, listname in pairs(def.lists or {}) do for _, listname in pairs(def.lists or {}) do
if not inv:is_empty(listname) then
empty = false
end
local list = inv:get_list(listname) local list = inv:get_list(listname)
for i, stack in pairs(list) do for i, stack in pairs(list) do
list[i] = stack:to_string() list[i] = stack:to_string()
@ -140,20 +140,20 @@ minetest.register_tool("wrench:wrench", {
lists[listname] = list lists[listname] = list
end end
metadata.lists = lists metadata.lists = lists
local metas = {} local item_meta = stack:get_meta()
metadata.metas = {}
for name, meta_type in pairs(def.metas or {}) do for name, meta_type in pairs(def.metas or {}) do
if meta_type == wrench.META_TYPE_INT then if meta_type == wrench.META_TYPE_INT then
metas[name] = meta:get_int(name) metadata.metas[name] = meta:get_int(name)
elseif meta_type == wrench.META_TYPE_FLOAT then elseif meta_type == wrench.META_TYPE_FLOAT then
metas[name] = meta:get_float(name) metadata.metas[name] = meta:get_float(name)
elseif meta_type == wrench.META_TYPE_STRING then elseif meta_type == wrench.META_TYPE_STRING then
metas[name] = meta:get_string(name) metadata.metas[name] = meta:get_string(name)
end end
end end
metadata.metas = metas
item_meta:set_string("data", minetest.serialize(metadata))
stack:set_metadata(minetest.serialize(metadata))
minetest.remove_node(pos) minetest.remove_node(pos)
itemstack:add_wear(65535 / 20) itemstack:add_wear(65535 / 20)
player_inv:add_item("main", stack) player_inv:add_item("main", stack)