mdc_tjc icon

mc_tunnel

mdc_tjc | PRO | 03/28/15 04:13:40 PM UTC | 0 ⭐ | 440 👁️ | Never ⏰ | []
Lua |

3.51 KB

|

None

|

0 👍

/

0 👎

-- This program is named 997UUShm in pastebin
print("This program cuts a 3 x 3 tunnel.  Place the turtle up one block from your feet.")
 
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 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 tryDigDown()
    while turtle.detectDown() do
        if turtle.digDown() 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
            os.pullEvent( "turtle_inventory" )
        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..." )
 
tryDig() -- if block, dig, collect, sleep
tryForward()
 
for n=1,length do
--  turtle.placeDown()
    tryDigUp() -- if block, digUp, collect, sleep
    tryDigDown() -- if block, digDown, collect, sleep
    turtle.turnLeft()
    tryDig()
    tryForward()
    tryDigUp()
    tryDigDown() -- if block, digDown, collect, sleep
    turtle.back()
    turtle.turnRight()
    turtle.turnRight()
    tryDig() -- if block, dig, collect, sleep
    tryForward()
    tryDigDown() -- if block, digDown, collect, sleep   
    tryDigUp() -- if block, digUp, collect, sleep
    turtle.back()
    turtle.turnLeft()
--  tryUp() -- refuel, up, if ~up, digUp, attackUp
    
    if n<length then
        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 depth > 0 do
    if turtle.forward() then
        depth = depth - 1
    else
        turtle.dig()
    end
end
turtle.turnRight()
turtle.turnRight()
]]
 
print( "Tunnel complete." )
print( "Mined "..collected.." items total." )

Comments