Advertisement
WhiteFire_Sondergaar

ae2shell.lua

May 5th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.17 KB | None | 0 0
  1. component = require("component")
  2. ae2 = component.me_interface
  3. term = require("term")
  4. items = {length=0}
  5. item_completions = {}
  6. filter = nil
  7.  
  8. if not term.isAvailable() then return end
  9.  
  10. function doCompletions(line)
  11.   local matches = {}
  12.  
  13.   for k,v in pairs(completions) do
  14.     if string.find(v, line) == 1 then
  15.       table.insert(matches, v)
  16.     end
  17.   end
  18.  
  19.   return matches
  20. end
  21.  
  22. function refreshNetwork()
  23.   local all_items = ae2.getAvailableItems()
  24.   items = {}
  25.   local filtered = 0
  26.  
  27.   completions = {
  28.     "list",
  29.     "quit",
  30.     "refresh",
  31.     "filter "
  32.   }
  33.   local i = 0
  34.   while(all_items[i+1]) do
  35.     i = i + 1
  36.     --if filter then
  37.       --term.write(tostring(items[i].fingerprint.id) .. " - " .. filter .. " - " .. tostring(string.find(items[i].fingerprint.id, filter)) .. "\n")
  38.     --end
  39.     if (not filter) or string.find(tostring(all_items[i].fingerprint.id), filter) then
  40.       filtered = filtered + 1
  41.       table.insert(item_completions, all_items[i].fingerprint.id .. "/" .. all_items[i].fingerprint.dmg)
  42.       table.insert(items, all_items[i])
  43.     end
  44.   end
  45.   -- items["length"] = filtered
  46.   term.write(filtered .. " items found.\n")
  47. end
  48.  
  49. completion = {}
  50. function completion.array_to_table(t, ret_val)
  51.   local ret = {}
  52.  
  53.   local i = 0
  54.   while(t[i])
  55.   do
  56.     ret_val[t[i]] = ret_val
  57.   end  
  58. end
  59.  
  60. function completion.do_completion(line, pos, menu)
  61.   local ret = {}
  62.  
  63.      
  64. end
  65.  
  66. function item_completion_list(ret_val)
  67.   return completion.array_to_table(item_completions, ret_val)
  68. end
  69.  
  70. main_menu = {
  71.   "list" = true,
  72.   "quit" = true,
  73.   "refresh" = true,
  74.   "filter" = true,
  75.   "item" = item_completion_list(true)
  76. }
  77.  
  78. function main_menu_completion(line, pos)
  79.   return completion.do_completion(line, pos, main_menu)
  80. end
  81.  
  82.  
  83. menu = {}
  84. function menu.quit(next)
  85.   term.write("Bye!\n")
  86.   return true
  87. end
  88.  
  89. function menu.refresh(next)
  90.   refreshNetwork()
  91.   return false
  92. end
  93.  
  94. function list(start, theend)
  95.   if theend == 0 then theend = #items end
  96.   if theend < 0 then theend = start - theend end
  97.   for i = start, theend do
  98.     term.write("#" .. i .. " " .. items[i].fingerprint.id .. "/" .. items[i].fingerprint.dmg .. " " .. items[i].size .. "\n")
  99.   end
  100.   term.write(start .. " - " .. theend .. " of " .. #items .. "\n")
  101.   return false
  102. end
  103.  
  104. function menu.list(next)
  105.   local start = next()
  106.   if start then start = tonumber(start) end
  107.   if not start then start = 1 end
  108.   list(start,-20)
  109.   return false
  110. end
  111.  
  112. function dump_table(t, indent)
  113.   local k, v
  114.   for k, v in pairs(t) do
  115.     term.write(indent .. k)
  116.     if type(v) == "table" then
  117.       term.write(":\n")
  118.       dump_table(v, indent .. "\t")
  119.     elseif type(v) == "function" then
  120.       term.write(" = function()\n")
  121.     else
  122.       term.write(" = " .. tostring(v) .. "\n")
  123.     end
  124.   end
  125. end
  126.  
  127. function find_item(id, dmg)
  128.   local k, v
  129.  
  130.   for k, v in pairs(items) do
  131.     if v.fingerprint.id == id and v.fingerprint.dmg == dmg then return v end
  132.   end
  133.  
  134.   return nil
  135. end
  136.  
  137. function menu.item(next)
  138.   local id, dmg = string.match(next(), "(.+)/(%d+)")
  139.   if dmg then dmg = tonumber(dmg) end
  140.  
  141.   if not (id and dmg) then
  142.     term.write("Don't understand that.")
  143.     return false
  144.   end
  145.  
  146.   local item_detail = ae2.getItemDetail({id=id, dmg=dmg}).all()
  147.   local item = find_item(id, dmg)
  148.  
  149.   if not item_detail then
  150.     term.write("I could not find that.")
  151.     return false
  152.   end
  153.  
  154.   item_detail.is_craftable = item.is_craftable
  155.   item_detail.is_fluid = item.is_fluid
  156.   item_detail.is_item = item.is_item
  157.  
  158.   dump_table(item_detail, "")
  159.  
  160.   return false    
  161. end
  162.  
  163. function menu.filter(next)
  164.  
  165.   local f = next()
  166.  
  167.   if not f then
  168.     term.write("Filter Cleared.\n")
  169.   end
  170.  
  171.   filter = f
  172.  
  173.   refreshNetwork()
  174.  
  175.   return false
  176. end
  177.  
  178. refreshNetwork()
  179.  
  180. quitting = false
  181. while not quitting do
  182.   term.write("/> ")
  183.   line = term.read({}, false, doCompletions)
  184.   term.write("\n")
  185.  
  186.   next = string.gmatch(line, "%S+")
  187.  
  188.   cmd = next()
  189.   if type(menu[cmd]) == "function" then
  190.     if menu[cmd](next) then quitting = true end
  191.   elseif type(menu[cmd]) == "table" then
  192.     assert(false, "Table handling in menus not implemented.")
  193.   else
  194.     term.write("Huh?\n")
  195.   end
  196. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement