Advertisement
Guest User

miningClient.lua

a guest
Aug 22nd, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.31 KB | None | 0 0
  1.  
  2. modem = require("component").modem
  3. redstone = require("component").redstone
  4. term = require("term")
  5. serialization = require("serialization")
  6. event = require("event")
  7. insertSortObj = require("insertSortObj")
  8. sides = require("sides")
  9.  
  10.  
  11. items = {}
  12.  
  13. function main()
  14.  
  15.  
  16.   on = true
  17.   _, vHeight = term.getViewport()
  18.  
  19.   event.listen("key_up", handleKeyUp)
  20.  
  21.   event.listen("touch", handleTouch)
  22.  
  23.   if modem.isOpen(30) == false then
  24.     modem.open(30)
  25.   end
  26.  
  27.   prevText = getHistory()
  28.   prevText = serialization.unserialize(prevText)
  29.  
  30.   while on do
  31.  
  32.  
  33.     _, _, _, _, signal, msg = event.pull('modem')
  34.  
  35.  
  36.     slots = serialization.unserialize(msg)
  37.  
  38.     items = collectUniqItems(slots)
  39.  
  40.     items = insertSortObj(items, "label")
  41.  
  42.     printItems(items, prevText)
  43.  
  44.  
  45.     term.write("----------")
  46.     term.setCursor(0, 0)
  47.  
  48.   end
  49.  
  50.  
  51.  
  52. end
  53.  
  54. function handleKeyUp(_, _, btn)
  55.  
  56.   if btn == 3 then
  57.  
  58.     on = false
  59.     event.ignore("key_up", handleKeyUp)
  60.     event.ignore("touch", handleTouch)
  61.   end
  62.  
  63.   if btn == 32 then
  64.  
  65.     redstone.setOutput(sides.down, 15)
  66.  
  67.     redstone.setOutput(sides.down, 0)
  68.  
  69.   end
  70.  
  71.   if btn == 115 then
  72.  
  73.     text = serialization.serialize(items)
  74.     file = io.open("logs/log_mining_" .. os.time(), "w")
  75.     file:write(text)
  76.     file:close()
  77.  
  78.     file = io.open("logs/prev_mining", "w")
  79.     file:write(text)
  80.     file:close()
  81.   end
  82.  
  83. end
  84.  
  85. function handleTouch()
  86.  
  87.   redstone.setOutput(sides.down, 15)
  88.  
  89.   redstone.setOutput(sides.down, 0)
  90.  
  91.  
  92. end
  93.  
  94. function collectUniqItems(slots)
  95.  
  96.   items = {}
  97.   results = {}
  98.  
  99.   -- make hash table
  100.   for k,v in pairs(slots) do
  101.  
  102.     if not items[v.label] then items[v.label] = 0 end
  103.  
  104.     items[v.label] = items[v.label] + v.size
  105.   end
  106.  
  107.  
  108.   -- back to obj
  109.   i = 0
  110.  
  111.   for k, v in pairs(items) do
  112.  
  113.     i = i + 1
  114.     results[i] = {label = k, size = v}
  115.   end
  116.  
  117.  
  118.   return results
  119. end
  120.  
  121. function printItems(items, prevText)
  122.   i = 0
  123.  
  124.   while i < vHeight do
  125.  
  126.     i = i + 1
  127.  
  128.     term.setCursor(1, i)
  129.     term.clearLine()
  130.  
  131.     if items[i] then
  132.       term.write(items[i].label)
  133.       term.setCursor(40, i)
  134.       term.write(items[i].size)
  135.     end
  136.  
  137.     if prevText[i] then
  138.       term.setCursor(70, i)
  139.       term.write(prevText[i].label)
  140.       term.setCursor(110, i)
  141.       term.write(prevText[i].size)
  142.     end
  143.  
  144.  
  145.   end
  146. end
  147.  
  148. function getHistory()
  149.  
  150.  
  151.   file = io.open("logs/prev_mining", "r")
  152.   text = file:read()
  153.   file:close()
  154.  
  155.   return text
  156. end
  157.  
  158.  
  159.  
  160. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement