CCCPaste

62534d51b1f15

-- Robust Multi-Layer 9x9 Quarry Down to Y=-53
-- Fully auto-refuels, auto-empties, handles falling blocks, safe movement
-- Chest behind turtle for fuel and storage

local quarrySize = 9
local targetY = -53
local fuelSlot = 16
local tossGarbage = true
local MAX_ATTEMPTS = 20 -- max dig/move attempts per block

-- Track turtle's current relative Y
local currentY = 0

-- -------------------------
-- Utility Functions
-- -------------------------
local function tryRefuel()
    turtle.select(fuelSlot)
    if turtle.getFuelLevel() ~= "unlimited" and turtle.getFuelLevel() < 100 then
        turtle.suck()
        if turtle.getItemCount(fuelSlot) > 0 then turtle.refuel() end
    end
end

local function emptyInventory()
    for s=1,16 do
        turtle.select(s)
        turtle.drop()
    end
end

local function checkInventory()
    local fullSlots = 0
    for s=1,16 do
        if turtle.getItemCount(s) > 0 then
            if tossGarbage then
                local detail = turtle.getItemDetail(s)
                if detail then
                    local name = detail.name
                    if name=="minecraft:cobblestone" or name=="minecraft:stone" or name=="minecraft:dirt" or name=="minecraft:gravel" then
                        turtle.select(s)
                        turtle.drop()
                    end
                end
            end
            if turtle.getItemCount(s) > 0 then fullSlots = fullSlots + 1 end
        end
    end
    if fullSlots >= 16 then emptyInventory() end
end

-- Safe movement functions
local function safeForward()
    local attempts = 0
    while not turtle.forward() do
        turtle.dig()
        attempts = attempts + 1
        sleep(0.1)
        if attempts >= MAX_ATTEMPTS then error("Blocked forward") end
    end
end

local function safeDown()
    local attempts = 0
    while not turtle.down() do
        turtle.digDown()
        attempts = attempts + 1
        sleep(0.1)
        if attempts >= MAX_ATTEMPTS then error("Blocked down") end
    end
    currentY = currentY - 1
end

local function safeUp()
    local attempts = 0
    while not turtle.up() do
        turtle.digUp()
        attempts = attempts + 1
        sleep(0.1)
        if attempts >= MAX_ATTEMPTS then error("Blocked up") end
    end
    currentY = currentY + 1
end

-- -------------------------
-- Mine a single 9x9 layer
-- -------------------------
local function mineLayer()
    local turn = 0
    for row=1,quarrySize do
        for col=1,quarrySize-1 do
            safeForward()
            checkInventory()
            tryRefuel()
        end
        if row < quarrySize then
            if turn == 0 then
                turtle.turnRight()
                safeForward()
                turtle.turnRight()
                turn = 1
            else
                turtle.turnLeft()
                safeForward()
                turtle.turnLeft()
                turn = 0
            end
            checkInventory()
            tryRefuel()
        end
    end
end

-- -------------------------
-- Return to chest behind
-- -------------------------
local function returnToChest()
    turtle.turnLeft()
    turtle.turnLeft()
    for i=1,quarrySize-1 do safeForward() end
    turtle.turnLeft()
    turtle.turnLeft()
    emptyInventory()
end

-- -------------------------
-- Main Quarry Loop: mine down to targetY
-- -------------------------
while currentY > targetY do
    print("Mining layer at Y="..currentY)
    mineLayer()

    if currentY > targetY then
        for i=1,quarrySize-1 do safeDown() end
        turtle.turnLeft()
        turtle.turnLeft() -- face starting row for next layer
    end
end

-- Final empty and done
returnToChest()
print("All done! Mined down to Y="..targetY)