Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local maxItem = 2176
- --######################--
- local IMPORT = true
- local chest = {}
- local hasChest = false
- local hasRChest = false
- local rChestName = ""
- local Int = {}
- local hasInt = false
- local hasRInt = false
- local rIntName = ""
- local directions = {"top", "bottom", "front", "back", "left", "right"}
- local validItems ={"Snowball","Paint Ball"}
- local IIDs =
- {
- "minecraft:snowball",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall",
- "appliedenergistics2:item.ItemPaintBall"
- }
- local IDMGs =
- {
- 0,
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15
- }
- local exportDirection = "south"
- local function findPeripherals()
- for k, v in pairs(peripheral.getNames()) do
- if string.find(v, "draconic_chest") then
- hasChest = true
- hasRChest = true
- rChestName = v
- term.setCursorPos(1, 1)
- term.write("INFO: Found remote "..v)
- os.sleep(1)
- elseif string.find(v, "tileinterface") then
- hasInt = true
- hasRInt = true
- rIntName = v
- term.setCursorPos(1, 2)
- term.write("INFO: Found remote "..v)
- os.sleep(1)
- end
- end
- end
- local function findInt()
- if hasRInt then return end
- for k, v in pairs(directions) do
- local p = peripheral.wrap(v)
- if p ~= nil then
- if string.find(peripheral.getType(v), "tileinterface") then
- Int = p
- hasInt = true
- return
- end
- end
- end
- term.setCursorPos(1, 2)
- term.write("ERROR: No Interface detected!")
- os.sleep(5)
- end
- local function findChest()
- if hasRChest then return end
- for k, v in pairs(directions) do
- local p = peripheral.wrap(v)
- if p ~= nil then
- if string.find(peripheral.getType(v), "draconic_chest") then
- chest = p
- hasChest = true
- return
- end
- end
- end
- term.setCursorPos(1, 1)
- term.write("WARNING: No Draconic Chest detected!")
- os.sleep(5)
- end
- function invSize()
- local chest
- if hasChest then
- chest = peripheral.call(rChestName, "getInventorySize")
- else
- chest = chest.getInventorySize()
- end
- return chest
- end
- function StackSlot(Slot)
- local chest
- if hasChest then
- chest = peripheral.call(rChestName, "getStackInSlot", Slot)
- else
- chest = chest.getStackInSlot(Slot)
- end
- return chest
- end
- function string.starts(String,Start)
- pre = string.sub(Start,1,string.len(String))
- return pre == Start
- end
- function tablelength(T)
- local count = 0
- for _ in pairs(T) do
- count = count + 1
- end
- return count
- end
- function contains(table, String)
- for i = 1, tablelength(table), 1 do
- if string.starts(String, table[i]) then
- return true
- end
- end
- return false
- end
- function isValidItem(itemStack)
- if contains(validItems, itemStack.display_name) then
- return true
- end
- return false
- end
- function setGreen(sSide)
- rs.setBundledOutput(sSide, colors.green)
- end
- function chestEmpty()
- ic = 0
- for i = 1, invSize() - 1, 1 do
- stack = StackSlot(i)
- if stack ~= nil then
- if isValidItem(stack) then
- ic = ic + stack.qty
- end
- end
- end
- return ic == 0
- end
- function setRed(sSide)
- rs.setBundledOutput(sSide, colors.red)
- end
- function setNull(sSide)
- rs.setBundledOutput(sSide, 0)
- end
- function chestValid(validItemCount)
- if validItemCount > maxItem then
- term.setCursorPos(1, 3)
- term.write("ERROR - Chest inventory exceeds set storage limits!")
- elseif validItemCount == maxItem then
- setGreen("bottom")
- IMPORT = false
- end
- end
- local function init()
- findPeripherals()
- findChest()
- findInt()
- end
- init()
- function refill()
- for _, aes in pairs(Int.getAvailableItems()) do
- for i = 1, tablelength(IIDs), 1 do
- id = IIDs[i]
- dmg = IDMGs[i]
- if aes.fingerprint.id == id and aes.fingerprint.dmg == dmg then
- valS = 0
- for j = 1, invSize() - 1, 1 do
- stack = StackSlot(j)
- if stack ~= nil then
- if stack.id == id and stack.dmg == dmg then
- valS = valS + stack.qty
- --print(aReq)
- --print(valS)
- end
- end
- end
- aReq = 128 - valS
- if aReq > 0 then
- --print(aes.size)
- --print(aReq)
- if aes.size > aReq then
- --Transfer items from ME to Chest (*aReq)
- Int.exportItem(aes.fingerprint, exportDirection, aReq)
- else
- --Transfer and request recrafting
- Int.requestCrafting(aes.fingerprint, 512)
- end
- end
- end
- end
- end
- end
- while true do
- if IMPORT then
- slot = 0
- slotqt = 0
- valI = 0
- for CurrSlot = 1, invSize() -1, 1 do
- tableIS = StackSlot(CurrSlot)
- if tableIS ~= nil then
- slotqt = tableIS.qty
- slot = slot + slotqt
- if isValidItem(tableIS) then
- --print("valid")
- valI = valI + slotqt
- else
- term.setCursorPos(1, 3)
- term.write("Invalid Items found! (Please kill the person responsible.)")
- end
- --print("Slot Stack size: "..slotqt)
- --print("Total Item count: "..slot)
- --print("Valid Items: "..valI)
- end
- end
- if valI >= maxItem then
- chestValid(valI)
- else
- term.setCursorPos(1, 3)
- term.write("Refilling chest")
- refill()
- end
- else
- prevImport = IMPORT
- IMPORT = chestEmpty()
- end
- if not IMPORT then
- term.setCursorPos(1, 3)
- term.write("Import Process on hold until chest is emptied")
- sleep(2)
- elseif prevImport == false then
- term.setCursorPos(1, 3)
- term.write("Pausing Operations for Refilling Color Applicator")
- setRed("bottom")
- sleep(1)
- setNull("bottom")
- else
- sleep(5)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement