Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local os = require("os")
- local sides = require("sides")
- local sleep_t = 0.1
- local rs = component.redstone
- local tp_utils = {}
- function tp_utils.first_of(stacks, pred)
- for slot = 1, stacks.count() do
- if pred(slot, stacks[slot]) then return slot, stacks[slot] end
- end
- return -1, nil
- end
- function tp_utils.all(stacks, pred)
- local ret = {}
- for slot = 1, stacks.count() do
- if pred(slot, stacks[slot]) then table.insert(ret, table.pack(slot, stacks[slot])) end
- end
- return ret
- end
- function tp_utils.is_any(stacks, pred)
- return select(2, tp_utils.first_of(stacks, pred)) ~= nil
- end
- function tp_utils.are_all(stacks, pred)
- return not tp_utils.is_any(stacks, function(slot, stack) return not pred(slot, stack) end)
- end
- function tp_utils.is_empty(stacks)
- return tp_utils.are_all(stacks, function(slot, stack) return stack == nil end)
- end
- function tp_utils.wait_for_empty_slot(tp, side)
- local slot = -1
- while slot == -1 do
- slot, _ = tp_utils.first_of(tp.getAllStacks(side), function(slot, stack) return stack == nil end)
- os.sleep(sleep_t)
- end
- return slot
- end
- function tp_utils.transfer_all(tp, in_side, out_side, pred)
- local in_stacks = tp.getAllStacks(in_side)
- local out_slot = 1
- for in_slot = 1, in_stacks.count() do
- while tp.getStackInSlot(out_side, out_slot) ~= nil do out_slot = out_slot + 1 end
- if in_stacks[in_slot] ~= nil and pred(in_slot, in_stacks[in_slot]) then tp.transferItem(in_side, out_side, in_stacks[in_slot].count, in_slot, out_slot) end
- end
- end
- local function main()
- local tp = component.transposer
- local sys_in = sides.east
- local sys_out = sides.south
- local drop = sides.up
- local pers = sides.down
- local vacuum = sides.west
- local vacuum_rs = sides.back
- local stand_rs = sides.right
- while true do
- while tp_utils.is_empty(tp.getAllStacks(sys_in)) do os.sleep(sleep_t) end
- local seeds_slot = -1
- while seeds_slot == -1 do
- seeds_slot, _ = tp_utils.first_of(tp.getAllStacks(pers), function(slot, stack) return stack.label == "Seeds" end)
- os.sleep(sleep_t)
- end
- local water_slot = -1
- while water_slot == -1 do
- water_slot, _ = tp_utils.first_of(tp.getAllStacks(pers), function(slot, stack) return stack.label == "Water Bucket" end)
- os.sleep(sleep_t)
- end
- local empty_slot = nil
- empty_slot = tp_utils.wait_for_empty_slot(tp, drop)
- tp.transferItem(pers, drop, 1, seeds_slot, empty_slot)
- empty_slot = tp_utils.wait_for_empty_slot(tp, drop)
- tp.transferItem(pers, drop, 1, water_slot, empty_slot)
- tp_utils.transfer_all(tp, sys_in, drop, function(slot, stack) return true end)
- while rs.getInput(stand_rs) ~= 0.0 do os.sleep(sleep_t) end
- rs.setOutput(vacuum_rs, 15.0)
- while tp_utils.is_empty(tp.getAllStacks(vacuum)) do os.sleep(sleep_t) end
- os.sleep(1)
- tp_utils.transfer_all(tp, vacuum, sys_out)
- end
- end
- main()
Advertisement
Add Comment
Please, Sign In to add comment