Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local x,y,z = 0,0,0
- local Dir = 0
- local State = "mine"
- local function move(dir)
- if string.lower(dir) == "up" then
- if turtle.detectUp() == false and turtle.getFuelLevel ~= 0 then
- y = y + 1
- turtle.up()
- else
- return false
- end
- return true;
- end
- if string.lower(dir) == "down" then
- if turtle.detectDown() == false and turtle.getFuelLevel ~= 0 then
- y = y - 1
- turtle.down()
- else
- return false
- end
- return true;
- end
- if string.lower(dir) == "forward" then
- if turtle.detect() == false and turtle.getFuelLevel ~= 0 then
- if Dir % 4 == 0 then
- x = x + 1
- elseif Dir % 4 == 1 then
- z = z + 1
- elseif Dir % 4 == 2 then
- x = x -1
- elseif Dir % 34 == 3 then
- z = z - 1
- end
- turtle.forward()
- else
- return false
- end
- return true;
- end
- end
- local function Turn(dir)
- if string.lower(dir) == "left" then
- turtle.turnLeft()
- Dir = Dir + 1
- end
- if string.lower(dir) == "right" then
- turtle.turnRight()
- Dir = Dir - 1
- end
- end
- local function mine()
- repeat
- --print("Dig")
- turtle.dig()
- turtle.digUp()
- sleep(.5)
- until turtle.detect() == false
- --print("No Block Found")
- end
- local function doFuleCheck()
- local TotalDist = math.abs(x) + math.abs(y) + math.abs(z)
- if (TotalDist >= turtle.getFuelLevel()) then
- State = "return"
- return true
- else
- return false
- end
- end
- local Block = nil
- repeat
- move("forward")
- Block = turtle.detect()
- until Block or doFuleCheck()
- print("Mining")
- while true do
- print(State)
- if State == "mine" then
- for i = 1,3 do
- if doFuleCheck() then break end
- mine()
- move("forward")
- end
- Turn("left")
- if turtle.detect() then
- for i = 1,5 do
- if doFuleCheck() then break end
- mine()
- move("forward")
- end
- for i = 1,2 do
- if doFuleCheck() then break end
- Turn("left")
- end
- for i = 1,5 do
- if doFuleCheck() then break end
- mine()
- move("forward")
- end
- Turn("left")
- else
- Turn("right")
- end
- Turn("right")
- if turtle.detect() then
- for i = 1,5 do
- if doFuleCheck() then break end
- mine()
- move("forward")
- end
- for i = 1,2 do
- if doFuleCheck() then break end
- Turn("left")
- end
- for i = 1,5 do
- if doFuleCheck() then break end
- mine()
- move("forward")
- end
- Turn("right")
- else
- Turn("left")
- end
- elseif State == "return" then
- if Dir == 2 or Dir == 4 then
- if Dir % 4 == 2 and z < 0 or Dir % 4 == 4 and z > 0 then
- for i = 1,2 do
- Turn("left")
- end
- end
- for i = 1,math.abs(z) do
- move("forward")
- end
- Turn("left")
- if Dir == 1 then
- for i = 1,2 do
- Turn("left")
- end
- end
- end
- if z ~= 0 then
- error("Was not able to return to z0")
- end
- repeat
- move("forward")
- until x == 0
- for i = 1,2 do
- Turn("left")
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment