local colony = peripheral.find("colony_integrator") local bridge = peripheral.find("me_bridge") local warehouse = peripheral.find("minecolonies:warehouse") local buffer = peripheral.find("minecraft:barrel") local bufferName = peripheral.getName(buffer) local warehousCleanIn = 0 builderHuts = { { ["name"] = "Builder Hut #1", ["netId"] = "minecolonies:colonybuilding_3", ["position"] = { ["x"] = 493, ["y"] = 63, ["z"] = 832 } }, { ["name"] = "Builder Hut #2", ["netId"] = "minecolonies:colonybuilding_4", ["position"] = { ["x"] = 600, ["y"] = 63, ["z"] = 928 } }, { ["name"] = "Builder Hut #3", ["netId"] = "minecolonies:colonybuilding_2", ["position"] = { ["x"] = 590, ["y"] = 69, ["z"] = 755 } } } function logicLoop() --Clean warehouse if warehousCleanIn <= 0 then warehousCleanIn = 120 print("Running warehouse clean") local warehouseSize = warehouse.size() print("\tWarehouse has", warehouseSize, "slots") for slot=1, warehouseSize do local invSlot = warehouse.getItemDetail(slot) if invSlot ~= nil then print('\tSticking', invSlot.name, 'into buffer') warehouse.pushItems(bufferName, slot) print('\tMoving from buffer to ME') bridge.importItem({ name= invSlot.name }, "right") end end else warehousCleanIn = warehousCleanIn - 1 end local chestFree = warehouse.size() - #warehouse.list() local chestUsed = 0 print('Indexing smart warehouse inventory') local warehouseInventory = {} for slot, item in pairs(warehouse.list()) do print('Warehouse has: x' .. item.count, item.name) warehouseInventory[item.name] = item.count end print('Chest has slots', chestFree) -- BUILDER HUT ITEM GRABBING for hutNum, hut in pairs(builderHuts) do local hutNeeds = colony.getBuilderResources(hut.position) print("Builder hut scan for", hut.name) if #hutNeeds > 0 then if chestFree > 0 then for i, hutNeed in ipairs(hutNeeds) do local warehouseAmount = warehouseInventory[hutNeed.item.name] or 0 local pullAmount = (hutNeed.needs - hutNeed.available) - warehouseAmount print("\t", hutNeed.needs .. '/' .. hutNeed.available .. ', x' .. pullAmount, hutNeed.item.name) if pullAmount > 0 then local meItem = bridge.getItem({ ["name"] = hutNeed.item.name }) if meItem then print("\tME: x" .. meItem.count, hutNeed.item.name) term.setTextColour(colours.blue) print("\tPulling: x", pullAmount, hutNeed.item.name) term.setTextColour(colours.white) bridge.exportItem({ ["name"] = hutNeed.item.name, ["count"] = pullAmount}, "right") buffer.pushItems(hut.netId, 1) sleep(1) chestUsed = chestUsed + 1 if chestUsed >= chestFree then term.setTextColour(colours.red) print("\tWarehouse: OUT OF STORAGE") term.setTextColour(colours.white) break end else term.setTextColour(colours.red) print("\tME: No stock x" .. pullAmount, hutNeed.item.name) term.setTextColour(colours.white) end else term.setTextColour(colours.orange) print("\tHut: Has enough", hutNeed.item.name) term.setTextColour(colours.white) end end else term.setTextColour(colours.red) print("\tWarehouse: OUT OF STORAGE") term.setTextColour(colours.white) end else term.setTextColour(colours.green) print("\tHut: Has no requests") term.setTextColour(colours.white) print("\tCleaning hut", hut.name) -- check if hut has items to stick back in me network local hutInventory = peripheral.find(hut.netId) local hutInventorySize = hutInventory.size() for slot=1, hutInventorySize do local invSlot = hutInventory.getItemDetail(slot) if invSlot ~= nil then print('\tSticking', invSlot.name, 'into buffer') hutInventory.pushItems(bufferName, slot) print('\tMoving from buffer to ME') bridge.importItem({ name= invSlot.name }, "right") end end end sleep(1) end print() print("Checking for citzen requests") -- CITIZEN REQUEST GRABBER local requests = colony.getRequests() for reqPos, req in pairs(requests) do print("Req:", req.target, "x" .. req.count, req.name) local itemFound = false for itemPos, item in pairs(req.items) do if warehouseInventory[item.name] then print("\tReq: Warehouse has", warehouseInventory[item.name]) itemFound = true break end local meItem = bridge.getItem({ ["name"] = item.name }) if meItem then local pullAmount = item.minCount or 1 print("\tReq: ME has x" .. meItem.count) term.setTextColour(colours.blue) print("\tPulling: x" .. pullAmount, item.name) term.setTextColour(colours.white) bridge.exportItem({ ["name"] = item.name, ["count"] = pullAmount }, "right") buffer.pushItems(peripheral.getName(warehouse), 1) itemFound = true break end end if itemFound == false then term.setTextColour(colours.red) print("\tReq: No item", req.name) term.setTextColour(colours.white) end sleep(1) end term.setTextColour(colours.grey) print('System is sleeping for 60 seconds...') term.setTextColour(colours.white) end while true do local success, error = pcall(logicLoop) if error then print(error) end sleep(60) end