Advertisement
MagmaLP

Enderchest-ME_Main

Dec 14th, 2023 (edited)
613
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.49 KB | None | 0 0
  1. --Dieses Programm 'startup' nennen!
  2.  
  3. sle = 0.1                   --Sleep zwischen jeder Request
  4. BundledCableSide = "back"
  5. Sensorside = "bottom"
  6. PIPE_SIDE = "right"
  7.  
  8. function ClearPages()
  9.     sleep(0.5)
  10.     rs.setOutput("back", true)
  11.     sleep(0.5)
  12.     rs.setOutput("back",false)
  13.     sleep(1)
  14. end
  15.  
  16. function RequestItems()
  17.     -- IMPLEMENTATION
  18.     function convertNBT(nbt)
  19.         local conv = {}
  20.         if (nbt == nil) then
  21.             return nil
  22.         elseif (nbt["type"] == "NBTTagCompound") or (nbt["type"] == "NBTTagList") then
  23.             for key, value in pairs(nbt["value"]) do
  24.                 conv[key] = convertNBT(value)
  25.             end
  26.         else
  27.             conv = nbt["value"]
  28.         end
  29.         return conv
  30.     end
  31.  
  32.     function getItems(pipe)
  33.         pipe.getAvailableItems()
  34.         local event, result = os.pullEvent("available_items_return")
  35.         return result
  36.     end
  37.  
  38.     -- Funktion inList anpassen, um Variablen zu verwenden
  39.     function inList(item)
  40.         local id = item.id
  41.         local dmg = item.dmg
  42.         local idKey = tostring(id)
  43.         local exists, requestAmount = false, 0
  44.  
  45.         local variantKey = idKey .. ":" .. tostring(dmg)
  46.         if REQUEST_IDS[variantKey] then
  47.             exists = true
  48.             requestAmount = REQUEST_IDS[variantKey]
  49.         end
  50.  
  51.         return exists, requestAmount
  52.     end
  53.  
  54.     -- MAIN
  55.     local pipe = peripheral.wrap(PIPE_SIDE)
  56.     for i, result in pairs(getItems(pipe)) do
  57.         local iid, amount = unpack(result)
  58.         local item = {
  59.             id = pipe.getItemID(iid),
  60.             dmg = pipe.getItemDamage(iid),
  61.             nbt = convertNBT(pipe.getNBTTagCompound(iid))
  62.         }
  63.         local exists, requestAmount = inList(item)
  64.         if exists then
  65.             pipe.makeRequest(iid, requestAmount)
  66.             --sleep(sle)
  67.         end
  68.     end
  69. end
  70.  
  71. function ladeItems(page)
  72.     local datei = fs.open("ItemsInPage" .. page, "r")  -- Datei im Lesemodus öffnen
  73.     if not datei then
  74.         print("Datei nicht gefunden, oder Inhalt nicht erstellt!")
  75.         return
  76.     end
  77.  
  78.     local items = {
  79.         ItemName = {},
  80.         ItemSize = {},
  81.         ItemID_1 = {},
  82.         ItemID_2 = {}
  83.     }
  84.  
  85.     -- Schleife durch jede Zeile der Datei
  86.     MaxItems = 0
  87.     repeat
  88.         local zeile = datei.readLine()
  89.         if zeile then
  90.             local itemName, itemSize, itemID = zeile:match("([^%-]+)%-([^%-]+)%-(.+)")
  91.             if itemName and itemSize and itemID then
  92.                 table.insert(items.ItemName, itemName)
  93.                 table.insert(items.ItemSize, tonumber(itemSize))
  94.                 table.insert(items.ItemID_1, tonumber(itemID:match("%d+")))
  95.                 table.insert(items.ItemID_2, tonumber(itemID:match(":(%d+)")))
  96.                 MaxItems = tonumber(MaxItems) + 1
  97.             else
  98.                 print("Fehlerhafte Zeile in der Datei: " .. zeile)
  99.             end
  100.         end
  101.     until not zeile
  102.  
  103.     datei:close()  -- Datei schließen
  104.  
  105.     return items
  106. end
  107.  
  108. function RequestPage()
  109.     local ItemsInPage = ladeItems(Page)  -- Lade Items aus der Page
  110.     MaxItems = tonumber(MaxItems)
  111.     for a = 1, MaxItems do
  112.         ItemID_1 = ItemsInPage.ItemID_1[a]
  113.         ItemID_2 = ItemsInPage.ItemID_2[a]
  114.         ItemSize = ItemsInPage.ItemSize[a]
  115.  
  116.         io.write(ItemsInPage.ItemName[a] .. " ")
  117.         io.write(ItemsInPage.ItemID_1[a] .. ":")
  118.         io.write(ItemsInPage.ItemID_2[a] .. " ")
  119.         io.write(ItemsInPage.ItemSize[a] .. " ")
  120.         io.write("\n")
  121.  
  122.         REQUEST_IDS = {
  123.             [tostring(ItemID_1) .. ":" .. tostring(ItemID_2)] = ItemSize,}
  124.         RequestItems()
  125.         sleep(sle)
  126.     end
  127. end
  128.  
  129. ------programm start------
  130. os.loadAPI("ocs/apis/sensor")
  131. sen = sensor.wrap(Sensorside)
  132.  
  133. while true do
  134.     s = sen.getTargets()
  135.     function getS()
  136.         for v, k  in pairs(s) do
  137.             if k.Name == "ME Wireless Access Point" then  
  138.                 target = v
  139.             end
  140.         end
  141.         return target
  142.     end
  143.  
  144.     f = getS()
  145.     s1 = sen.getTargetDetails(target)
  146.    
  147.     local Page1 = 0
  148.     local Page2 = 0
  149.     local Page3 = 0
  150.     local Page4 = 0
  151.     local Page5 = 0
  152.     local Page6 = 0
  153.     local Page7 = 0
  154.     local Page8 = 0
  155.     local Page9 = 0
  156.  
  157.     for _, item in pairs(s1.Items) do
  158.         file = fs.open("Menu-Item-1" , "r")
  159.         local MenuItem1 = file.readLine()
  160.         file.close()
  161.         if item.Name == MenuItem1 then
  162.             Page1 = item.Size -- Werte ermittels und setzen
  163.         end
  164.        
  165.         file = fs.open("Menu-Item-2" , "r")
  166.         local MenuItem2 = file.readLine()
  167.         file.close()
  168.         if item.Name == MenuItem2 then
  169.             Page2 = item.Size -- Werte ermittels und setzen
  170.         end
  171.        
  172.         file = fs.open("Menu-Item-3" , "r")
  173.         local MenuItem3 = file.readLine()
  174.         file.close()
  175.         if item.Name == MenuItem3 then
  176.             Page3 = item.Size -- Werte ermittels und setzen
  177.         end
  178.        
  179.         file = fs.open("Menu-Item-4" , "r")
  180.         local MenuItem4 = file.readLine()
  181.         file.close()
  182.         if item.Name == MenuItem4 then
  183.             Page4 = item.Size -- Werte ermittels und setzen
  184.         end
  185.        
  186.        
  187.         file = fs.open("Menu-Item-5" , "r")
  188.         local MenuItem5 = file.readLine()
  189.         file.close()
  190.         if item.Name == MenuItem5 then
  191.             Page5 = item.Size -- Werte ermittels und setzen
  192.         end
  193.        
  194.         file = fs.open("Menu-Item-6" , "r")
  195.         local MenuItem6 = file.readLine()
  196.         file.close()
  197.         if item.Name == MenuItem6 then
  198.             Page6 = item.Size -- Werte ermittels und setzen
  199.         end
  200.        
  201.         file = fs.open("Menu-Item-7" , "r")
  202.         local MenuItem7 = file.readLine()
  203.         file.close()
  204.         if item.Name == MenuItem7 then
  205.             Page7 = item.Size -- Werte ermittels und setzen
  206.         end
  207.        
  208.         file = fs.open("Menu-Item-8" , "r")
  209.         local MenuItem8 = file.readLine()
  210.         file.close()
  211.         if item.Name == MenuItem8 then
  212.             Page8 = item.Size -- Werte ermittels und setzen
  213.         end
  214.        
  215.         file = fs.open("Menu-Item-9" , "r")
  216.         local MenuItem9 = file.readLine()
  217.         file.close()
  218.         if item.Name == MenuItem9 then
  219.             Page9 = item.Size -- Werte ermittels und setzen
  220.         end
  221.        
  222.         if item.Size < 0 then
  223.             os.reboot()
  224.         end
  225.     end
  226.    
  227.     term.setCursorPos(1,1)
  228.     term.clear()
  229.     print("1: "..Page1)
  230.     print("2: "..Page2)
  231.     print("3: "..Page3)
  232.     print("4: "..Page4)
  233.     print("5: "..Page5)
  234.     print("6: "..Page6)
  235.     print("7: "..Page7)
  236.     print("8: "..Page8)
  237.     print("9: "..Page9)
  238.    
  239.     if Page1 > 1 or Page2 > 1 or Page3 > 1 or Page4 > 1 or Page5 > 1 or Page6 > 1 or Page7 > 1 or Page8 > 1 or Page9 > 1 then
  240.         os.reboot()         --reboot wenn ME-Dark Cable bugt
  241.     end
  242.    
  243.     local zeroCount = 0     --abschalten wenn mehr als 1 Menu Item entnommen wird
  244.     if Page1 == 0 then zeroCount = zeroCount + 1 end
  245.     if Page2 == 0 then zeroCount = zeroCount + 1 end
  246.     if Page3 == 0 then zeroCount = zeroCount + 1 end
  247.     if Page4 == 0 then zeroCount = zeroCount + 1 end
  248.     if Page5 == 0 then zeroCount = zeroCount + 1 end
  249.     if Page6 == 0 then zeroCount = zeroCount + 1 end
  250.     if Page7 == 0 then zeroCount = zeroCount + 1 end
  251.     if Page8 == 0 then zeroCount = zeroCount + 1 end
  252.     if Page9 == 0 then zeroCount = zeroCount + 1 end
  253.     if zeroCount >= 2 then
  254.         error("FEHLER:                                                Bitte erst die Menu Items in die erste Zeile einlegen. Dann Strg + r halten zum rebooten")
  255.     end
  256.    
  257.     reboot = 1
  258.     if Page1 < 1 or Page2 < 1 or Page3 < 1 or Page4 < 1 or Page5 < 1 or Page6 < 1 or Page7 < 1 or Page8 < 1 or Page9 < 1 then
  259.         ClearPages()  
  260.        
  261.         if Page1 < 1 then
  262.             Page = 1
  263.         elseif Page2 < 1 then
  264.             Page = 2
  265.         elseif Page3 < 1 then
  266.             Page = 3
  267.         elseif Page4 < 1 then
  268.             Page = 4
  269.         elseif Page4 < 1 then
  270.             Page = 5
  271.         elseif Page4 < 1 then
  272.             Page = 6
  273.         elseif Page4 < 1 then
  274.             Page = 7
  275.         elseif Page4 < 1 then
  276.             Page = 8
  277.         elseif Page4 < 1 then
  278.             Page = 9
  279.         end
  280.    
  281.         if Page1 < 1 or Page2 < 1 or Page3 < 1 or Page4 < 1 or Page5 < 1 or Page6 < 1 or Page7 < 1 or Page8 < 1 or Page9 < 1 then
  282.             RequestPage()
  283.             sleep(2)
  284.             reboot = 0
  285.         end
  286.     end
  287.    
  288.     if reboot == 0 then
  289.         os.reboot()
  290.     end
  291.     sleep(1)
  292. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement