-- Don't use this program yet! -- It's not ready for use!! local tArgs = {...} if #tArgs < 3 then write("Usage: ") write(shell.getRunningProgram()) print(" ") return end if tonumber(tArgs[2]) < 0 then print("Too low y value!") return end --[[ Using relative pos ]]-- --local posX, posY, posZ = 0 --dir = 0 --[[ End ]]-- --[[ Using GPS ]]-- -- Direction: -- +------ z ------+ -- | 0 | -- x 1 turtle 3 | -- | 2 | -- +---------------+ local dir rednet.open("right") local posX, posY, posZ = gps.locate(.5) local curX, curY, curZ = posX, posY, posZ rednet.close("right") if not posX then print("Could not locate position!") return end function checkGPS() rednet.open("right") curX, curY, curZ = gps.locate(.5) rednet.close("right") end function checkDir() if curX ~= posX then if curX < posX then dir = 3 elseif curX > posX then dir = 1 end elseif curZ ~= posZ then if curZ < posZ then dir = 2 elseif curZ > posZ then dir = 0 end end end function invertDir(dirVariable) if type(dirVariable) ~= "number" then error("Number expected, got "..type(dirVariable)) end if dirVariable < 2 then return dirVariable + 2 else return dirVariable - 2 end end if not turtle.forward() then if not turtle.back() then turtle.turnRight() if not turtle.forward() then if not turtle.back() then turtle.turnLeft() print("No empty space found!") return else checkGPS() checkDir() while not turtle.forward() do if not turtle.dig() then turtle.attack() end end end else checkGPS() checkDir() for q = 1, 2 do turtle.turnRight() end while not turtle.forward() do if not turtle.dig() then turtle.attack() end end dir = invertDir(dir) end else checkGPS() checkDir() while not turtle.forward() do if not turtle.dig() then turtle.attack() end end end else checkGPS() checkDir() for w = 1, 2 do turtle.turnRight() end while not turtle.forward() do if not turtle.dig() then turtle.attack() end end dir = invertDir(dir) end --[[ End ]]-- function goUp() while not turtle.up() do if not turtle.digUp() then if not turtle.attackUp() then sleep(.1) end end end posY = posY + 1 end function goDown() while not turtle.down() do if not turtle.digDown() then if not turtle.attackDown() then sleep(.1) end end end posY = posY - 1 end function left() if dir > 3-1 then dir = 0 else dir = dir + 1 end turtle.turnLeft() end function right() if dir < 0+1 then dir = 3 else dir = dir - 1 end turtle.turnRight() end function goForward() while not turtle.forward() do goUp() end if dir == 0 then posZ = posZ + 1 elseif dir == 1 then posX = posX + 1 elseif dir == 2 then posZ = posZ - 1 elseif dir == 3 then posX = posX - 1 else error("Undefined direction.") end end function goBack() while not turtle.back() do goUp() end if dir == 0 then posZ = posZ - 1 elseif dir == 1 then posX = posX - 1 elseif dir == 2 then posZ = posZ + 1 elseif dir == 3 then posX = posX + 1 else error("Undefined direction.") end end function faceZ() if dir ~= 0 then if dir == 1 then right() else repeat left() until dir == 0 end end end function faceNZ() if dir ~= 2 then if dir == 3 then right() else repeat left() until dir == 2 end end end function faceX() if dir ~= 1 then if dir == 2 then right() else repeat left() until dir == 1 end end end function faceNX() if dir ~= 3 then if dir == 0 then right() else repeat left() until dir == 3 end end end function goto(x,y,z) print("Heading to x"..x..", y"..y..", z"..z.."!") repeat if x < posX then faceNX() elseif x > posX then faceX() end while x ~= posX do goForward() end if z < posZ then faceNZ() elseif z > posZ then faceZ() end while z ~= posZ do goForward() end while y < posY do goDown() end while y > posY do goUp() end until x == posX and y == posY and z == posZ end local param1 = tonumber(tArgs[1]) local param2 = tonumber(tArgs[2]) local param3 = tonumber(tArgs[3]) --goto(param1,param2,param3) faceZ()