function digForward() while turtle.forward() ~= true do turtle.dig() end end function detectTree() if turtle.detect() == false then return false end local has_block, data = turtle.inspect() if data.tags["minecraft:logs"] == true then return true end return false end function plant4() if countItem(Sappling) >= 4 then digForward() digForward() turtle.turnLeft() selectItem(Sappling) turtle.place() turtle.turnRight() digBack() selectItem(Sappling) turtle.place() turtle.turnLeft() selectItem(Sappling) turtle.place() turtle.turnRight() digBack() selectItem(Sappling) turtle.place() return true end return false end function goToStart(startPos) d = getDif(startPos) success = true for i = 1, 3 do -- check if it's already at the right position if d[i] ~= 0 then success = false end end if success == true then return true end if d[2] > 0 then -- check if it's too high (too low won't be programmed since the turtle should never go below the startposition) while d[2] > 0 do if not turtle.detectDown then success = turtle.down() -- if no block is below the turtle tries to move down else if detectWoodDown() then avoidWoodDown() else turtle.digDown() success = turtle.down() end end if success then d[2] = d[2] - 1 end -- if the turtle moved down then subtract 1 end end -- get x cords right faceDir(4) d = getDif(startPos) while d[1] > 0 do safeForward() d = getDif(startPos) end turtle.turnRight() turtle.turnRight() while d[1] < 0 do safeForward() d = getDif(startPos) end d = getDif(startPos) turtle.turnLeft() while d[3] > 0 do safeForward() d = getDif(startPos) end turtle.turnLeft() turtle.turnLeft() while d[3] < 0 do safeForward() d = getDif(startPos) end turtle.turnRight() success = true for i = 1, 3 do -- check if it's already at the right position if d[i] ~= 0 then success = false end end if success == true then return true end return false end function getDir() local x, y, z = gps.locate() local initPos = {x,y,z} while turtle.forward() == false do if turtle.detect() == true then if detectWood() then turtle.turnRight() else turtle.dig() end end end x, y, z = gps.locate() digBack() local newPos = {x,y,z} if initPos[3]-newPos[3] == 1 then dir = 1 elseif initPos[3]-newPos[3] == -1 then dir = 3 elseif initPos[1]-newPos[1] == -1 then dir = 2 else dir = 4 end return dir end function faceDir(newDir, oldDir) if (type(oldDir) ~= "number") then oldDir = getDir() end i = (newDir - oldDir)%4 while i > 0 do turtle.turnRight() i = i - 1 end end function digBack() turtle.turnLeft() turtle.turnLeft() digForward() turtle.turnRight() turtle.turnRight() end function digUp() while turtle.up() ~= true do turtle.digUp() end end function digDown() while turtle.down() ~= true do turtle.digDown() end end function moveTo(xTarget, yTarget, zTarget, dirTarget, dirCurrent) local x, y, z = gps.locate() local dir if (type(dirCurrent) == "number") then dir = dirCurrent else dir = getDir() end local toGo if (yTarget > y) then toGo = yTarget -y while (toGo > 0) do digUp() toGo = toGo - 1 end else toGo = y - yTarget while (toGo > 0) do digDown() toGo = toGo - 1 end end if (xTarget - x > 0) then faceDir(2, dir) dir = 2 toGo = xTarget - x else faceDir(4, dir) dir = 4 toGo = x -xTarget end while toGo > 0 do digForward() toGo = toGo -1 end if (zTarget - z > 0) then faceDir(3, dir) dir = 3 toGo = zTarget -z else faceDir(1, dir) dir = 1 toGo = z - zTarget end while toGo > 0 do digForward() toGo = toGo -1 end faceDir(dirTarget, dir) end function hoverTo(xTarget, yTarget, zTarget, dirTarget, dirCurrent) local x, y, z = gps.locate() local dir if (type(dirCurrent) == "number") then dir = dirCurrent else dir = getDir() end local toGo if (xTarget - x > 0) then faceDir(2, dir) dir = 2 toGo = xTarget - x else faceDir(4, dir) dir = 4 toGo = x -xTarget end while toGo > 0 do digForward() toGo = toGo -1 end if (zTarget - z > 0) then faceDir(3, dir) dir = 3 toGo = zTarget -z else faceDir(1, dir) dir = 1 toGo = z - zTarget end while toGo > 0 do digForward() toGo = toGo -1 end if (yTarget > y) then toGo = yTarget -y while (toGo > 0) do digUp() toGo = toGo - 1 end else toGo = y - yTarget while (toGo > 0) do digDown() toGo = toGo - 1 end end faceDir(dirTarget, dir) end