don't stack items with different metadata

This commit is contained in:
theFox6 2020-06-21 12:42:12 +02:00
parent a47336ae3e
commit 347cec5894
No known key found for this signature in database
GPG Key ID: C884FE8D3BCE128A

@ -4,8 +4,7 @@ local networks = me.networks
local path = microexpansion.get_module_path("network") local path = microexpansion.get_module_path("network")
local function split_stack_values(stack) local function split_stack_values(stack)
local stack_name local stack_name, stack_count, stack_meta
local stack_count
if type(stack) == "string" then if type(stack) == "string" then
local split_string = stack:split(" ") local split_string = stack:split(" ")
stack_name = split_string[1] stack_name = split_string[1]
@ -17,29 +16,32 @@ local function split_stack_values(stack)
else else
stack_name = stack:get_name() stack_name = stack:get_name()
stack_count = stack:get_count() stack_count = stack:get_count()
stack_meta = stack:get_meta()
end end
return stack_name, stack_count return stack_name, stack_count, stack_meta
end end
function me.insert_item(stack, inv, listname) function me.insert_item(stack, inv, listname)
if me.settings.huge_stacks == false then if me.settings.huge_stacks == false then
return inv:add_item(listname, stack) return inv:add_item(listname, stack)
end end
local stack_name,stack_count = split_stack_values(stack) local stack_name,stack_count,stack_meta = split_stack_values(stack)
local found = false local found = false
for i = 0, inv:get_size(listname) do for i = 0, inv:get_size(listname) do
local inside = inv:get_stack(listname, i) local inside = inv:get_stack(listname, i)
if inside:get_name() == stack_name then if inside:get_name() == stack_name then
local total_count = inside:get_count() + stack_count if inside:get_meta():equals(stack_meta) then
-- bigger item count is not possible we only have unsigned 16 bit local total_count = inside:get_count() + stack_count
if total_count <= math.pow(2,16) then -- bigger item count is not possible we only have unsigned 16 bit
if not inside:set_count(total_count) then if total_count <= math.pow(2,16) then
minetest.log("error"," adding items to stack in microexpansion network failed") if not inside:set_count(total_count) then
print("stack is now " .. inside:to_string()) minetest.log("error"," adding items to stack in microexpansion network failed")
print("stack is now " .. inside:to_string())
end
inv:set_stack(listname, i, inside)
found = true
break;
end end
inv:set_stack(listname, i, inside)
found = true
break;
end end
end end
end end