-- Quick Simple Quarry Script
-- Track coordinates relative to start (after 4-block offset)
local x, y, z = 0, 0, 0
local dir = 0 -- 0=forward, 1=right, 2=back, 3=left
local targetX, targetY, targetZ = 0, 0, 0
-- Prompt for dimensions
print("Enter Width (X - Right):")
targetX = tonumber(read()) or 32
print("Enter Length (Z - Forward):")
targetZ = tonumber(read()) or 32
print("Enter Height (Y - Down):")
targetY = tonumber(read()) or 32
-- Fuel and inventory config
local FUEL_SLOT = 1
local MIN_FUEL = 200
-- Navigation helpers
local function turnRight()
turtle.turnRight()
dir = (dir + 1) % 4
end
local function turnLeft()
turtle.turnLeft()
dir = (dir - 1) % 4
end
local function checkFuel()
if turtle.getFuelLevel() == "unlimited" then return true end
-- Try auto-refueling from inventory slot 1
if turtle.getFuelLevel() < MIN_FUEL then
local currentSlot = turtle.getSelectedSlot()
turtle.select(FUEL_SLOT)
turtle.refuel(16)
turtle.select(currentSlot)
end
-- Return total distance back to home estimate
local distHome = math.abs(x) + math.abs(y) + math.abs(z) + 4
return turtle.getFuelLevel() > (distHome + 50)
end
local function isInventoryFull()
for i = 1, 16 do
if turtle.getItemCount(i) == 0 then return false end
end
return true
end
-- Return to home to empty items/refuel, then resume position
local function returnHomeAndResume()
print("Returning home...")
-- Remember current state
local savedX, savedY, savedZ, savedDir = x, y, z, dir
-- Move up to surface
while y < 0 do
turtle.up()
y = y + 1
end
-- Turn to face home (backwards from original start)
while dir ~= 2 do turnRight() end
-- Move back Z lines
while z > 0 do
turtle.forward()
z = z - 1
end
-- Turn left to face X line home
turnLeft()
while x > 0 do
turtle.forward()
x = x - 1
end
-- Move back the initial 4 offset blocks
for i = 1, 4 do turtle.forward() end
-- Empty inventory into rear chest
for i = 2, 16 do
turtle.select(i)
turtle.drop()
end
turtle.select(1)
-- Pull fuel from bottom chest if empty
if turtle.getFuelLevel() < MIN_FUEL then
turtle.suckDown()
turtle.refuel()
end
print("Resuming mining...")
-- Go back out 4 offset blocks
for i = 1, 4 do turtle.back() end
-- Path back to saved X
while x < savedX do
turtle.back()
x = x + 1
end
turnRight() -- Face original forward again
-- Path back to saved Z
while z < savedZ do
turtle.forward()
z = z + 1
end
-- Path back down to saved Y
while y > savedY do
turtle.down()
y = y - 1
end
-- Restore original direction
while dir ~= savedDir do turnRight() end
end
local function moveForward()
if not checkFuel() or isInventoryFull() then
returnHomeAndResume()
end
while turtle.detect() do
turtle.dig()
os.sleep(0.5)
end
if turtle.forward() then
if dir == 0 then z = z + 1
elseif dir == 1 then x = x + 1
elseif dir == 2 then z = z - 1
elseif dir == 3 then x = x - 1
end
return true
end
return false
end
-- Main Program Execution
-- 1. Initial 4 block home offset
print("Moving 4 blocks out...")
for i = 1, 4 do
while turtle.detect() do turtle.dig() end
turtle.forward()
end
-- 2. Mining Logic loop
for layer = 1, targetY do
for row = 1, targetX do
for col = 1, targetZ - 1 do
moveForward()
end
-- Turn to next row logic
if row < targetX then
if row % 2 == 1 then
if layer % 2 == 1 then turnRight() moveForward() turnRight()
else turnLeft() moveForward() turnLeft() end
else
if layer % 2 == 1 then turnLeft() moveForward() turnLeft()
else turnRight() moveForward() turnRight() end
end
end
end
-- Move down to next layer if not finished
if layer < targetY then
while turtle.detectDown() do turtle.digDown() end
turtle.down()
y = y - 1
-- Turn around to reverse pattern for next layer efficiency
turnRight()
turnRight()
end
end
-- Return Home permanently when complete
print("Mining complete! Returning home.")
while y < 0 do turtle.up() y = y + 1 end
while dir ~= 2 do turnRight() end
while z > 0 do turtle.forward() z = z - 1 end
turnLeft()
while x > 0 do turtle.forward() x = x - 1 end
for i = 1, 4 do turtle.forward() end
print("Done!")