mirror of
https://github.com/Uberi/Minetest-WorldEdit.git
synced 2025-02-11 17:20:26 +01:00
serialize: Fix detecting empty metadata (#176)
This commit is contained in:
parent
0aeee79af6
commit
d1cbd420bb
@ -56,10 +56,19 @@ function worldedit.serialize(pos1, pos2)
|
|||||||
|
|
||||||
worldedit.keep_loaded(pos1, pos2)
|
worldedit.keep_loaded(pos1, pos2)
|
||||||
|
|
||||||
|
local get_node, get_meta, hash_node_position =
|
||||||
|
minetest.get_node, minetest.get_meta, minetest.hash_node_position
|
||||||
|
|
||||||
|
-- Find the positions which have metadata
|
||||||
|
local has_meta = {}
|
||||||
|
local meta_positions = minetest.find_nodes_with_meta(pos1, pos2)
|
||||||
|
for i = 1, #meta_positions do
|
||||||
|
has_meta[hash_node_position(meta_positions[i])] = true
|
||||||
|
end
|
||||||
|
|
||||||
local pos = {x=pos1.x, y=0, z=0}
|
local pos = {x=pos1.x, y=0, z=0}
|
||||||
local count = 0
|
local count = 0
|
||||||
local result = {}
|
local result = {}
|
||||||
local get_node, get_meta = minetest.get_node, minetest.get_meta
|
|
||||||
while pos.x <= pos2.x do
|
while pos.x <= pos2.x do
|
||||||
pos.y = pos1.y
|
pos.y = pos1.y
|
||||||
while pos.y <= pos2.y do
|
while pos.y <= pos2.y do
|
||||||
@ -68,20 +77,19 @@ function worldedit.serialize(pos1, pos2)
|
|||||||
local node = get_node(pos)
|
local node = get_node(pos)
|
||||||
if node.name ~= "air" and node.name ~= "ignore" then
|
if node.name ~= "air" and node.name ~= "ignore" then
|
||||||
count = count + 1
|
count = count + 1
|
||||||
local meta = get_meta(pos):to_table()
|
|
||||||
|
|
||||||
local meta_empty = true
|
local meta
|
||||||
-- Convert metadata item stacks to item strings
|
if has_meta[hash_node_position(pos)] then
|
||||||
for name, inventory in pairs(meta.inventory) do
|
meta = get_meta(pos):to_table()
|
||||||
for index, stack in ipairs(inventory) do
|
|
||||||
meta_empty = false
|
-- Convert metadata item stacks to item strings
|
||||||
inventory[index] = stack.to_string and stack:to_string() or stack
|
for _, invlist in pairs(meta.inventory) do
|
||||||
end
|
for index = 1, #invlist do
|
||||||
end
|
local itemstack = invlist[index]
|
||||||
for k in pairs(meta) do
|
if itemstack.to_string then
|
||||||
if k ~= "inventory" then
|
invlist[index] = itemstack:to_string()
|
||||||
meta_empty = false
|
end
|
||||||
break
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -92,7 +100,7 @@ function worldedit.serialize(pos1, pos2)
|
|||||||
name = node.name,
|
name = node.name,
|
||||||
param1 = node.param1 ~= 0 and node.param1 or nil,
|
param1 = node.param1 ~= 0 and node.param1 or nil,
|
||||||
param2 = node.param2 ~= 0 and node.param2 or nil,
|
param2 = node.param2 ~= 0 and node.param2 or nil,
|
||||||
meta = not meta_empty and meta or nil,
|
meta = meta,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
pos.z = pos.z + 1
|
pos.z = pos.z + 1
|
||||||
|
Loading…
Reference in New Issue
Block a user