SHOW:
|
|
- or go back to the newest paste.
1 | - | local source = "turtle_2238" |
1 | + | local storage = peripheral.find "minecraft:ender chest" |
2 | - | local dispense_from = "minecraft:ironchest_crystal_469" |
2 | + | local monitor = peripheral.find "monitor" |
3 | - | local monitor = peripheral.wrap "monitor_2978" |
3 | + | local button = settings.get "melon.button" or "right" |
4 | - | local button = "top" |
4 | + | |
5 | local dispense_direction = settings.get "melon.dispense" or "west" | |
6 | - | local dispense_direction = "west" |
6 | + | |
7 | - | local size = peripheral.call(dispense_from, "size") |
7 | + | local to_store = "minecraft:melon" |
8 | - | local stack_size = 64 |
8 | + | |
9 | local function mon_write(...) | |
10 | monitor.setTextScale(1) | |
11 | local oldterm = term.redirect(monitor) | |
12 | term.clear() | |
13 | term.setCursorPos(1, 1) | |
14 | print "GTech AutoMelon" | |
15 | write(...) | |
16 | term.redirect(oldterm) | |
17 | end | |
18 | ||
19 | local function fill_chest() | |
20 | while true do | |
21 | local count = 0 | |
22 | - | local current_contents = peripheral.call(dispense_from, "list") |
22 | + | for slot, stack in pairs(storage.list()) do |
23 | if stack.name == to_store then | |
24 | - | local item_count = 0 |
24 | + | count = count + stack.count |
25 | - | local can_fill = true |
25 | + | |
26 | - | for slot = 1, size do |
26 | + | |
27 | - | local slot_contents = current_contents[slot] |
27 | + | mon_write(("%dx %s stored\nPress button for %dx %s"):format(count, display_name, dispense_count, display_name)) |
28 | local timer = os.startTimer(5) | |
29 | - | if slot_contents and slot_contents.count then |
29 | + | while true do |
30 | - | item_count = item_count + slot_contents.count |
30 | + | local ev, param = os.pullEvent() |
31 | if (ev == "timer" and param == timer) or ev == "refresh_storage" then break end | |
32 | - | if can_fill and (not slot_contents or slot_contents.count < stack_size) then |
32 | + | |
33 | - | print("Filling slot", slot) |
33 | + | |
34 | - | local source_contents = peripheral.call(source, "list") |
34 | + | |
35 | - | local moved |
35 | + | |
36 | - | for source_slot in pairs(source_contents) do |
36 | + | |
37 | - | moved = peripheral.call(source, "pushItems", dispense_from, source_slot, nil, slot) |
37 | + | |
38 | os.pullEvent "redstone" | |
39 | - | if moved then |
39 | + | |
40 | - | print("Moved", moved, "items") |
40 | + | local contents = storage.list() |
41 | - | else |
41 | + | |
42 | - | print("Insufficient items in source") |
42 | + | |
43 | - | can_fill = false |
43 | + | |
44 | storage.drop(slot, dispense_count, dispense_direction) | |
45 | os.queueEvent("refresh_storage") | |
46 | break | |
47 | end | |
48 | - | mon_write(("%dx %s stored\n\nPress button for %dx %s"):format(item_count, display_name, dispense_count, display_name)) |
48 | + | |
49 | - | sleep(5) |
49 | + | |
50 | end | |
51 | end | |
52 | ||
53 | parallel.waitForAll(handle_button, fill_chest) |