Advertisement
Lanzr

enchantBroswer

Nov 14th, 2023 (edited)
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.90 KB | None | 0 0
  1. local sc = peripheral.find("sophisticatedstorage:controller")
  2. local sto = peripheral.find("sophisticatedstorage:barrel")
  3. local scSide = "left"
  4. local stoSide = "right"
  5.  
  6. local mw = 51
  7. local mh = 16
  8.  
  9. local topBar = window.create(term.current(),1 ,1 ,mw,1)
  10. local win = window.create(term.current(), 1,2,mw,mh)
  11.  
  12. local pageIndex = 0
  13. local inPageIndex = 0
  14. local pageCount = 0
  15. local itemCount = 0
  16. local winNormColor = {
  17.     font = colors.black,
  18.     bg = colors.lime
  19. }
  20.  
  21. local winFocusColor = {
  22.     font = colors.gray,
  23.     bg = colors.pink
  24. }
  25.  
  26. topBar.setBackgroundColor(colors.orange)
  27. topBar.setTextColor(colors.white)
  28. win.setBackgroundColor(winNormColor.bg)
  29. win.setTextColor(winNormColor.font)
  30.  
  31. local nList = {}
  32.  
  33.  
  34. local function paraseCMD()
  35.  
  36. end
  37.  
  38. local function renewTopBar()
  39.     local str = string.format("%3d/%3d      size:%d",pageIndex,pageCount,itemCount)
  40.     topBar.clear()
  41.     topBar.setCursorPos(1,1)
  42.     topBar.write(str)
  43. end
  44.  
  45. -- index, name
  46. local winList = {}
  47.  
  48. local function renewWindow()
  49.     win.clear()
  50.     local s = 0
  51.     for i,j in pairs(winList) do
  52.         win.setCursorPos(1,i)
  53.         if(i == inPageIndex) then
  54.             win.setBackgroundColor(winFocusColor.bg)
  55.             win.setTextColor(winFocusColor.font)
  56.             win.clearLine()
  57.         else
  58.             win.setBackgroundColor(winNormColor.bg)
  59.             win.setTextColor(winNormColor.font)
  60.         end
  61.  
  62.         win.write(string.sub(j[2],s))
  63.     end
  64.     win.setBackgroundColor(winNormColor.bg)
  65.     win.setTextColor(winNormColor.font)
  66. end
  67. local function re_scan()
  68.     tList = sc.list()
  69.     -- for i,j in pairs(tList) do
  70.     --     table.insert(nList,{i, j.name})
  71.     -- end
  72.     local item = nil
  73.     local enchants = {}
  74.     for i,j in pairs(tList) do
  75.         if(string.match(j.name,"minecraft:enchanted_book")~=nil) then
  76.             item = sc.getItemDetail(i)
  77.             enchants = item.enchantments
  78.             for o,k in pairs(enchants) do
  79.                 table.insert(nList,{i, k.displayName})
  80.             end
  81.         end
  82.     end
  83.     -- for i,j in pairs(nList) do
  84.     --     if(j[2] == nil ) then
  85.     --         table.remove(nList,i)
  86.     --     end
  87.     -- end
  88.     itemCount = table.getn(nList)
  89.     pageCount = itemCount / mh + 1
  90.     pageIndex = 1
  91.     inPageIndex = 1
  92. end
  93.  
  94. local function sub_scan()
  95.    
  96. end
  97.  
  98. local function pageChange()
  99.     winList = {}
  100.     local listSize = 0
  101.     if (pageIndex == pageCount) then
  102.         listSize = itemCount % mh
  103.     else listSize = mh end
  104.     local pos = pageIndex * (mh-1)
  105.     for i=1,listSize,1 do
  106.         repeat
  107.             pos = pos + 1
  108.             if(listSize ~= mh) then
  109.                 break
  110.             end
  111.         until(nList[pos]~=nil)
  112.         table.insert(winList,{nList[pos][1], nList[pos][2]})
  113.     end
  114. end
  115.  
  116. local function List_move()
  117.     local pos = winList[inPageIndex][1]
  118.     sc.pushItems(stoSide,pos)
  119.     for i,j in pairs(nList) do
  120.         if(j[1] == pos) then
  121.             table.remove(nList,i)
  122.         end
  123.     end
  124.     -- table.remove(nList,pageIndex * mh + inPageIndex)
  125.     itemCount = table.getn(nList)
  126.     pageCount = (itemCount - itemCount % mh) / mh -1
  127.     if(pageIndex >= pageCount) then
  128.         pageIndex = pageCount
  129.         if(inPageIndex <= itemCount % mh) then
  130.             inPageIndex = itemCount % mh
  131.         end
  132.     end
  133.     pageChange()
  134.     renewTopBar()
  135.     renewWindow()
  136. end
  137.  
  138. local function init()
  139.     re_scan()
  140.     -- gen winList
  141.     pageChange()
  142.  
  143.     renewTopBar()
  144.     renewWindow()
  145. end
  146.  
  147. local function mainloop()
  148. term.clear()
  149. init()
  150. while true do
  151.     term.setCursorPos(1,18)
  152.     term.setTextColour(colors.white)
  153.     local cmd = io.read()
  154.     term.clearLine()
  155.     term.write(winList[inPageIndex][1])
  156.     term.write(winList[inPageIndex][2])
  157.     List_move()
  158.    
  159. end
  160. end
  161. local keyMap = {
  162.     ["end"]=(function ()
  163.         if(inPageIndex < mh) then
  164.             inPageIndex = inPageIndex + 1
  165.             renewWindow()
  166.         end
  167.     end),
  168.     ["home"]=(function ()
  169.         if(inPageIndex > 1) then
  170.             inPageIndex = inPageIndex - 1
  171.             renewWindow()
  172.         end
  173.     end),
  174.     ["pageUp"]=(function ()
  175.         if(pageIndex > 1) then
  176.             inPageIndex = 1
  177.             pageIndex = pageIndex - 1
  178.             pageChange()
  179.             renewTopBar()
  180.             renewWindow()
  181.         end
  182.     end),
  183.     ["pageDown"]=(function ()
  184.         if(pageIndex < pageCount) then
  185.             inPageIndex = 1
  186.             pageIndex = pageIndex + 1
  187.             pageChange()
  188.             renewTopBar()
  189.             renewWindow()
  190.         end
  191.     end),
  192. }
  193.  
  194. local function key_check()
  195. while true do
  196.     local event, key, isHeld = os.pullEvent("key")
  197.     local kvalue = keys.getName(key)
  198.     if(keyMap[kvalue]~= nil) then
  199.         keyMap[kvalue]()
  200.         term.setTextColour(colors.white)
  201.         term.setCursorPos(1,18)
  202.     end
  203. end
  204. end
  205. parallel.waitForAny(mainloop,key_check)
  206.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement