Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- USER INPUT
- print("Enter length:")
- local length = tonumber(read())
- print("Enter width:")
- local width = tonumber(read())
- print("Enter depth:")
- local depth = tonumber(read())
- local fuelSlot = 16
- -- STATE
- local x, y, z = 0, 0, 0 -- relative coordinates
- local dir = 0 -- 0=N, 1=E, 2=S, 3=W
- -- === MOVEMENT HELPERS ===
- function refuel()
- if turtle.getFuelLevel() < 10 then
- turtle.select(fuelSlot)
- turtle.refuel(1)
- end
- end
- function tryDig() while turtle.detect() do turtle.dig(); sleep(0.4) end end
- function tryDigDown() while turtle.detectDown() do turtle.digDown(); sleep(0.4) end end
- function tryDigUp() while turtle.detectUp() do
- turtle.digUp(); sleep(0.4) end end
- function forward()
- refuel()
- tryDig()
- while not turtle.forward() do sleep(0.2) end
- 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
- end
- function back()
- refuel()
- while not turtle.back() do sleep(0.2) end
- 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
- end
- function down()
- refuel()
- tryDigDown()
- while not turtle.down() do sleep(0.2) end
- y = y - 1
- end
- function up()
- refuel()
- tryDigUp()
- while not turtle.up() do sleep(0.2) end
- y = y + 1
- end
- function turnLeft()
- turtle.turnLeft()
- dir = (dir - 1) % 4
- if dir < 0 then dir = dir + 4 end
- end
- function turnRight()
- turtle.turnRight()
- dir = (dir + 1) % 4
- end
- function face(target)
- while dir ~= target do turnRight() end
- end
- -- === GO TO COORDINATE ===
- function goTo(targetX, targetY, targetZ, targetDir)
- -- Go up first (safety)
- while y < targetY do up() end
- while y > targetY do down() end
- if x < targetX then face(1) while x < targetX do forward() end
- elseif x > targetX then face(3) while x > targetX do forward() end end
- if z < targetZ then face(0) while z < targetZ do forward() end
- elseif z > targetZ then face(2) while z > targetZ do forward() end end
- face(targetDir or 0)
- end
- -- === INVENTORY HANDLING ===
- function isInventoryFull()
- for i = 1, 15 do
- if turtle.getItemCount(i) == 0 then return false end
- end
- return true
- end
- function dropItems()
- local saveX, saveY, saveZ, saveDir = x, y, z, dir
- goTo(0, 0, 0, 2)
- for i = 1, 15 do
- turtle.select(i)
- turtle.drop()
- end
- turtle.select(1)
- goTo(saveX, saveY, saveZ, saveDir)
- end
- -- === MINING FUNCTION ===
- function mineLayer()
- for row = 1, width do
- for col = 1, length - 1 do
- forward()
- if isInventoryFull() then dropItems() end
- end
- if row < width then
- if row % 2 == 1 then turnRight(); forward(); turnRight()
- else turnLeft(); forward(); turnLeft() end
- end
- end
- -- Return to top-left corner of next layer
- if width % 2 == 1 then face(2) for i = 1, length - 1 do forward() end end
- face(3) for i = 1, width - 1 do forward() end
- face(0)
- end
- -- === MAIN EXECUTION ===
- print("Starting mining...")
- turtle.digDown()
- down()
- for d = 1, depth do
- mineLayer()
- if d < depth then down() end
- end
- -- Final return to origin, face chest
- goTo(0, 0, 0, 2)
- for i = 1, 15 do
- turtle.select(i)
- turtle.drop()
- end
- turtle.select(1)
- goTo(0, 0, 0, 0)
- print("Mining complete. Ready to unload into chest.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement