forked from minetest-mods/technic
Correct (almost) all luacheck warnings
Also includes a few code opimizations: - Combined mining drill functions - Shorter alias registration (unused?) - Add TODOs to address later
This commit is contained in:
@ -32,34 +32,37 @@ local function get_pickup_name(name)
|
||||
end
|
||||
|
||||
local function restore(pos, placer, itemstack)
|
||||
local name = itemstack:get_name()
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local data = itemstack:get_meta():get_string("data")
|
||||
data = (data ~= "" and data) or itemstack:get_metadata()
|
||||
data = minetest.deserialize(data)
|
||||
|
||||
if not data then
|
||||
minetest.remove_node(pos)
|
||||
minetest.log("error", placer:get_player_name().." wanted to place "..
|
||||
name.." at "..minetest.pos_to_string(pos)..
|
||||
itemstack:get_name().." at "..minetest.pos_to_string(pos)..
|
||||
", but it had no data.")
|
||||
minetest.log("verbose", "itemstack: "..itemstack:to_string())
|
||||
return true
|
||||
end
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
minetest.set_node(pos, {name = data.name, param2 = node.param2})
|
||||
for name, value in pairs(data.metas) do
|
||||
local meta_type = get_meta_type(data.name, name)
|
||||
|
||||
-- Apply stored metadata to the current node
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
for key, value in pairs(data.metas) do
|
||||
local meta_type = get_meta_type(data.name, key)
|
||||
if meta_type == wrench.META_TYPE_INT then
|
||||
meta:set_int(name, value)
|
||||
meta:set_int(key, value)
|
||||
elseif meta_type == wrench.META_TYPE_FLOAT then
|
||||
meta:set_float(name, value)
|
||||
meta:set_float(key, value)
|
||||
elseif meta_type == wrench.META_TYPE_STRING then
|
||||
meta:set_string(name, value)
|
||||
meta:set_string(key, value)
|
||||
end
|
||||
end
|
||||
local lists = data.lists
|
||||
for listname, list in pairs(lists) do
|
||||
|
||||
for listname, list in pairs(data.lists) do
|
||||
inv:set_list(listname, list)
|
||||
end
|
||||
itemstack:take_item()
|
||||
@ -108,15 +111,15 @@ minetest.register_tool("wrench:wrench", {
|
||||
minetest.record_protection_violation(pos, player_name)
|
||||
return
|
||||
end
|
||||
local name = minetest.get_node(pos).name
|
||||
local def = wrench.registered_nodes[name]
|
||||
local node_name = minetest.get_node(pos).name
|
||||
local def = wrench.registered_nodes[node_name]
|
||||
if not def then
|
||||
return
|
||||
end
|
||||
|
||||
local stack = ItemStack(get_pickup_name(name))
|
||||
local stack_pickup = ItemStack(get_pickup_name(node_name))
|
||||
local player_inv = placer:get_inventory()
|
||||
if not player_inv:room_for_item("main", stack) then
|
||||
if not player_inv:room_for_item("main", stack_pickup) then
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
@ -131,10 +134,12 @@ minetest.register_tool("wrench:wrench", {
|
||||
end
|
||||
end
|
||||
|
||||
-- Do the actual pickup:
|
||||
local metadata = {}
|
||||
metadata.name = name
|
||||
metadata.name = node_name
|
||||
metadata.version = LATEST_SERIALIZATION_VERSION
|
||||
|
||||
-- Serialize inventory lists + items
|
||||
local inv = meta:get_inventory()
|
||||
local lists = {}
|
||||
for _, listname in pairs(def.lists or {}) do
|
||||
@ -146,22 +151,23 @@ minetest.register_tool("wrench:wrench", {
|
||||
end
|
||||
metadata.lists = lists
|
||||
|
||||
local item_meta = stack:get_meta()
|
||||
-- Serialize node metadata fields
|
||||
local item_meta = stack_pickup:get_meta()
|
||||
metadata.metas = {}
|
||||
for name, meta_type in pairs(def.metas or {}) do
|
||||
for key, meta_type in pairs(def.metas or {}) do
|
||||
if meta_type == wrench.META_TYPE_INT then
|
||||
metadata.metas[name] = meta:get_int(name)
|
||||
metadata.metas[key] = meta:get_int(key)
|
||||
elseif meta_type == wrench.META_TYPE_FLOAT then
|
||||
metadata.metas[name] = meta:get_float(name)
|
||||
metadata.metas[key] = meta:get_float(key)
|
||||
elseif meta_type == wrench.META_TYPE_STRING then
|
||||
metadata.metas[name] = meta:get_string(name)
|
||||
metadata.metas[key] = meta:get_string(key)
|
||||
end
|
||||
end
|
||||
|
||||
item_meta:set_string("data", minetest.serialize(metadata))
|
||||
minetest.remove_node(pos)
|
||||
itemstack:add_wear(65535 / 20)
|
||||
player_inv:add_item("main", stack)
|
||||
player_inv:add_item("main", stack_pickup)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
Reference in New Issue
Block a user