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 |