Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement