From 1bf79de220a83fa4f0be92f664301393e906f41b Mon Sep 17 00:00:00 2001 From: kepler155c Date: Thu, 29 Mar 2018 14:22:02 -0400 Subject: [PATCH] plethora import/export support --- apis/chestAdapter18.lua | 6 +-- apis/meAdapter18.lua | 81 ++++++++++++++++++----------------------- apis/refinedAdapter.lua | 3 -- apps/chestManager.lua | 7 +++- 4 files changed, 45 insertions(+), 52 deletions(-) diff --git a/apis/chestAdapter18.lua b/apis/chestAdapter18.lua index 8d5cc01..7d8238a 100644 --- a/apis/chestAdapter18.lua +++ b/apis/chestAdapter18.lua @@ -14,11 +14,11 @@ function ChestAdapter:init(args) local chest if not self.side then - chest = Peripheral.getByMethod('list') - -- or Peripheral.getByMethod('listAvailableItems') + chest = Peripheral.getByMethod('list') or + Peripheral.getByMethod('listAvailableItems') else chest = Peripheral.getBySide(self.side) - if chest and not chest.list then -- and not chest.listAvailableItems then + if chest and not chest.list and not chest.listAvailableItems then chest = nil end end diff --git a/apis/meAdapter18.lua b/apis/meAdapter18.lua index 858a5b6..56e4552 100644 --- a/apis/meAdapter18.lua +++ b/apis/meAdapter18.lua @@ -5,6 +5,8 @@ local Util = require('util') local MEAdapter = class(RSAdapter) +local DEVICE_TYPE = 'appliedenergistics2:interface' + function MEAdapter:init(args) local defaults = { name = 'appliedEnergistics', @@ -15,12 +17,9 @@ function MEAdapter:init(args) local controller if not self.side then - controller = Peripheral.getByMethod('getCraftingCPUs') + controller = Peripheral.getByType(DEVICE_TYPE) else controller = Peripheral.getBySide(self.side) - if controller and not controller.getCraftingCPUs then - controller = nil - end end if controller then @@ -29,68 +28,60 @@ function MEAdapter:init(args) end function MEAdapter:isValid() - return not not self.getCraftingCPUs + return self.type == DEVICE_TYPE and not not self.findItems +end + +function MEAdapter:clearFinished() + for _,key in pairs(Util.keys(self.jobList)) do + local job = self.jobList[key] + if job.info.status() == 'finished' then + self.jobList[key] = nil + end + end end function MEAdapter:isCPUAvailable() local cpus = self.getCraftingCPUs() or { } - local available = false + local busy = 0 - for cpu,v in pairs(cpus) do - if not v.busy then - available = true - elseif not self.jobList[cpu] then -- something else is crafting something (don't know what) - return false -- return false since we are in an unknown state + for _,cpu in pairs(cpus) do + if cpu.busy then + busy = busy + 1 end end - return available + self:clearFinished() + return busy == Util.size(self.jobList) and busy < #cpus end -function MEAdapter:craft(item, qty) +function MEAdapter:craft(item, count) if not self:isCPUAvailable() then return false end local detail = self.findItem(item) if detail and detail.craft then - - local cpus = self.getCraftingCPUs() or { } - for cpu,v in pairs(cpus) do - if not v.busy then - self.requestCrafting({ - id = item.name, - dmg = item.damage, - nbt_hash = item.nbtHash, - }, - count or 1, - v.name -- CPUs must be named ! use anvil - ) - - os.sleep(0) -- needed ? - cpus = self.getCraftingCPUs() or { } - - if cpus[cpu].busy then - self.jobList[cpu] = { - name = item.name, - damage = item.damage, - nbtHash = item.nbtHash, - count = count, - } - return true - end - break -- only need to try the first available cpu - end + local info = detail.craft(count or 1) + if info.status() == 'unknown' then + self.jobList[info.getId()] = { + name = item.name, + damage = item.damage, + nbtHash = item.nbtHash, + info = info, + } + return true end return false end end function MEAdapter:isCrafting(item) - for _,task in pairs(self.getCraftingTasks()) do - local output = task.getPattern().outputs[1] - if output.name == item.name and - output.damage == item.damage and - output.nbtHash == item.nbtHash then + self:clearFinished() +_G._p = self.jobList + for _,job in pairs(self.jobList) do + if job.name == item.name and + job.damage == item.damage and + job.nbtHash == item.nbtHash then +debug('still crafting') return true end end diff --git a/apis/refinedAdapter.lua b/apis/refinedAdapter.lua index 6c00c53..6739a74 100644 --- a/apis/refinedAdapter.lua +++ b/apis/refinedAdapter.lua @@ -17,9 +17,6 @@ function RefinedAdapter:init(args) controller = Peripheral.getByMethod('getCraftingTasks') else controller = Peripheral.getBySide(self.side) - if controller and not controller.getCraftingTasks then - controller = nil - end end if controller then diff --git a/apps/chestManager.lua b/apps/chestManager.lua index d233609..fe303be 100644 --- a/apps/chestManager.lua +++ b/apps/chestManager.lua @@ -121,7 +121,7 @@ local config = { Config.loadWithCheck('inventoryManager', config) -local controllerAdapter = ControllerAdapter.wrap({ side = config.controller, facing = config.computerFacing }) +--local controllerAdapter = ControllerAdapter.wrap({ side = config.controller, facing = config.computerFacing }) local inventoryAdapter = InventoryAdapter.wrap({ side = config.inventory, facing = config.computerFacing }) local stockAdapter = InventoryAdapter.wrap({ side = config.stock, facing = config.computerFacing }) local turtleChestAdapter = InventoryAdapter.wrap({ side = config.craftingChest, facing = config.computerFacing }) @@ -133,6 +133,11 @@ if not inventoryAdapter then error('Invalid inventory configuration') end +local controllerAdapter +if inventoryAdapter.craft then + controllerAdapter = inventoryAdapter +end + if device.workbench and config.duckAntenna then local oppositeSide = { [ 'left' ] = 'right',