chico0991 icon

Graben

chico0991 | 09/02/25 11:03:15 AM UTC (Edited) | 0 ⭐ | 350 👁️ | Never ⏰ | [Minecarft Computercraft]
Lua |

9.89 KB

|

Gaming

|

0 👍

/

0 👎

-- Einstellungen für Graben-Dimensionen
local diggingLength = 10  -- Standard-Laenge des Grabens
local diggingWidth = 1    -- Standard-Breite des Grabens
local diggingDepth = 1    -- Standard-Tiefe des Grabens
local refuelAutomatically = true  -- Treibstoff automatisch auffuellen
local autoDeposit = true  -- Items automatisch ablegen
local digDirection = "forward"  -- Standard Grabrichtung (forward, down, up, back)
local currentLanguage = "de"  -- Standard-Sprache Deutsch
local chestBlockNames = {"minecraft:chest", "sophisticatedstorage:storage"} -- Kisten von Sophisticated Storage
local currentChoice = 1  -- Aktuelle Auswahl im Menü
local menuOptions = {"Start", "Einstellungen", "Sprache", "Beenden"}  -- Menü-Optionen
local directions = {"forward", "back", "up", "down"}
local directionNames = {"Vorwaerts", "Rueckwaerts", "Nach Oben", "Nach Unten"}
 
-- Variablen zur Positionsspeicherung
local position = {x = 0, y = 0, z = 0}
local startFacing = "forward"
 
-- Funktion zum Finden eines Wertes in einer Tabelle
function tableFind(tbl, value)
    for i, v in ipairs(tbl) do
        if v == value then
            return i
        end
    end
    return nil
end
 
-- Funktion zum Anzeigen des Menüs
function printMenu()
    term.clear()
    term.setCursorPos(1, 1)
    print("Bitte waehle eine Option:")
 
    -- Anzeige des Menüs mit Pfeiltasten-Navigation
    for i, option in ipairs(menuOptions) do
        if i == currentChoice then
            term.setBackgroundColor(colors.gray)
            term.setTextColor(colors.white)
        else
            term.setBackgroundColor(colors.white)
            term.setTextColor(colors.black)
        end
        print(option)
    end
end
 
-- Funktion zur Auswahl der Grabrichtung
function setDirection()
    clearScreen()
    print("Waehle eine Richtung:")
    print("1. Vorwaerts")
    print("2. Rueckwaerts")
    print("3. Nach Oben")
    print("4. Nach Unten")
    local choice = read()
    if choice == "1" then
        digDirection = "forward"
    elseif choice == "2" then
        digDirection = "back"
    elseif choice == "3" then
        digDirection = "up"
    elseif choice == "4" then
        digDirection = "down"
    end
end
 
-- Funktion zum Löschen des Bildschirms
function clearScreen()
    term.clear()
    term.setCursorPos(1, 1)
end
 
-- Funktion zum Navigieren durch das Menü mit Pfeiltasten
function navigateMenu()
    local event, key = os.pullEvent("key")  -- Auf Tastatureingaben warten
    if key == keys.up then
        currentChoice = currentChoice - 1
        if currentChoice < 1 then
            currentChoice = #menuOptions
        end
    elseif key == keys.down then
        currentChoice = currentChoice + 1
        if currentChoice > #menuOptions then
            currentChoice = 1
        end
    elseif key == keys.enter then
        executeMenuOption(currentChoice)
    end
end
 
-- Funktion zur Ausführung der ausgewählten Option
function executeMenuOption(choice)
    if choice == 1 then
        startMining()
    elseif choice == 2 then
        settingsMenu()
    elseif choice == 3 then
        setLanguage()
    elseif choice == 4 then
        print("Programm wird beendet.")
        isRunning = false
    end
end
 
-- Menü zur Sprachwahl
function setLanguage()
    clearScreen()
    print("Waehle eine Sprache:")
    print("1. Deutsch")
    print("2. Englisch")
    local choice = read()
    if choice == "1" then
        currentLanguage = "de"
    elseif choice == "2" then
        currentLanguage = "en"
    end
end
 
-- Einstellungen-Menü für Graben
function settingsMenu()
    clearScreen()
    print("Einstellungen:")
    print("1. Laenge des Grabens: " .. diggingLength)
    print("2. Breite des Grabens: " .. diggingWidth)
    print("3. Tiefe des Grabens: " .. diggingDepth)
    print("4. Automatisches Auftanken: " .. (refuelAutomatically and "Aktiviert" or "Deaktiviert"))
    print("5. Automatisches Ablegen: " .. (autoDeposit and "Aktiviert" or "Deaktiviert"))
    print("6. Grabrichtung: " .. directionNames[tableFind(directions, digDirection)])
    print("7. Zurueck")
    
    local choice = read()
    if choice == "1" then
        print("Neue Laenge:")
        diggingLength = tonumber(read())
    elseif choice == "2" then
        print("Neue Breite:")
        diggingWidth = tonumber(read())
    elseif choice == "3" then
        print("Neue Tiefe:")
        diggingDepth = tonumber(read())
    elseif choice == "4" then
        refuelAutomatically = not refuelAutomatically
    elseif choice == "5" then
        autoDeposit = not autoDeposit
    elseif choice == "6" then
        setDirection()
    elseif choice == "7" then
        return
    end
    settingsMenu()
end
 
-- Funktion zum Auffüllen des Treibstoffs
function refuelIfNeeded()
    -- Prüfen, ob der Treibstoff zu niedrig ist
    if turtle.getFuelLevel() < 100 then
        print("Treibstoff ist niedrig, versuche zu tanken...")
        if not turtle.refuel(1) then  -- 1 bedeutet, dass 1 Treibstoffblock verwendet wird
            print("Kein Treibstoff gefunden! Bitte fügen Sie Treibstoff hinzu.")
            return false  -- Kein Treibstoff gefunden, beenden
        end
        print("Treibstoff wurde aufgefüllt!")
    end
    return true  -- Treibstoff war ausreichend oder erfolgreich aufgefüllt
end
 
-- Graben-Prozess, bei dem die Turtle das Loch in die festgelegte Richtung graebt
function startMining()
    -- Speichern der Startposition
    position.x, position.y, position.z = 0, 0, 0
    startFacing = "forward"
 
    clearScreen()
    print("Mining gestartet!")
    
    for depth = 1, diggingDepth do
        for width = 1, diggingWidth do
            for length = 1, diggingLength do
                -- Automatisches Auffüllen von Treibstoff, wenn aktiviert
                if refuelAutomatically then
                    if not refuelIfNeeded() then
                        return  -- Beenden, wenn kein Treibstoff gefunden werden kann
                    end
                end
                
                -- Automatisches Ablegen, wenn aktiviert
                if autoDeposit then
                    autoDepositItems()
                end
 
                -- Graben je nach gewaelter Richtung
                if digDirection == "forward" then
                    turtle.dig()
                    turtle.forward()
                    position.x = position.x + 1
                elseif digDirection == "down" then
                    turtle.digDown()
                    turtle.down()
                    position.y = position.y - 1
                elseif digDirection == "up" then
                    turtle.digUp()
                    turtle.up()
                    position.y = position.y + 1
                elseif digDirection == "back" then
                    turtle.digBack()
                    turtle.back()
                    position.x = position.x - 1
                end
 
                -- Wenn Inventar voll ist, zurück zum Startpunkt
                if isInventoryFull() then
                    print("Inventar voll. Zurueck zum Start...")
                    returnToStart()
                    autoDepositItems()
                end
            end
        end
    end
    print("Mining abgeschlossen!")
end
 
-- Funktion zum Zurückfahren zum Startpunkt
function returnToStart()
    -- Berechnung der Rückfahrt zur Startposition
    while position.x ~= 0 or position.y ~= 0 or position.z ~= 0 do
        if position.x > 0 then
            turtle.back()
            position.x = position.x - 1
        elseif position.x < 0 then
            turtle.forward()
            position.x = position.x + 1
        end
        
        if position.y > 0 then
            turtle.down()
            position.y = position.y - 1
        elseif position.y < 0 then
            turtle.up()
            position.y = position.y + 1
        end
    end
    turtle.turnLeft()  -- Wir nehmen an, dass die Turtle nach links drehen muss, um wieder zur Startausrichtung zu kommen
    turtle.forward()
end
 
-- Überprüft, ob das Inventar voll ist
function isInventoryFull()
    for i = 1, 16 do
        if turtle.getItemCount(i) == 0 then
            return false
        end
    end
    return true
end
 
-- Funktion für das automatische Ablegen von Items
function autoDepositItems()
    local success, data = turtle.inspect()
    if success and isChestValid(data.name) then
        print("Kiste vor der Turtle gefunden! Items werden abgelegt...")
        for i = 1, 16 do
            local item = turtle.getItemDetail(i)
            if item then
                turtle.select(i)
                turtle.drop()
            end
        end
        return true
    end
 
    -- Kisten auch oben oder unten finden
    local successUp, dataUp = turtle.inspectUp()
    local successDown, dataDown = turtle.inspectDown()
    if successUp and isChestValid(dataUp.name) then
        print("Kiste oben gefunden! Items werden abgelegt...")
        for i = 1, 16 do
            local item = turtle.getItemDetail(i)
            if item then
                turtle.select(i)
                turtle.dropUp()
            end
        end
        return true
    elseif successDown and isChestValid(dataDown.name) then
        print("Kiste unten gefunden! Items werden abgelegt...")
        for i = 1, 16 do
            local item = turtle.getItemDetail(i)
            if item then
                turtle.select(i)
                turtle.dropDown()
            end
        end
        return true
    end
    return false
end
 
-- Prüft, ob der Block eine Kiste ist
function isChestValid(name)
    for _, chestName in ipairs(chestBlockNames) do
        if name == chestName then
            return true
        end
    end
    return false
end
 
-- Hauptschleife
while true do
    printMenu()
    navigateMenu()
end
 

Comments