local chest for _,name in ipairs(peripheral.getNames()) do if name:match("chest") then chest = peripheral.wrap(name) break end end assert(chest,"couldn't find chest") -- might not work if there are multiple modems but why would you do that local localname = peripheral.find("modem").getNameLocal() local function take_stock() -- if you do this in parallel, you avoid having to wait 1 tick for each -- slot of the chest. which is probably good. local out = {} local fns = {} for i=1,chest.size() do fns[i] = function() out[i] = chest.getItemDetail(i) end end parallel.waitForAll(unpack(fns)) return out end local function item_desc_matches(idesc,itemdetail) -- idesc is an entry from ITEMS -- itemdetail is something returned from getItemDetail on the chest -- if you were wondering return idesc.itname == itemdetail.name end local function stock_amt(stockinfo,idesc) local total = 0 for ix,itm in pairs(stockinfo) do if item_desc_matches(idesc,itm) then total = total + itm.count end end return total end