Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local me = peripheral.wrap("back")
- local EXPORT_SIDE = "south"
- local args = {...}
- local function starts_with(str, start)
- return str:sub(1, #start) == start
- end
- local function ends_with(str, ending)
- return ending == "" or str:sub(-#ending) == ending
- end
- local function waitForEnter()
- print("Press [Enter] to continue.")
- io.read()
- end
- local function isAEOnline()
- local usage, err = me.getEnergyUsage()
- return usage ~= nil and usage > 0
- end
- local function fetchItemLists(url)
- local request = http.get(url)
- if request == nil then
- print("HTTP request failed. Please contact the administrator.")
- return nil
- end
- if request.getResponseCode() ~= 200 then
- print("HTTP error code " .. request.getResponseCode() .. " Your link is likely incorrect.")
- return nil
- end
- local itemListText = request.readAll()
- request.close()
- local itemLists, msg = textutils.unserializeJSON(itemListText)
- if not itemLists then
- print("Failed to parse item-list JSON: " .. msg)
- return nil
- end
- return itemLists
- end
- local function findItem(items, name)
- for _, item in pairs(items) do
- if item.name == name then
- return item
- end
- end
- return nil
- end
- local function attemptItemExport(name, count, side)
- local func = function()
- return me.exportItem(
- {
- name=name,
- count=count
- },
- side
- )
- end
- local success, result = pcall(func)
- if success then
- return result
- else
- return nil, result
- end
- end
- local function exportItem(name, count)
- print("Exporting " .. count .. "x " .. name)
- local totalTransferred = 0
- while totalTransferred < count do
- local amountToTransfer = count - totalTransferred
- local items = me.listItems()
- local item = findItem(items, name)
- if item ~= nil and item.amount > 0 then
- local count, err = attemptItemExport(name, amountToTransfer, EXPORT_SIDE)
- if count ~= nil then
- print(" Transferred " .. count .. " items.")
- totalTransferred = totalTransferred + count
- if count == 0 then
- print(" Couldn't transfer any items. Please ensure there's space available for exporting.")
- waitForEnter()
- end
- else
- print(" Transfer failed: " .. err)
- waitForEnter()
- end
- -- elseif craftableItem ~= nil and not startedCraftingRecently then
- -- print(" No more items in the system; would you like to attempt to auto-craft " .. amountToTransfer .. " more?[yes/no]")
- -- local response = io.read()
- -- if response == "yes" then
- -- me.craftItem({name=name, count=amountToTransfer})
- -- startedCraftingRecently = true
- -- while me.isItemCrafting({name=name}) do
- -- print(" Crafting in progress...")
- -- os.sleep(0.5)
- -- end
- -- end
- else
- print(" Item doesn't exist in the system. Please add " .. amountToTransfer .. " of this item to the system, or type\"skip\" to skip this item.")
- local response = io.read()
- if response == "skip" then
- -- "skip" by pretending the items were exported.
- totalTransferred = totalTransferred + amountToTransfer
- end
- end
- end
- end
- local function exportSchematic(schematic)
- print("Exporting schematic\n \"" .. schematic.__NAME__ .. "\"")
- for i = 1, schematic.__COUNT__ do
- print("Iteration " .. i .. "/" .. schematic.__COUNT__ .. ":")
- for name, count in pairs(schematic) do
- if not (starts_with(name, "__") and ends_with(name, "__")) then
- exportItem(name, count)
- end
- end
- end
- end
- local function exportItemList(itemList)
- print("Exporting items for schematic:\n\t" .. itemList.__NAME__)
- for name, count in pairs(itemList) do
- exportItem(name, count)
- end
- print("Done!")
- end
- -- MAIN SCRIPT
- if not isAEOnline() then
- print("Could not connect to the AE system.")
- return
- end
- -- Check URL
- if #args < 1 or not http.checkURL(args[1]) then
- print("Missing or invalid item-list URL.")
- return
- end
- local itemLists = fetchItemLists(args[1])
- if itemLists == nil then
- print("Failed to retrieve item-list. Exiting.")
- return
- end
- for idx, itemList in pairs(itemLists) do
- exportSchematic(itemList)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement