Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- chest = peripheral.wrap("bottom")
- cur_lvl = 0
- cur_dir = 0
- function save(t, n)
- local file = fs.open(n, "w")
- file.write(textutils.serialize(t))
- file.close()
- end
- function load(n)
- local file = fs.open(n, "r")
- local data = file.readAll()
- file.close()
- return textutils.unserialize(data)
- end
- function slice(tbl, first, last)
- local sliced = {}
- for i = first, last do
- table.insert(sliced, tbl[i])
- end
- return sliced
- end
- function equals(item1, item2)
- check1 = item1.id == item2.id and item1.dmg == item2.dmg
- check2 = item1.raw == item2.raw and item1.display == item2.display
- return check1 and check2
- end
- function contains(newItem)
- for n, item in pairs(items) do
- if equals(item, newItem) then
- return n
- end
- end
- return 0
- end
- function next_position()
- pos = {}
- pos.lvl = math.floor(#items / 4) + 1
- pos.dir = #items % 4
- return pos
- end
- function register_item(item)
- item.full = item.id..item.dmg..item.raw..item.display
- item.pos = next_position()
- item.qty = 0
- table.insert(items, item)
- save(items, "items")
- end
- function to_item(stack)
- item = {}
- item.id = stack.basic().id
- item.dmg = stack.basic().dmg
- item.raw = stack.basic().raw_name
- item.display = stack.basic().display_name
- n = contains(item)
- if n == 0 then
- register_item(item)
- n = #items
- end
- return items[n]
- end
- function go_to(pos)
- while cur_lvl > pos.lvl do
- turtle.down()
- cur_lvl = cur_lvl - 1
- end
- while cur_lvl < pos.lvl do
- turtle.up()
- cur_lvl = cur_lvl + 1
- end
- while cur_dir ~= pos.dir do
- turtle.turnRight()
- cur_dir = (cur_dir + 1) % 4
- end
- end
- function store(item)
- n = contains(item)
- start_amt = turtle.getItemCount()
- turtle.drop()
- items[n].qty = items[n].qty + start_amt - turtle.getItemCount()
- end
- function store_items(to_store)
- for i, item in pairs(to_store) do
- turtle.select(i)
- go_to(item.pos)
- store(item)
- end
- save(items, "items")
- end
- function clear_inv()
- for i=1, 16 do
- turtle.select(i)
- turtle.drop()
- end
- turtle.select(1)
- end
- function receive_items()
- chest.condenseItems()
- stacks = slice(chest.getAllStacks(), 1, 16)
- to_store = {}
- for _, stack in pairs(stacks) do
- if turtle.suckDown() then
- item = to_item(stack)
- table.insert(to_store, item)
- end
- end
- store_items(to_store)
- go_to({lvl=0,dir=0})
- clear_inv()
- end
- items = load("items")
- while true do
- cmd = io.read()
- if cmd == ">" then
- while #chest.getAllStacks() > 0 do
- receive_items()
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement