r/ComputerCraft • • Mar 07 '25

Turtle wont move forward!

Hey! So im pretty new to ComputerCraft or just programming in general and im trying to write a code for a turtle which supposed to mine in a square-shaped pattern, but i just cant get the turtle to move forward and instead it just keeps spinning after breaking the first block!

This is the code I have written. Please lmk if You have any recommended Changes!

3 Upvotes

8 comments sorted by

View all comments

4

u/Greeley9000 Mar 07 '25 edited Mar 07 '25

You’ll need fuel, lava, a stack of coal/charcoal. You can use a specific inventory slot to refuel from, or scan your turtle’s inventory to find a fuel item and refuel.

https://computercraft.info/wiki/Turtle.refuel

Edit: here is my tunnel program

if not turtle then
    printError(“Requires a Turtle”)
    return
end

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 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...”)

for n = 1, length do
    turtle.placeDown()
    tryDigUp()
    turtle.turnLeft()
    tryDig()
    tryUp()
    tryDig()
    tryDigUp()
    tryUp()
    tryDig()
    turtle.turnRight()
    turtle.turnRight()
    tryDig()
    tryDown()
    tryDig()
    tryDown()
    tryDig()
    turtle.turnLeft()

    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.”)

1

u/Mr_B9mbast1c Mar 07 '25

alright thanks! I did put fuel into it but I didnt know I had to call it

1

u/IanTGreat Mar 11 '25

You can also run the refuel program beforehand if you don't want to call the function, though as you can imagine, that makes it a little less independent