250 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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 |