Blackhome

Filter

Apr 7th, 2025 (edited)
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.40 KB | Gaming | 0 0
  1.     -- pastebin get Em2sZPSF Filter
  2.    
  3.     local TASK_ID_PATH = "/task_id.txt"
  4.     local DISK_NAME = "Incoming Task"
  5.  
  6.     local strItemName = nil
  7.     local strDisplayName = nil
  8.     local numItems = nil
  9.     local limitStack = 64
  10.  
  11.     local DISPLAYNAME_EXCEPTIONS = {
  12.         ["minecraft:quartz"] = "Nether Quartz",
  13.         ["minecraft:dragon_breath"] = "Dragon's Breath",
  14.         ["minecraft:porkchop"] = "Raw Porkchop",
  15.         ["minecraft:cod"] = "Raw Cod",
  16.         ["minecraft:chicken"] = "Raw Chicken",
  17.         ["minecraft:copper_block"] = "Block of Copper",
  18.         ["minecraft:raw_copper_block"] = "Block of Raw Copper",
  19.         ["minecraft:slime_ball"] = "Slimeball",
  20.         ["minecraft:amethyst_block"] = "Block of Amethyst",
  21.         ["minecraft:cooked_beef"] = "Steak",
  22.         ["minecraft:redstone"] = "Redstone Dust",
  23.         ["minecraft:redstone_block"] = "Block of Redstone",
  24.         ["minecraft:lapis_block"] = "Block of Lapis Lazuli",
  25.         ["minecraft:raw_iron_block"] = "Block of Raw Iron",
  26.         ["minecraft:diamond_block"] = "Block of Diamond",
  27.         ["minecraft:raw_gold_block"] = "Block of Raw Gold",
  28.         -- Füge weitere Ausnahmen hier hinzu
  29.     }
  30.  
  31.     local function isDefaultDisplayName(item)
  32.         if not item or not item.name or not item.displayName then
  33.             return false
  34.         end
  35.  
  36.         -- Prüfe auf Ausnahmeliste
  37.         local exception = DISPLAYNAME_EXCEPTIONS[item.name]
  38.         if exception then
  39.             return item.displayName == exception
  40.         end
  41.  
  42.         local id = item.name:match("^[^:]+:(.+)$") -- Teil nach dem Doppelpunkt
  43.         if not id then return false end
  44.  
  45.         -- Ersetze Unterstriche durch Leerzeichen und kapitalisiere Wörter
  46.         local function toDisplayFormat(str)
  47.             local words = {}
  48.             for word in string.gmatch(str, "[^_]+") do
  49.                 table.insert(words, word:sub(1,1):upper() .. word:sub(2))
  50.             end
  51.             return table.concat(words, " ")
  52.         end
  53.  
  54.         local expectedDisplay = toDisplayFormat(id)
  55.         return item.displayName == expectedDisplay
  56.     end
  57.  
  58.     local function getDefaultDisplayName(itemName)
  59.         if not itemName then return nil end
  60.  
  61.         -- Extrahiere den Teil nach dem Doppelpunkt (z. B. "stone_axe")
  62.         local id = itemName:match("^[^:]+:(.+)$")
  63.         if not id then return nil end
  64.  
  65.         -- Ersetze Unterstriche durch Leerzeichen und kapitalisiere jedes Wort
  66.         local words = {}
  67.         for word in string.gmatch(id, "[^_]+") do
  68.             table.insert(words, word:sub(1,1):upper() .. word:sub(2))
  69.         end
  70.  
  71.         return table.concat(words, " ")
  72.     end
  73.  
  74.     local function isMinecraftItem(item)
  75.         return item and type(item.name) == "string" and item.name:sub(1, 10) == "minecraft:"
  76.     end
  77.  
  78.  
  79.  
  80.     local function transportFirstType()
  81.         local chestFront = peripheral.wrap("front")
  82.         local chestBack = peripheral.wrap("back")
  83.         local chestTop = peripheral.wrap("top")
  84.  
  85.         strItemName = nil
  86.         strDisplayName = nil
  87.         numItems = 0
  88.         limitStack = 64
  89.  
  90.         local firstItemName = ""
  91.  
  92.         local bItemInChest = false
  93.         local cnt = 1
  94.         while cnt <= 54 do
  95.             local item = chestFront.getItemDetail(cnt)
  96.             if item then
  97.                 if (isDefaultDisplayName(item) or item.maxCount == 1) and isMinecraftItem(item) then
  98.                     firstItemName = item.name
  99.                     bItemInChest = true
  100.                     break
  101.                 else
  102.                     chestTop.pullItems("front", cnt)
  103.                 end
  104.             end
  105.             cnt = cnt + 1
  106.         end
  107.         if not bItemInChest then
  108.             return false
  109.         end
  110.         if string.len(firstItemName) > 0 then
  111.             local cnt = 1
  112.             local cnt2 = 0
  113.            
  114.             strItemName = firstItemName
  115.             strDisplayName = getDefaultDisplayName(firstItemName)
  116.  
  117.             while cnt <= 54 do
  118.                 local item = chestFront.getItemDetail(cnt)
  119.                 if item then
  120.                     if firstItemName == item.name then
  121.                         if isDefaultDisplayName(item) or item.maxCount == 1 then
  122.                             numItems = numItems + item.count
  123.                             limitStack = item.maxCount
  124.                             chestBack.pullItems("front", cnt)
  125.                             cnt2 = cnt2 + 1
  126.                         else
  127.                             chestTop.pullItems("front", cnt)
  128.                         end
  129.                     end
  130.                     if cnt2 >= 16 then
  131.                         break
  132.                     end
  133.                 end
  134.                 cnt = cnt + 1
  135.             end
  136.         end
  137.     end
  138.  
  139.     local function chestEmpty(chest)
  140.         for slot, item in pairs(chest.list()) do
  141.             return false
  142.         end
  143.         return true
  144.     end
  145.  
  146.     local function getTaskList(path)
  147.         if not fs.exists(path) then return {} end
  148.         local file = fs.open(path, "r")
  149.         local data = textutils.unserialize(file.readAll())
  150.         file.close()
  151.         return data or {}
  152.     end
  153.  
  154.     local function saveTaskList(path, taskList)
  155.         local file = fs.open(path, "w")
  156.         file.write(textutils.serialize(taskList))
  157.         file.close()
  158.     end
  159.  
  160.     local function addTaskToList(path, task)
  161.         local tasks = getTaskList(path)
  162.         table.insert(tasks, task)
  163.         saveTaskList(path, tasks)
  164.     end
  165.  
  166.  
  167.     local function getDiskByLabel(label)
  168.         for _, side in ipairs(peripheral.getNames()) do
  169.             if peripheral.getType(side) == "drive" then
  170.                 local disk = peripheral.wrap(side)
  171.                 if disk.getDiskLabel() == label then
  172.                     return disk, disk.getMountPath()
  173.                 end
  174.             end
  175.         end
  176.         return nil, nil
  177.     end
  178.  
  179.     -- Save a task (itemName, itemCount, stackLimit) to floppy disk
  180.     local function saveTaskToDisk(itemName, itemCount, stackLimit, displayName)
  181.         local disk, path = getDiskByLabel("Incoming Task")
  182.  
  183.         if not path then
  184.             error("No disk detected under the computer!")
  185.             return false
  186.         end
  187.  
  188.         local fullPath = fs.combine(path, "task_list.txt")
  189.         local task = {
  190.             taskType = "store_items",
  191.             itemName = itemName,
  192.             itemDisplayName = displayName,
  193.             itemCount = itemCount,
  194.             itemStackSize = stackLimit
  195.         }
  196.         addTaskToList(fullPath, task)
  197.     end
  198.  
  199.     -- Check if there are no task files currently on the disk (i.e., the slot is free)
  200.     local function isTaskSlotFree()
  201.         local disk, path = getDiskByLabel("Incoming Task")
  202.  
  203.         if not path then
  204.             error("No disk detected under the computer!")
  205.             return false
  206.         end
  207.  
  208.         local fullPath = fs.combine(path, "task_list.txt")
  209.         local taskList = getTaskList(fullPath)
  210.  
  211.         if #taskList == 0 then
  212.             return true
  213.         end
  214.         return false
  215.     end
  216.  
  217.  
  218.     while true do
  219.         if isTaskSlotFree() and chestEmpty(peripheral.wrap("back")) then
  220.             transportFirstType()
  221.             if strItemName and numItems and strDisplayName then
  222.                 saveTaskToDisk(strItemName, numItems, limitStack, strDisplayName)
  223.             end
  224.         else
  225.             sleep(0.5)
  226.         end
  227.     end
Advertisement
Add Comment
Please, Sign In to add comment