chests: fix sort_inventory function

This commit is contained in:
DS-Minetest 2017-09-02 15:57:32 +02:00 committed by Ekdohibs
parent 37d49142cf
commit 930c51eef9

View File

@ -137,38 +137,20 @@ local function sort_inventory(inv)
local m = st:get_metadata() local m = st:get_metadata()
local k = string.format("%s %05d %s", n, w, m) local k = string.format("%s %05d %s", n, w, m)
if not typecnt[k] then if not typecnt[k] then
typecnt[k] = { typecnt[k] = {st}
name = n,
wear = w,
metadata = m,
stack_max = st:get_stack_max(),
count = 0,
}
table.insert(typekeys, k) table.insert(typekeys, k)
else
table.insert(typecnt[k], st)
end end
typecnt[k].count = typecnt[k].count + st:get_count()
end end
end end
table.sort(typekeys) table.sort(typekeys)
local outlist = {} inv:set_list("main", {})
for _, k in ipairs(typekeys) do for _, k in ipairs(typekeys) do
local tc = typecnt[k] for _, item in ipairs(typecnt[k]) do
while tc.count > 0 do inv:add_item("main", item)
local c = math.min(tc.count, tc.stack_max)
table.insert(outlist, ItemStack({
name = tc.name,
wear = tc.wear,
metadata = tc.metadata,
count = c,
}))
tc.count = tc.count - c
end end
end end
if #outlist > #inlist then return end
while #outlist < #inlist do
table.insert(outlist, ItemStack(nil))
end
inv:set_list("main", outlist)
end end
local function get_receive_fields(name, data) local function get_receive_fields(name, data)
@ -305,7 +287,7 @@ function technic.chests:definition(name, data)
on_receive_fields = get_receive_fields(name, data), on_receive_fields = get_receive_fields(name, data),
on_metadata_inventory_move = self.on_inv_move, on_metadata_inventory_move = self.on_inv_move,
on_metadata_inventory_put = self.on_inv_put, on_metadata_inventory_put = self.on_inv_put,
on_metadata_inventory_take = self.on_inv_take, on_metadata_inventory_take = self.on_inv_take,
on_blast = function(pos) on_blast = function(pos)
local drops = {} local drops = {}
default.get_inventory_drops(pos, "main", drops) default.get_inventory_drops(pos, "main", drops)