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 = 1
- local outputSlot = 2
- -- STATE
- local x, y, z = 0, 0, 0 -- relative coordinates
- local dir = 0 -- 0=N, 1=E, 2=S, 3=W
- -- === BLACKLIST ===
- local blacklist = {
- ["minecraft:cobbled_deepslate"] = true,
- ["minecraft:cobblestone"] = true,
- ["minecraft:dirt"] = true,
- ["minecraft:gravel"] = true,
- ["minecraft:tuff"] = true,
- ["forbidden_arcanus:darkstone"] = true
- }
- function dropBlacklistedItems()
- for i = 3, 16 do
- turtle.select(i)
- local detail = turtle.getItemDetail(i)
- if detail and blacklist[detail.name] then
- turtle.dropDown()
- end
- end
- end
- -- === MOVEMENT HELPERS ===
- 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 refuel()
- if turtle.getFuelLevel() < 100 then
- tryDig()
- turtle.select(fuelSlot)
- while not turtle.place() do sleep(0.2) end
- while turtle.getFuelLevel() < 20000 do
- turtle.suck()
- turtle.refuel()
- end
- turtle.dropDown()
- tryDig()
- 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 = 3, 16 do
- if turtle.getItemCount(i) == 0 then return false end
- end
- return true
- end
- function dropItems()
- tryDig()
- turtle.select(outputSlot)
- while not turtle.place() do sleep(0.2) end
- for i = 3, 16 do
- turtle.select(i)
- turtle.drop()
- end
- turtle.select(outputSlot)
- tryDig()
- end
- -- === MINING FUNCTION ===
- function mineLayer()
- for row = 1, width do
- for col = 1, length - 1 do
- forward()
- if isInventoryFull() then dropBlacklistedItems()
- if isInventoryFull() then dropItems() end 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, 0)
- dropItems()
- print("Mining complete.")
Advertisement
Add Comment
Please, Sign In to add comment