Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local relX = 0 --relative position from home
- local relY = 0 --relative position from home
- local relZ = 1 --relative position from home
- local curDir = 0 --Current Direction the turtle is facing relative to home chest
- local sizeX = 1 --Size of Quarry
- local sizeY = 1 --Size of Quarry
- local sizeZ = 1 --Size of Quarry
- local atHome = true --is the turtle at home
- local swap = false --is the turtle minging left to right or right to left
- local digTimeout = 16
- local curHits = 0
- local hasStarted = false
- local isGoingHome = false
- local hasCompleted = false
- local hitSomething = false
- local tArgs = {...}
- function Start() --initalize
- if #tArgs < 1 then
- print("Define Quarry Size")
- write("X: ")
- sizeX = tonumber(read())
- write("Z: ")
- sizeZ = tonumber(read())
- write("Y: ")
- sizeY = tonumber(read())
- else
- sizeX = tonumber(tArgs[1])
- sizeZ = tonumber(tArgs[2])
- sizeY = tonumber(tArgs[3])
- end
- print("Starting...")
- CheckFuel()
- Turn("right", 2)
- Move("forward", 1)
- Move("down", 2)
- turtle.digDown()
- hasStarted = true
- atHome = false
- while hasCompleted == false do
- Dig(1,1,1, sizeX, sizeY, sizeZ)
- if isGoingHome == true then
- GoHome()
- end
- end
- --print("Done!")
- end
- function Dig(curX, curY, curZ, curSizeX, curSizeY, curSizeZ) --digging control
- for i=tonumber(curY), curSizeY, 1 do
- for i=tonumber(curX), curSizeX, 1 do
- for i = tonumber(curZ), curSizeZ-1, 1 do
- --print("moving in Z, ".. curDir.." i: "..i)
- CheckStatus()
- Move("forward", 1)
- turtle.digDown()
- if not i == sizeZ then
- turtle.dig()
- end
- turtle.digUp()
- if curDir == 0 then
- relZ = relZ -1
- elseif curDir == 2 then
- relZ = relZ +1
- end
- --os.sleep(1)
- end
- if i < sizeX then
- if swap then
- --print("moving right")
- if curDir == 2 then
- Turn("right", 1)
- Move("forward", 1)
- Turn("right", 1)
- elseif curDir == 0 then
- Turn("left", 1)
- Move("forward", 1)
- Turn("left", 1)
- end
- relX = relX -1
- elseif not swap then
- --print("moving left")
- if curDir == 0 then
- Turn("right", 1)
- Move("forward", 1)
- Turn("right", 1)
- elseif curDir == 2 then
- Turn("left", 1)
- Move("forward", 1)
- Turn("left", 1)
- end
- relX = relX +1
- end
- turtle.digDown()
- turtle.dig()
- turtle.digUp()
- elseif i == sizeX then
- if swap == true then
- Turn("right",2)
- elseif swap == false then
- Turn("left",2)
- end
- end
- --print("moving in X, ".. curDir.." i: "..i)
- --os.sleep(1)
- end
- CheckFuel()
- if i < sizeY then
- Move("down", 3)
- turtle.digDown()
- swap = not swap
- --print("swap stat: "..tostring(swap))
- --print("moving in Y, ".. curDir.." i: "..i)
- --os.sleep(1)
- end
- if hitSomething == true then
- isGoingHome = true
- hasStarted = false
- hasCompleted = true
- break
- end
- if i >= sizeY then
- isGoingHome = true
- hasStarted = false
- hasCompleted = true
- break
- end
- end
- end
- function CheckStatus() -- check if inventory is full
- if turtle.getItemCount(14) > 0 then
- Deposit()
- end
- end
- function GoHome() --sends the turtle home
- print("Going Home...")
- print(relX .. ","..relY..","..relZ .."Dir: "..curDir)
- Move("up", math.abs(relY))
- if curDir == 2 then
- Turn("left",2)
- end
- if relX < 0 then
- Turn("right", 1)
- end
- if relX > 0 then
- Turn("left", 1)
- end
- Move("forward", math.abs(relX))
- if curDir == 1 then
- Turn("left",1)
- end
- if curDir == 2 then
- Turn("left",2)
- end
- if curDir == 3 then
- Turn("right",1)
- end
- Move("forward", math.abs(relZ))
- print("Got Home")
- atHome = true
- CheckFuel()
- Deposit()
- end
- function CheckFuel() -- checks the fuel level, refuels and gets more is the turtle is at home
- print("Refueling...")
- turtle.select(16)
- if atHome == true then
- if turtle.getItemCount(16) <= 1 then
- GetFuel()
- end
- end
- turtle.select(16)
- while turtle.getFuelLevel() <= 1000 do
- turtle.refuel(2)
- if turtle.getItemCount(16) <= 1 then
- print("Out of Fuel")
- break
- end
- end
- turtle.select(1)
- print("Fuel Level: ".. turtle.getFuelLevel());
- end
- function GetFuel() -- gets more fuel
- print("Getting More Fuel...")
- while turtle.getItemCount(16) < 64 do
- turtle.suck(1)
- end
- --Deposit()
- end
- function Deposit() -- deposits items
- print("Depositing Items...");
- turtle.digUp()
- turtle.select(15)
- turtle.placeUp() --places Enderchest
- for i=1, 14, 1 do
- turtle.select(i)
- turtle.dropUp()
- end
- turtle.select(15)
- turtle.digUp()
- turtle.select(1)
- end
- function Turn(dir, count) --turn controller to keep track of direction
- if dir == "left" then
- for i=1, count, 1 do
- --print("turing Left, cur Dir: "..curDir )
- turtle.turnLeft()
- curDir = curDir - 1
- if curDir < 0 then
- curDir = 3
- end
- --print("turned Left, new Dir: "..curDir )
- --print("left, current Dir: "..curDir)
- end
- end
- if dir == "right" then
- for i=1, count, 1 do
- --print("turning Right, cur Dir: "..curDir )
- turtle.turnRight()
- curDir = curDir + 1
- if curDir > 3 then
- curDir = 0
- end
- --print("turned right, new Dir: "..curDir )
- --print("right, current Dir: "..curDir)
- end
- end
- end
- function Move(dir, dist) --move controller to insure propper movement and keep track of relative position
- print("Moving".. dir..":".. dist)
- if dir == "forward" then
- for i=1, dist, 1 do
- while not turtle.forward() do
- CheckFuel()
- if turtle.detect() then
- turtle.dig()
- else
- turtle.attack()
- print("Attacking Front");
- end
- --turtle.forward()
- --break
- end
- --if curDir == 0 then
- --relZ = relZ - 1
- --end
- --if curDir == 2 then
- --relZ = relZ + 1
- --end
- --if curDir == 1 then
- --relZ = relX + 1
- --end
- --if curDir == 3 then
- --relZ = relX - 1
- --end
- end
- end
- if dir == "up" then
- for i=1, dist, 1 do
- --print("Moving up...")
- while turtle.up() == false do
- CheckFuel()
- if turtle.detectUp() then
- turtle.digUp()
- else
- turtle.attackUp()
- print("Attacking Top")
- end
- --turtle.up()
- --break
- end
- relY = relY + 1
- end
- end
- if dir == "down" then
- for i=1, dist, 1 do
- while not turtle.down() do
- CheckFuel()
- if turtle.detectDown() then
- turtle.digDown()
- else
- turtle.attackDown()
- end
- --turtle.down()
- --break
- curHits = curHits + 1
- if curHits >= digTimeout then
- hitSomething = true
- print("unable to proceed...")
- break
- end
- end
- if hitSomething == false then
- relY = relY - 1
- curHits = 0
- end
- end
- end
- end
- Start() --Calls Start
- if hitSomething == true then
- print("Hit Something I can't break!")
- end
- print("Done!")
Advertisement
Add Comment
Please, Sign In to add comment