Advertisement
akihex

mystDial

Jul 18th, 2014
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local backgroundColor = colors.blue
  2. local altBackgroundColor = colors.lightBlue
  3. local greetingOne = "active link: "
  4. --"Please choose your"
  5. local greetingTwo = "no active link"
  6. --"destination"
  7. local timerDelay = 8
  8.  
  9. -- computer front points northward
  10. local dirs = {front="north",left="east",back="south",right="west"}
  11. local dir = nil
  12.  
  13. local mon = peripheral.find("monitor")
  14.  
  15. local chest = nil
  16. local slot = nil
  17.  
  18. for i,v in pairs(rs.getSides()) do
  19.   if peripheral.getType(v) == "ender_chest" then
  20.     chest = peripheral.wrap(v)
  21.     dir = dirs[v]
  22.   elseif peripheral.getType(v) == "book_receptacle" then
  23.     slot = peripheral.wrap(v)
  24.   end
  25. end
  26.  
  27. if not chest or not dir or not slot or not mon then print("Error while trying to find chest, slot or monitor"); error() end
  28.  
  29. local chestSlot = nil
  30.  
  31. function removeActiveBook()
  32.   if slot.getStackInSlot(1) then
  33. print("remove ",chestSlot)
  34.     if chestSlot then
  35.       if slot.pushItemIntoSlot(dir,1,1,chestSlot) ~=1 then
  36.         if slot.pushItem(dir,1,1) ~= 1 then print("Error while moving book into chest"); error() end
  37.       end
  38.       chestSlot = nil
  39.     else
  40.       if slot.pushItem(dir,1,1) ~= 1 then print("Error while moving book to chest"); error() end
  41.     end
  42.   end
  43. end
  44.  
  45. removeActiveBook()
  46. sleep(1)
  47.  
  48. local nDest = 4
  49. local destTable = {}
  50. local timer = nil
  51.  
  52. function padStr(str, len)
  53.   if #str > len then do return string.sub(str,1,len) end
  54.   else do return str .. string.rep(' ', len - #str) end
  55.   end
  56. end
  57.  
  58. function waitForTouchEvent()
  59.   repeat
  60.     event, side, monX, monY = os.pullEvent() --"monitor_touch")
  61.     if event == "timer" and side == timer then
  62.       removeActiveBook()
  63.       drawUserInterface()
  64.     end
  65.   until event == "monitor_touch"
  66.   removeActiveBook()
  67.   if nDest > 0 and (monY-3 > 0) and (monY-3 <= nDest) then
  68.     chestSlot = destTable[monY - 3]
  69.     print("place ",chestSlot)
  70.     if slot.pullItem(dir,chestSlot,1) ~= 1 then chestSlot = nil; print("Error while moving book to slot") end
  71.     timer = os.startTimer(timerDelay)
  72.   end
  73. end
  74.  
  75. function drawUserInterface()
  76.   destTable = {}
  77.   local books = chest.getAllStacks()
  78.   local monX, monY = mon.getSize()
  79.   mon.setBackgroundColor(backgroundColor)  
  80.   mon.clear()
  81.   mon.setCursorPos(1,1)
  82.   local active = slot.getStackInSlot(1)
  83.   if active and active.rawName == "item.myst.linkbook" then
  84.     mon.write(greetingOne)
  85.     mon.setCursorPos(1,2)
  86.     mon.write(active.destination)
  87.   else
  88.     mon.write(greetingTwo)
  89.   end
  90.   --
  91.   --mon.write(greetingTwo)
  92.   nDest = 0
  93.   local i = 0
  94.   for n,book in pairs(books) do
  95.     if book.rawName == "item.myst.linkbook" then
  96.       i = i + 1
  97.       destTable[i] = n
  98.       mon.setCursorPos(1, i + 3)
  99.       if (i % 2 == 0) then
  100.         mon.setBackgroundColor(altBackgroundColor)
  101.       else
  102.         mon.setBackgroundColor(backgroundColor)
  103.       end
  104.       name = padStr(book.destination,monX)
  105.       mon.write(name)        
  106.     end
  107.   end
  108.   if not i then
  109.     mon.setCursorPos(1, 4)
  110.     mon.write("No Entries")
  111.   end
  112.   nDest = #destTable
  113. end
  114.  
  115. while true do
  116.   drawUserInterface()
  117.   waitForTouchEvent()
  118. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement