39 lines
1.2 KiB
Lua
39 lines
1.2 KiB
Lua
-- Program that manages a storage system
|
|
-- For now this just means removing "waste" but in the future it could involve
|
|
-- - Displaying information to the user
|
|
-- - Freeing up slots where it can
|
|
|
|
local SOURCES =
|
|
{
|
|
}
|
|
|
|
local KEEP_ONLY = {}
|
|
KEEP_ONLY["minecraft:quartz"] = 6 * 64
|
|
KEEP_ONLY["minecraft:prismarine_shard"] = 2 * 64
|
|
|
|
function remove_excess_from (waste_inv, amounts_to_keep, source)
|
|
for slot, item in pairs(peripheral.call(source, "list")) do
|
|
if amounts_to_keep[item.name] ~= nil then
|
|
local excess = item.count - amounts_to_keep[item.name]
|
|
if excess > 0 then
|
|
amounts_to_keep[item.name] = 0
|
|
local result = peripheral.call(
|
|
waste_inv, "pullItems", source, slot, excess
|
|
)
|
|
else
|
|
amounts_to_keep[item.name] = -excess
|
|
end
|
|
end
|
|
end
|
|
return amounts_to_keep
|
|
end
|
|
|
|
function remove_waste(sources, waste_inventory, amounts_to_keep)
|
|
for _, src in ipairs(sources) do
|
|
amounts_to_keep = remove_excess_from(waste_inventory, amounts_to_keep, src)
|
|
end
|
|
end
|
|
|
|
while true do
|
|
remove_waste(SOURCES, WASTE_INV, KEEP_ONLY)
|
|
end
|