You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.2 KiB
182 lines
4.2 KiB
local tArgs = { ... } |
|
if #tArgs ~= 1 then |
|
print( "Usage: tunnel <length>" ) |
|
return |
|
end |
|
|
|
-- Mine in a quarry pattern until we hit something we can't dig |
|
local length = tonumber( tArgs[1] ) |
|
if length < 1 then |
|
print( "Tunnel length must be positive" ) |
|
return |
|
end |
|
|
|
local depth = 0 |
|
local collected = 0 |
|
|
|
local function tryPlaceTorch() |
|
turtle.select(2) |
|
turtle.place() |
|
end |
|
|
|
|
|
local function collect() |
|
collected = collected + 1 |
|
if math.fmod(collected, 25) == 0 then |
|
print( "Mined "..collected.." items." ) |
|
end |
|
end |
|
|
|
local function tryDig() |
|
while turtle.detect() do |
|
if turtle.dig() then |
|
collect() |
|
sleep(0.5) |
|
else |
|
return false |
|
end |
|
end |
|
return true |
|
end |
|
|
|
local function tryDigUp() |
|
while turtle.detectUp() do |
|
if turtle.digUp() then |
|
collect() |
|
sleep(0.5) |
|
else |
|
return false |
|
end |
|
end |
|
return true |
|
end |
|
|
|
local function refuel() |
|
local fuelLevel = turtle.getFuelLevel() |
|
if fuelLevel == "unlimited" or fuelLevel > 0 then |
|
return |
|
end |
|
|
|
local function tryRefuel() |
|
for n=1,16 do |
|
if turtle.getItemCount(n) > 0 then |
|
turtle.select(n) |
|
if turtle.refuel(1) then |
|
turtle.select(1) |
|
return true |
|
end |
|
end |
|
end |
|
turtle.select(1) |
|
return false |
|
end |
|
|
|
if not tryRefuel() then |
|
print( "Add more fuel to continue." ) |
|
while not tryRefuel() do |
|
sleep(1) |
|
end |
|
print( "Resuming Tunnel." ) |
|
end |
|
end |
|
|
|
local function tryUp() |
|
refuel() |
|
while not turtle.up() do |
|
if turtle.detectUp() then |
|
if not tryDigUp() then |
|
return false |
|
end |
|
elseif turtle.attackUp() then |
|
collect() |
|
else |
|
sleep( 0.5 ) |
|
end |
|
end |
|
return true |
|
end |
|
|
|
local function tryDown() |
|
refuel() |
|
while not turtle.down() do |
|
if turtle.detectDown() then |
|
if not tryDigDown() then |
|
return false |
|
end |
|
elseif turtle.attackDown() then |
|
collect() |
|
else |
|
sleep( 0.5 ) |
|
end |
|
end |
|
return true |
|
end |
|
|
|
local function tryForward() |
|
refuel() |
|
while not turtle.forward() do |
|
if turtle.detect() then |
|
if not tryDig() then |
|
return false |
|
end |
|
elseif turtle.attack() then |
|
collect() |
|
else |
|
sleep( 0.5 ) |
|
end |
|
end |
|
return true |
|
end |
|
|
|
print( "Tunnelling..." ) |
|
|
|
for n=1,length do |
|
tryDigUp() |
|
turtle.turnLeft() |
|
tryDig() |
|
tryUp() |
|
tryDig() |
|
turtle.turnRight() |
|
turtle.turnRight() |
|
tryDig() |
|
tryDown() |
|
tryDig() |
|
turtle.turnLeft() |
|
|
|
if n<length then |
|
if n % 5 == 0 then |
|
turtle.turnRight() |
|
tryPlaceTorch() |
|
turtle.turnLeft() |
|
end |
|
tryDig() |
|
if not tryForward() then |
|
print( "Aborting Tunnel." ) |
|
break |
|
end |
|
else |
|
print( "Tunnel complete." ) |
|
end |
|
|
|
end |
|
|
|
|
|
print( "Returning to start..." ) |
|
|
|
-- Return to where we started |
|
turtle.turnLeft() |
|
turtle.turnLeft() |
|
while length > 0 do |
|
if tryForward() then |
|
length = length - 1 |
|
else |
|
turtle.dig() |
|
end |
|
end |
|
turtle.turnRight() |
|
turtle.turnRight() |
|
|
|
|
|
print( "Tunnel complete." ) |
|
print( "Mined "..collected.." items total." ) |
|
|
|
|