thezer0th

Untitled

Jan 1st, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. local component = require("component")
  2. local os = require("os")
  3. local sides = require("sides")
  4.  
  5. local sleep_t = 0.1
  6. local rs = component.redstone
  7.  
  8. local tp_utils = {}
  9.  
  10. function tp_utils.first_of(stacks, pred)
  11. for slot = 1, stacks.count() do
  12. if pred(slot, stacks[slot]) then return slot, stacks[slot] end
  13. end
  14. return -1, nil
  15. end
  16.  
  17. function tp_utils.all(stacks, pred)
  18. local ret = {}
  19. for slot = 1, stacks.count() do
  20. if pred(slot, stacks[slot]) then table.insert(ret, table.pack(slot, stacks[slot])) end
  21. end
  22. return ret
  23. end
  24.  
  25. function tp_utils.is_any(stacks, pred)
  26. return select(2, tp_utils.first_of(stacks, pred)) ~= nil
  27. end
  28.  
  29. function tp_utils.are_all(stacks, pred)
  30. return not tp_utils.is_any(stacks, function(slot, stack) return not pred(slot, stack) end)
  31. end
  32.  
  33. function tp_utils.is_empty(stacks)
  34. return tp_utils.are_all(stacks, function(slot, stack) return stack == nil end)
  35. end
  36.  
  37. function tp_utils.wait_for_empty_slot(tp, side)
  38. local slot = -1
  39. while slot == -1 do
  40. slot, _ = tp_utils.first_of(tp.getAllStacks(side), function(slot, stack) return stack == nil end)
  41. os.sleep(sleep_t)
  42. end
  43. return slot
  44. end
  45.  
  46. function tp_utils.transfer_all(tp, in_side, out_side, pred)
  47. local in_stacks = tp.getAllStacks(in_side)
  48. local out_slot = 1
  49. for in_slot = 1, in_stacks.count() do
  50. while tp.getStackInSlot(out_side, out_slot) ~= nil do out_slot = out_slot + 1 end
  51. 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
  52. end
  53. end
  54.  
  55. local function main()
  56. local tp = component.transposer
  57. local sys_in = sides.east
  58. local sys_out = sides.south
  59. local drop = sides.up
  60. local pers = sides.down
  61. local vacuum = sides.west
  62. local vacuum_rs = sides.back
  63. local stand_rs = sides.right
  64. while true do
  65. while tp_utils.is_empty(tp.getAllStacks(sys_in)) do os.sleep(sleep_t) end
  66. local seeds_slot = -1
  67. while seeds_slot == -1 do
  68. seeds_slot, _ = tp_utils.first_of(tp.getAllStacks(pers), function(slot, stack) return stack.label == "Seeds" end)
  69. os.sleep(sleep_t)
  70. end
  71. local water_slot = -1
  72. while water_slot == -1 do
  73. water_slot, _ = tp_utils.first_of(tp.getAllStacks(pers), function(slot, stack) return stack.label == "Water Bucket" end)
  74. os.sleep(sleep_t)
  75. end
  76. local empty_slot = nil
  77. empty_slot = tp_utils.wait_for_empty_slot(tp, drop)
  78. tp.transferItem(pers, drop, 1, seeds_slot, empty_slot)
  79. empty_slot = tp_utils.wait_for_empty_slot(tp, drop)
  80. tp.transferItem(pers, drop, 1, water_slot, empty_slot)
  81. tp_utils.transfer_all(tp, sys_in, drop, function(slot, stack) return true end)
  82. while rs.getInput(stand_rs) ~= 0.0 do os.sleep(sleep_t) end
  83. rs.setOutput(vacuum_rs, 15.0)
  84. while tp_utils.is_empty(tp.getAllStacks(vacuum)) do os.sleep(sleep_t) end
  85. os.sleep(1)
  86. tp_utils.transfer_all(tp, vacuum, sys_out)
  87. end
  88. end
  89.  
  90. main()
Advertisement
Add Comment
Please, Sign In to add comment