Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
-- === USER INPUT === print("Enter length:") local length = tonumber(read()) print("Enter width:") local width = tonumber(read()) print("Enter depth:") local depth = tonumber(read()) print("Enter starting Y offset (e.g. 50 means start mining 50 down):") local startYOffset = tonumber(read()) local fuelSlot = 16 local minFuelLevel = 100 -- If fuel lower than this, go refuel -- === STATE === local x, y, z = 0, 0, 0 local dir = 0 -- 0=N, 1=E, 2=S, 3=W -- === MOVEMENT HELPERS === function refuel() local fuelLevel = turtle.getFuelLevel() if fuelLevel == "unlimited" then return end if fuelLevel < minFuelLevel then print("Fuel low (" .. fuelLevel .. "). Returning to refuel...") local saveX, saveY, saveZ, saveDir = x, y, z, dir goTo(0, 0, 0, 0) refuelFromChest() goTo(saveX, saveY, saveZ, saveDir) end end function refuelFromChest() turtle.select(fuelSlot) print("Refueling from chest above...") while turtle.getFuelLevel() < minFuelLevel do turtle.suckUp() if turtle.getItemCount(fuelSlot) == 0 then print("No fuel found in chest! Waiting...") sleep(5) else turtle.refuel() end end print("Refueled to " .. turtle.getFuelLevel()) 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) 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 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 program...") -- Go down to starting offset before mining for i = 1, startYOffset do if turtle.detectDown() then turtle.digDown() end down() end print("Reached start Y level, beginning mining...") for d = 1, depth do mineLayer() if d < depth then down() end end -- Final return and unload goTo(0, 0, 0, 2) for i = 1, 15 do turtle.select(i) turtle.drop() end turtle.select(1) print("Mining complete. Returned home.")
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)