diff --git a/compacting-storage.lua b/compacting-storage.lua index b3edf3f..889edd9 100644 --- a/compacting-storage.lua +++ b/compacting-storage.lua @@ -6,9 +6,10 @@ -- constants -local INVENTORY = "" +local INVENTORY = "left" local SLEEP_TIME = 30 -local AMOUNT_PER = 63 -- the amount of item change per request +local AMOUNT_USED = 63 -- the amount of item used per request +local AMOUNT_RETURNED = 7 -- the amount of item returned per request local ITEM_TYPES = { "iron", "copper", "zinc", "gold", "electrum" } local PRIORITY = { "ingot", "block", "nugget" } @@ -18,11 +19,11 @@ end -- TODO map targets to specific relays local target = {} -target.iron = peripheral.wrap"" -target.copper = peripheral.wrap"" -target.zinc = peripheral.wrap"" -target.gold = peripheral.wrap"" -target.electrum = peripheral.wrap"" +target.iron = peripheral.wrap"redstone_relay_0" +target.copper = peripheral.wrap"redstone_relay_1" +target.zinc = peripheral.wrap"redstone_relay_2" +target.gold = peripheral.wrap"redstone_relay_3" +target.electrum = peripheral.wrap"redstone_relay_4" -- Levels local limits = {} @@ -52,7 +53,7 @@ function sum_items (inv) end for slot, item in pairs(inv.list()) do local type, form = item.name:match".-:(%l-)_(%l*)" - if type ~= nil and form ~= nil then + if result[type] ~= nil then result[type][form] = result[type][form] + item.count end end @@ -85,10 +86,11 @@ function drain (type, form, amount) elseif form == "ingot" then conversion = "ingot_to_block" end + print("Draining %d %s %ss":format(amount, type, form)) request_multiple(type, conversion, amount) end -function fill (type, form, amount) +function fill (type, dest, amount) local conversion = nil if dest == "block" then conversion = "ingot_to_block" @@ -99,6 +101,7 @@ function fill (type, form, amount) conversion = "block_to_ingot" end end + print("Converting %d %s %ss to %ss":format(amount, type, src, dest)) request_multiple(type, conversion, amount) end @@ -106,7 +109,7 @@ end function should_drain (type, counts) local drain_form, amount = nil, 0 for _, form in ipairs(PRIORITY) do - local diff = counts[form] - target[type][form][2] + local diff = counts[form] - limits[type][form][2] if diff > 0 then amount = math.ceil(diff / AMOUNT_PER) drain_form = form @@ -118,7 +121,7 @@ end function should_fill (type, counts) local fill_dest, fill_src, amount = nil, nil, 0 for _, form in ipairs(PRIORITY) do - local diff = target[type][form][1] - counts[form] + local diff = limits[type][form][1] - counts[form] if diff > 0 then if fill_dest == nil then amount = math.ceil(diff / AMOUNT_PER)