Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- nextDirection = 2
- barrelDirection = 0
- chestDirection = 5
- craftingDirection = 4
- sorterDirection = "bottom"
- modemDirection = "back"
- sorter = peripheral.wrap(sorterDirection)
- rednet.open(modemDirection)
- items = {} --UUID, Amount
- function split(pString, pPattern) --("A_Small_Dog", "_")
- local Table = {}
- local fpat = "(.-)" .. pPattern
- local last_end = 1
- local s, e, cap = pString:find(fpat, 1)
- while s do
- if s ~= 1 or cap ~= "" then
- table.insert(Table, cap)
- end
- last_end = e + 1
- s, e, cap = pString:find(fpat, last_end)
- end
- if last_end <= #pString then
- cap = pString:sub(last_end)
- table.insert(Table, cap)
- end
- return Table
- end
- function save(table, name)
- local file = fs.open(name, "w")
- file.write(textutils.serialize(table))
- file.close()
- end
- function load(name)
- local file = fs.open(name, "r")
- if file ~= nil then
- local data = file.readAll()
- file.close()
- return textutils.unserialize(data)
- else
- return nil
- end
- end
- function reload()
- t = load("itemsData")
- if t == nil then
- for uuid, amount in pairs(sorter.list(barrelDirection)) do
- t = {uuid, 1}
- end
- end
- items = t
- end
- function barrelContains(uuid)
- if items[1] == uuid then
- return true
- else
- return false
- end
- end
- term.setCursorPos(1,1)
- term.clear()
- term.setCursorPos(1,1)
- reload()
- while true do
- event, param1, param2, param3 = os.pullEvent()
- if event == "isort_item" then
- if barrelContains(param1) then
- sorter.sort(barrelDirection)
- items[2] = items[2] + param2
- save(items, "itemsData")
- else
- -- Check if sorter next to is empty else sleep(1)
- sorter.sort(nextDirection)
- end
- elseif event == "rednet_message" then
- print("Received Message")
- message = split(param2, " ")
- if message[1] == "inv" then
- print("Message Contains Inv")
- if message [2] == "update" then
- reload()
- elseif message[2] == "getAmount" then
- print("Message Wants Amount")
- print("In Barrel" ..items[1])
- if tonumber(message[3]) == tonumber(items[1]) then
- print("Message Has Same Item")
- rMsg = "inv replyAmount " ..message[3] .." " ..items[2]
- rednet.send(param1, rMsg)
- end
- elseif message[2] == "withdraw" then
- if tonumber(message[3]) == tonumber(items[1]) then
- amount = tonumber(message[4])
- if amount < items[2] + 1 then
- sorter.extract(barrelDirection, tonumber(message[3]), chestDirection, amount)
- items[2] = items[2] - amount
- save(items, "itemsData")
- -- Handle no enough items reply
- end
- end
- elseif message[2] == "sendToCrafter" then
- if barrelContains(tonumber(message[3])) then
- sorter.extract(0, tonumber(message[3]), craftingDirection, tonumber(message[4]))
- items[2] = items[2] - tonumber(message[4])
- save(items, "itemsData")
- rednet.broadcast("inv crafterExtract " ..message[3])
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement