Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Peripherien erkennen
- local meBridge = peripheral.wrap("right") -- meBridge ist rechts vom Computer
- local colonyIntegrator = peripheral.wrap("top") -- Colony Integrator ist oben auf dem Computer
- local monitor = peripheral.find("monitor")
- local chest = peripheral.wrap("minecraft:chest_0") -- Truhe ist mit dem Namen minecraft:chest_0 verbunden
- -- Überprüfen, ob die Peripherien erkannt wurden
- if not meBridge then
- print("ME Bridge nicht gefunden!")
- return
- end
- if not colonyIntegrator then
- print("Colony Integrator nicht gefunden!")
- return
- end
- if not monitor then
- print("Monitor nicht gefunden!")
- return
- end
- if not chest then
- print("Truhe nicht gefunden!")
- return
- end
- -- Monitor konfigurieren
- monitor.setTextScale(0.5)
- monitor.clear()
- monitor.setCursorPos(1, 1)
- -- Funktion zum Bereinigen der Item-Namen und Umwandeln in Lowercase
- function cleanItemName(name)
- -- Entfernt führende Leerzeichen, Ziffern, Bindestriche und weitere Zahlen
- -- Ersetzt Unterstriche durch Leerzeichen
- return string.lower(name:gsub("^%s*%d*%s*-?%d*%s*", ""):gsub("_", " "))
- end
- -- Funktion zum Überprüfen, ob ein Item von der Liste ausgeschlossen werden soll
- function isExcludedItem(itemName)
- local excludedItems = {"helmet", "chestplate", "leggings", "boots", "smeltableOre", "compostable"}
- for _, excluded in ipairs(excludedItems) do
- if string.find(itemName, excluded) then
- return true
- end
- end
- return false
- end
- -- Funktion zum Abrufen und Bereinigen der Item-Namen
- function getItemsTable()
- local items = meBridge.listItems()
- local itemsTable = {}
- for _, item in ipairs(items) do
- local fullName = item["name"]
- local simpleName = cleanItemName(fullName:match(":(.*)"))
- itemsTable[simpleName] = {fullName = fullName, amount = item["amount"]}
- end
- return itemsTable
- end
- -- Funktion zum Speichern der Hilfstabelle in einer Datei und deren Erweiterung mit neuen Items
- function saveItemsTableToFile(filename, itemsTable)
- local existingItems = {}
- -- Hilfstabelle einlesen, falls sie existiert
- if fs.exists(filename) then
- local file = fs.open(filename, "r")
- if file then
- local line = file.readLine()
- while line do
- local fullName, simpleName = string.match(line, "([^,]+), ([^,]+)")
- if fullName and simpleName then
- existingItems[simpleName] = {fullName = fullName}
- end
- line = file.readLine()
- end
- file.close()
- end
- end
- -- Neue Items zur Hilfstabelle hinzufügen
- for simpleName, data in pairs(itemsTable) do
- if not existingItems[simpleName] then
- existingItems[simpleName] = {fullName = data.fullName}
- end
- end
- -- Hilfstabelle in die Datei schreiben
- local file = fs.open(filename, "w")
- if not file then
- print("Fehler beim Öffnen der Datei: " .. filename)
- return
- end
- file.writeLine("Full Name, Simple Name")
- for simpleName, data in pairs(existingItems) do
- file.writeLine(data.fullName .. ", " .. simpleName)
- end
- file.close()
- print("Hilfstabelle gespeichert in Datei: " .. filename)
- end
- -- Funktion zum Laden der Hilfstabelle aus einer Datei
- function loadItemsTableFromFile(filename)
- local itemsTable = {}
- if fs.exists(filename) then
- local file = fs.open(filename, "r")
- if file then
- local line = file.readLine() -- skip header line
- line = file.readLine()
- while line do
- local fullName, simpleName = string.match(line, "([^,]+), ([^,]+)")
- if fullName and simpleName then
- itemsTable[simpleName] = {fullName = fullName}
- end
- line = file.readLine()
- end
- file.close()
- end
- end
- return itemsTable
- end
- -- Funktion zum Überprüfen der Autocrafting-Fähigkeit im ME-System
- function isAutocraftable(itemName)
- local craftables = meBridge.listCraftableItems()
- for _, item in ipairs(craftables) do
- -- print (item["name"])
- if item["name"] == itemName then
- return true
- end
- end
- return false
- end
- -- Funktion zum Abrufen der Crafting-CPUs
- function getCraftingCPUs()
- local cpus = meBridge.getCraftingCPUs()
- local freeCPUs = {}
- local busyCPUs = {}
- for i, cpu in ipairs(cpus) do
- local cpuID = "CPU #" .. i
- if cpu.isBusy == false then
- table.insert(freeCPUs, {id = cpuID, storage = cpu.storage})
- else
- table.insert(busyCPUs, {id = cpuID, storage = cpu.storage})
- end
- end
- return freeCPUs, busyCPUs
- end
- -- Funktion zum Starten des Autocrafting
- function startAutocrafting(itemName, count)
- print("Starte Autocrafting für Item: " .. itemName .. " Menge: " .. count)
- local craftedItem = {name = itemName, count = count}
- local success, err = pcall(function()
- meBridge.craftItem(craftedItem)
- end)
- if not success then
- print("Fehler beim Starten des Autocraftings: " .. err)
- end
- end
- -- Funktion zum Überprüfen, ob ein Item bereits gecraftet wird
- function isItemBeingCrafted(itemName)
- local success, isCrafting = pcall(function()
- local craftingItem = {name = itemName}
- return meBridge.isItemCrafting(craftingItem)
- end)
- if success then
- print("Crafting-Status für " .. itemName .. ": " .. tostring(isCrafting))
- return isCrafting
- else
- print("Fehler beim Überprüfen des Crafting-Status für " .. itemName)
- return false
- end
- end
- -- Funktion zum Exportieren von Items in die Kiste
- function exportItemToChest(itemName, count)
- print("Exportiere Item:", itemName, "Menge:", count)
- local success, err = pcall(function()
- meBridge.exportItem({name = itemName, count = count}, "back")
- end)
- if not success then
- print("Fehler beim Exportieren des Items: " .. err)
- end
- end
- -- Funktion zum Überprüfen der Anfragen im Colony Integrator
- function checkRequests()
- local requests
- local status, err = pcall(function()
- requests = colonyIntegrator.getRequests()
- end)
- if not status then
- print("Fehler beim Abrufen der Anfragen: " .. err)
- return {}
- end
- if not requests then
- print("Keine Anfragen gefunden oder Fehler beim Abrufen der Anfragen.")
- return {}
- end
- return requests
- end
- -- Funktion zum Überprüfen der Anfragen und Verfügbarkeit der Items
- function displayRequestsAndAvailability()
- monitor.clear()
- monitor.setCursorPos(1, 1)
- monitor.write("Warten auf neue Abfrage")
- sleep(2)
- monitor.clear()
- monitor.setCursorPos(1, 1)
- -- Hilfstabelle aktualisieren
- local itemsTableNew = getItemsTable()
- saveItemsTableToFile("/temp/items_table.csv", itemsTableNew)
- local loadedItemsTable = loadItemsTableFromFile("/temp/items_table.csv")
- local requestsList = checkRequests()
- if #requestsList == 0 then
- monitor.write("Keine offenen Anfragen")
- else
- local lines = {}
- local freeCPUs, busyCPUs = getCraftingCPUs()
- for _, request in ipairs(requestsList) do
- local cleanedItemName = cleanItemName(request.name)
- if not isExcludedItem(cleanedItemName) then
- print("Überprüfe Item: " .. cleanedItemName)
- local itemDataHelp = loadedItemsTable[cleanedItemName]
- local itemDataME = getItemsTable()
- local fullItemName = itemDataHelp and itemDataHelp.fullName
- local available = false
- if fullItemName then
- local meItemData = itemDataME[cleanedItemName]
- available = meItemData and meItemData.amount >= request.count
- end
- local color
- -- print(fullItemName)
- if available then
- color = colors.green
- exportItemToChest(fullItemName, request.count)
- elseif isAutocraftable(fullItemName) then
- print("Autocrafting für " .. fullItemName)
- local neededAmount = request.count - (meItemData and meItemData.amount or 0)
- if neededAmount > 0 and #freeCPUs > 0 and not isItemBeingCrafted(fullItemName) then
- print("meItemName: " .. (fullItemName or "nil") .. ", count: " .. neededAmount)
- startAutocrafting(fullItemName or cleanedItemName, neededAmount)
- color = colors.blue
- else
- color = colors.red
- end
- else
- color = colors.red
- end
- table.insert(lines, {text = cleanedItemName .. " (" .. request.count .. ")", color = color})
- -- else print("Item " .. cleanedItemName .. " is excluded")
- end
- end
- -- Aktualisiere die Listen der freien und beschäftigten Autocrafting-CPUs
- freeCPUs, busyCPUs = getCraftingCPUs()
- table.insert(lines, {text = "Freie Autocrafting-CPUs:", color = colors.yellow})
- for _, cpu in ipairs(freeCPUs) do
- table.insert(lines, {text = "CPU " .. cpu.id .. " (Speicher: " .. cpu.storage .. ")", color = colors.white})
- end
- table.insert(lines, {text = "Beschäftigte Autocrafting-CPUs:", color = colors.yellow})
- for _, cpu in ipairs(busyCPUs) do
- table.insert(lines, {text = "CPU " .. cpu.id .. " (Speicher: " .. cpu.storage .. ")", color = colors.white})
- end
- for _, line in ipairs(lines) do
- monitor.setTextColor(line.color)
- monitor.write(line.text)
- monitor.setCursorPos(1, select(2, monitor.getCursorPos()) + 1)
- end
- monitor.setTextColor(colors.white)
- end
- end
- -- Countdown-Funktion
- function countdown(seconds)
- local width, height = monitor.getSize()
- local y = height
- for i = seconds, 1, -1 do
- monitor.setCursorPos(1, y)
- monitor.clearLine()
- monitor.setTextColor(colors.blue)
- monitor.write("Nächste Abfrage in: " .. i .. " Sekunden")
- monitor.setTextColor(colors.white)
- sleep(1)
- end
- end
- -- Hauptprogramm
- while true do
- displayRequestsAndAvailability()
- countdown(60) -- Countdown bis zur nächsten Überprüfung
- end
Advertisement
Add Comment
Please, Sign In to add comment