Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local args = { ... }
- if #args ~= 4 then
- print("Usage: Quarry <Forward Distance> <Right Distance> <Down Distance> <Mine Twice? 0 or 1>")
- return
- end
- local forwardAmount = tonumber(args[1])
- local rightAmount = tonumber(args[2])
- local downAmount = tonumber(args[3])
- local mineDelay = false
- if args[4] == "1" then
- mineDelay = true
- end
- if forwardAmount < 1 then
- print("Forward Distance must be bigger than 0")
- return
- end
- if rightAmount < 1 then
- print("Right Distance must be bigger than 0")
- return
- end
- if downAmount < 1 then
- print("Down Distance must be bigger than 0")
- end
- local forwardProgress = 1
- local rightProgress = 1
- local downProgress = 0
- local turnRight = true
- local travelRight = true
- local timesRefueled = 0
- local blocksMined = 0
- local blocksMoved = 0
- local localX, localY, localZ = 1, 0, 1
- local prevX, prevY, prevZ, prevDir = 0, 0, 0, "Front"
- local dir = "Front"
- local function Refuel()
- if turtle.getFuelLevel() == 0 then
- turtle.select(16)
- if turtle.refuel(1) then
- timesRefueled = timesRefueled + 1
- return true
- else
- print("Requires Fuel")
- return false
- end
- end
- return true
- end
- local function TurnLeft()
- turtle.turnLeft()
- if dir == "Front" then
- dir = "Left"
- elseif dir == "Left" then
- dir = "Back"
- elseif dir == "Back" then
- dir = "Right"
- else
- dir = "Front"
- end
- end
- local function TurnRight()
- turtle.turnRight()
- if dir == "Front" then
- dir = "Right"
- elseif dir == "Right" then
- dir = "Back"
- elseif dir == "Back" then
- dir = "Left"
- else
- dir = "Front"
- end
- end
- local function Turn()
- if turnRight then
- TurnRight()
- else
- TurnLeft()
- end
- end
- local function AntiTurn()
- if turnRight then
- TurnLeft()
- else
- TurnRight()
- end
- end
- local function Forward()
- if not Refuel() then
- return false
- end
- if dir == "Front" then
- if localZ + 1 <= forwardAmount then
- turtle.forward()
- localZ = localZ + 1
- blocksMoved = blocksMoved + 1
- return true
- end
- elseif dir == "Left" then
- if localX - 1 >= 1 then
- turtle.forward()
- localX = localX - 1
- blocksMoved = blocksMoved + 1
- return true
- end
- elseif dir == "Back" then
- if localZ - 1 >= 1 then
- turtle.forward()
- localZ = localZ - 1
- blocksMoved = blocksMoved + 1
- return true
- end
- else
- if localX + 1 <= rightAmount then
- turtle.forward()
- localX = localX + 1
- blocksMoved = blocksMoved + 1
- return true
- end
- end
- return false
- end
- local function Back()
- if not Refuel() then
- return false
- end
- if dir == "Back" then
- if localZ + 1 <= forwardAmount then
- turtle.back()
- localZ = localZ + 1
- blocksMoved = blocksMoved + 1
- return true
- end
- elseif dir == "Right" then
- if localX - 1 >= 1 then
- turtle.back()
- localX = localX - 1
- blocksMoved = blocksMoved + 1
- return true
- end
- elseif dir == "Front" then
- if localZ - 1 >= 1 then
- turtle.back()
- localZ = localZ - 1
- blocksMoved = blocksMoved + 1
- return true
- end
- else
- if localX + 1 <= rightAmount then
- turtle.back()
- localX = localX + 1
- blocksMoved = blocksMoved + 1
- return true
- end
- end
- return false
- end
- local function Down()
- if not Refuel() then
- return false
- end
- if localY + 1 <= downAmount then
- turtle.down()
- localY = localY + 1
- blocksMoved = blocksMoved + 1
- return true
- end
- return false
- end
- local function Up()
- if not Refuel() then
- return false
- end
- if localY - 1 >= 0 then
- turtle.up()
- localY = localY - 1
- blocksMoved = blocksMoved + 1
- return true
- end
- return false
- end
- local function HomeTime()
- prevX, prevY, prevZ, prevDir = localX, localY, localZ, dir
- TurnRight()
- TurnRight()
- if not Forward() then
- AntiTurn()
- Forward()
- end
- if dir == "Front" then
- TurnLeft()
- elseif dir == "Right" then
- TurnRight()
- end
- while true do
- if not Up() then
- break
- end
- end
- while true do
- if not Forward() then
- break
- end
- end
- if localX == 1 then
- TurnLeft()
- while true do
- if not Forward() then
- break
- end
- end
- elseif localZ == 1 then
- TurnRight()
- while true do
- if not Forward() then
- break
- end
- end
- end
- if dir == "Left" then
- TurnLeft()
- end
- for n = 1, 15 do
- turtle.select(n)
- if not turtle.drop() then
- break
- end
- end
- BackToWork()
- end
- local function BackToWork()
- TurnRight()
- TurnRight()
- for z = 1, prevZ do
- Forward()
- end
- TurnRight()
- for x = 1, prevX do
- Forward()
- end
- for y = 0, prevY - 2 do
- Down()
- end
- if prevDir == "Front" then
- TurnLeft()
- elseif prevDir == "Back" then
- TurnRight()
- elseif prevDir == "Left" then
- TurnLeft()
- TurnLeft()
- end
- Back()
- Down()
- Down()
- Forward()
- Dig()
- end
- local function CheckSpace()
- local success, data = turtle.inspect()
- for n = 1, 15 do
- turtle.select(n)
- if true or turtle.getItemCount() == 0 or (turtle.compare() and turtle.getItemSpace() ~= 0) then
- return true
- end
- end
- return false
- end
- local function Dig()
- if not CheckSpace() then
- HomeTime()
- end
- if mineDelay then
- sleep(0.75)
- end
- if dir == "Front" then
- if localZ + 1 <= forwardAmount then
- turtle.dig()
- blocksMined = blocksMined + 1
- return true
- end
- elseif dir == "Left" then
- if localX - 1 >= 1 then
- turtle.dig()
- blocksMined = blocksMined + 1
- return true
- end
- elseif dir == "Back" then
- if localZ - 1 >= 1 then
- turtle.dig()
- blocksMined = blocksMined + 1
- return true
- end
- else
- if localX + 1 <= rightAmount then
- turtle.dig()
- blocksMined = blocksMined + 1
- return true
- end
- end
- return false
- end
- local function DigUp()
- if not CheckSpace() then
- HomeTime()
- end
- if localY - 1 >= 1 then
- turtle.digUp()
- blocksMined = blocksMined + 1
- return true
- end
- end
- local function DigDown()
- if not CheckSpace() then
- HomeTime()
- end
- if localY + 1 <= downAmount then
- turtle.digDown()
- blocksMined = blocksMined + 1
- return true
- end
- end
- DigDown()
- Down()
- DigDown()
- Down()
- DigDown()
- while true do
- if Dig() then
- Dig()
- Forward()
- DigUp()
- DigDown()
- else
- Turn()
- if Dig() then
- Dig()
- Forward()
- DigUp()
- DigDown()
- Turn()
- turnRight = not turnRight
- else
- if DigDown() then
- Down()
- end
- if DigDown() then
- Down()
- DigDown()
- end
- Turn()
- end
- end
- if (localX == rightAmount and localZ == forwardAmount) or (localX == 0 and localZ == 0) and localY == downAmount then
- print("FINISHED")
- break
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement