local c = require("component") local r = require("robot") local s = require("sides") local z_funcs = {}; local keepSlot = {}; local selectedSlot = nil; z_funcs.keepItems = { "ic2:electric_treetap", "ic2:treetap" }; z_funcs.appname = "undefined"; function z_funcs.writeStr(str) io.write("["..z_funcs.appname.."] "..str.."\n"); io.flush(); end function z_funcs.moveVertical(side,count) local side = side or s.down; local count = count or 1; for i=1,count do if (side == s.up) then while r.detectUp() do os.sleep(1); end r.up(); end if (side == s.down) then while r.detectDown() do os.sleep(1); end r.down(); end end end function z_funcs.cachedSelect(slot) if slot ~= selectedSlot then r.select(slot) selectedSlot = slot end end function z_funcs.moveForward(count) local count = count or 1; for i=1,count do while r.detect() do os.sleep(1); end r.forward(); end return true; end function z_funcs.dropItems() if c.isAvailable("inventory_controller") then while not c.inventory_controller.getInventorySize(s.down) do z_funcs.writeStr("Cannot find chest?"); os.sleep(5); end end -- Reset keepSlot keepSlot = {}; if z_funcs.keepItems then for k,v in pairs(z_funcs.keepItems) do local keep = z_funcs.findInLocalInv(v); if keep then keepSlot[keep] = true; end end end z_funcs.writeStr("Putting items into chest...") for slot = 1, r.inventorySize() do while not keepSlot[slot] and r.count(slot) > 0 do z_funcs.cachedSelect(slot); r.dropDown(); end end z_funcs.cachedSelect(1); end function z_funcs.getFromChest(itemName,localSlot,direction,count) local direction = direction or s.down; local localSlot = localSlot or 1; local count = count or 1; z_funcs.writeStr("Trying to get "..count.." "..itemName.." from chest...") if c.isAvailable("inventory_controller") then while not c.inventory_controller.getInventorySize(direction) do z_funcs.writeStr("Cannot find chest?"); os.sleep(5); end end z_funcs.cachedSelect(localSlot); if r.count(localSlot) > 0 then for i=1,r.inventorySize() do if not i == localSlot then if r.count(i) == 0 then r.transferTo(i); break; end end end end for i=1,c.inventory_controller.getInventorySize(direction) do local itemInfo = c.inventory_controller.getStackInSlot(direction,i); if itemInfo then if itemName == itemInfo.name then return c.inventory_controller.suckFromSlot(direction, i, count); end end end return false; end function z_funcs.findInLocalInv(itemName) for i=1,r.inventorySize() do local itemInfo = c.inventory_controller.getStackInInternalSlot(i); if itemInfo then if itemName == itemInfo.name then return i; end end end end return z_funcs;