Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- messageLevel = { DEBUG=0, INFO=1, WARNING=2, ERROR=3, FATAL=4 }
- direction = { FORWARD=0, RIGHT=1, BACK=2, LEFT=3, UP=4, DOWN=5 }
- local messageOutputLevel = messageLevel.INFO
- local messageOutputFileName
- local fuelLevelToRefuelAt = 5
- local refuelItemsToUseWhenRefuelling = 63
- local emergencyFuelToRetain = 0
- local maximumGravelStackSupported = 25 -- The number of stacked gravel or sand blocks supported
- local noiseBlocksCount
- local bottomLayer = 5 -- The y co-ords of the layer immediately above bedrock
- local returningToStart = false
- local lookForChests = false -- Determines if chests should be located as part of the quarrying
- local miningOffset -- The offset to the mining layer. This is set depending on whether chests are being looked for or not
- local lastEmptySlot -- The last inventory slot that was empty when the program started (is either 15 if not looking for chests or 14 if we are)
- local turtleId
- local currentlySelectedSlot = 0 -- The slot that the last noise block was found in
- local lastMoveNeededDig = true -- Determines whether the last move needed a dig first
- local haveBeenAtZeroZeroOnLayer -- Determines whether the turtle has been at (0, 0) in this mining layer
- local orientationAtZeroZero -- The turtle's orientation when it was at (0, 0)
- local levelToReturnTo -- The level that the turtle should return to in order to head back to the start to unload
- local currX
- local currY
- local currZ
- local currOrient
- local startHeight -- Represents the height (y co-ord) that the turtle started at
- local quarryWidth -- Represents the length of the mines that the turtle will dig
- function writeMessage(message, msgLevel)
- if (msgLevel >= messageOutputLevel) then
- print(message)
- if (messageOutputFileName ~= nil) then
- local outputFile = io.open(messageOutputFileName, "a")
- outputFile:write(message)
- outputFile:write("\n")
- outputFile:close()
- end
- end
- end
- function ensureFuel()
- local fuelLevel = turtle.getFuelLevel()
- if (fuelLevel ~= "unlimited") then
- if (fuelLevel < fuelLevelToRefuelAt) then
- turtle.select(16)
- currentlySelectedSlot = 16
- local fuelItems = turtle.getItemCount(16)
- if (fuelItems == 0) then
- writeMessage("Completely out of fuel!", messageLevel.FATAL)
- elseif (fuelItems == 1) then
- writeMessage("Out of Fuel!", messageLevel.ERROR)
- turtle.refuel()
- elseif (fuelItems <= (emergencyFuelToRetain + 1)) then
- writeMessage("Consuming emergency fuel supply. "..(fuelItems - 2).." emergency fuel items remain", messageLevel.WARNING)
- turtle.refuel(1)
- else
- if (fuelItems - (emergencyFuelToRetain + 1) < refuelItemsToUseWhenRefuelling) then
- turtle.refuel(fuelItems - (emergencyFuelToRetain + 1))
- else
- turtle.refuel(refuelItemsToUseWhenRefuelling)
- end
- end
- end
- end
- end
- function ensureInventorySpace()
- if (returningToStart == false) then
- if (turtle.getItemCount(lastEmptySlot) > 0) then
- returnToStartAndUnload(true)
- end
- end
- end
- function returnToStartAndUnload(returnBackToMiningPoint)
- writeMessage("returnToStartAndUnload called", messageLevel.DEBUG)
- returningToStart = true
- local storedX = currX
- local storedY = currY
- local storedZ = currZ
- local storedOrient = currOrient
- writeMessage("Return to start, return level: "..levelToReturnTo, messageLevel.DEBUG)
- if (currY > levelToReturnTo) then
- while (currY > levelToReturnTo) do
- turtleDown()
- end
- elseif (currY < levelToReturnTo) then
- while (currY < levelToReturnTo) do
- turtleUp()
- end
- end
- if ((haveBeenAtZeroZeroOnLayer == false) or (orientationAtZeroZero == direction.FORWARD)) then
- if (currX > 0) then
- turtleSetOrientation(direction.LEFT)
- while (currX > 0) do
- turtleForward()
- end
- elseif (currX < 0) then
- writeMessage("Current x is less than 0 in returnToStartAndUnload", messageLevel.ERROR)
- end
- if (currZ > 0) then
- turtleSetOrientation(direction.BACK)
- while (currZ > 0) do
- turtleForward()
- end
- elseif (currZ < 0) then
- writeMessage("Current z is less than 0 in returnToStartAndUnload", messageLevel.ERROR)
- end
- else
- if (currZ > 0) then
- turtleSetOrientation(direction.BACK)
- while (currZ > 0) do
- turtleForward()
- end
- elseif (currZ < 0) then
- writeMessage("Current z is less than 0 in returnToStartAndUnload", messageLevel.ERROR)
- end
- if (currX > 0) then
- turtleSetOrientation(direction.LEFT)
- while (currX > 0) do
- turtleForward()
- end
- elseif (currX < 0) then
- writeMessage("Current x is less than 0 in returnToStartAndUnload", messageLevel.ERROR)
- end
- end
- if (currY < startHeight) then
- while (currY < startHeight) do
- turtleUp()
- end
- elseif (currY > startHeight) then
- writeMessage("Current height is greater than start height in returnToStartAndUnload", messageLevel.ERROR)
- end
- local slotLoop = 1
- turtleSetOrientation(direction.BACK)
- while (slotLoop < 16) do
- turtle.select(slotLoop) -- Don't bother updating selected slot variable as it will set later in this function
- if ((slotLoop <= noiseBlocksCount) or ((slotLoop == 15) and (lastEmptySlot == 14))) then
- writeMessage("Dropping (n-1) from slot "..slotLoop.." ["..turtle.getItemCount(slotLoop).."]", messageLevel.DEBUG)
- turtle.drop(turtle.getItemCount(slotLoop) - 1)
- else
- writeMessage("Dropping (all) from slot "..slotLoop.." ["..turtle.getItemCount(slotLoop).."]", messageLevel.DEBUG)
- turtle.drop()
- end
- slotLoop = slotLoop + 1
- end
- if (turtle.getItemCount(16) < 64) then
- turtleSetOrientation(direction.LEFT)
- turtle.select(16) -- Don't bother updating selected slot variable as it will set later in this function
- local currFuelItems = turtle.getItemCount(16)
- turtle.suck()
- while ((currFuelItems ~= turtle.getItemCount(16)) and (turtle.getItemCount(16) < 64)) do
- currFuelItems = turtle.getItemCount(16)
- turtle.suck()
- end
- slotLoop = noiseBlocksCount + 1
- while (slotLoop <= lastEmptySlot) do
- turtle.select(slotLoop) -- Don't bother updating selected slot variable as it will set later in this function
- turtle.drop()
- slotLoop = slotLoop + 1
- end
- end
- turtle.select(1)
- currentlySelectedSlot = 1
- if (returnBackToMiningPoint == true) then
- while (currY > levelToReturnTo) do
- turtleDown()
- end
- if ((haveBeenAtZeroZeroOnLayer == false) or (orientationAtZeroZero == direction.FORWARD)) then
- writeMessage("Stored Z: "..storedZ..", currZ: "..currZ, messageLevel.DEBUG)
- if (storedZ > currZ) then
- writeMessage("Orienting forward", messageLevel.DEBUG)
- writeMessage("Moving in z direction", messageLevel.DEBUG)
- turtleSetOrientation(direction.FORWARD)
- while (storedZ > currZ) do
- turtleForward()
- end
- elseif (storedZ < currZ) then
- writeMessage("Stored z is less than current z in returnToStartAndUnload", messageLevel.ERROR)
- end
- if (storedX > currX) then
- writeMessage("Stored X: "..storedX..", currX: "..currX, messageLevel.DEBUG)
- writeMessage("Orienting right", messageLevel.DEBUG)
- writeMessage("Moving in x direction", messageLevel.DEBUG)
- turtleSetOrientation(direction.RIGHT)
- while (storedX > currX) do
- turtleForward()
- end
- elseif (storedX < currX) then
- writeMessage("Stored x is less than current x in returnToStartAndUnload", messageLevel.ERROR)
- end
- else
- if (storedX > currX) then
- writeMessage("Stored X: "..storedX..", currX: "..currX, messageLevel.DEBUG)
- writeMessage("Orienting right", messageLevel.DEBUG)
- writeMessage("Moving in x direction", messageLevel.DEBUG)
- turtleSetOrientation(direction.RIGHT)
- while (storedX > currX) do
- turtleForward()
- end
- elseif (storedX < currX) then
- writeMessage("Stored x is less than current x in returnToStartAndUnload", messageLevel.ERROR)
- end
- writeMessage("Stored Z: "..storedZ..", currZ: "..currZ, messageLevel.DEBUG)
- if (storedZ > currZ) then
- writeMessage("Orienting forward", messageLevel.DEBUG)
- writeMessage("Moving in z direction", messageLevel.DEBUG)
- turtleSetOrientation(direction.FORWARD)
- while (storedZ > currZ) do
- turtleForward()
- end
- elseif (storedZ < currZ) then
- writeMessage("Stored z is less than current z in returnToStartAndUnload", messageLevel.ERROR)
- end
- end
- if (storedY < currY) then
- while (storedY < currY) do
- turtleDown()
- end
- elseif (storedY > currY) then
- while (storedY > currY) do
- turtleUp()
- end
- end
- turtleSetOrientation(storedOrient)
- writeMessage("Have returned to the mining point", messageLevel.DEBUG)
- end
- returningToStart = false
- end
- function emptyChest(suckFn)
- local prevInventoryCount = {}
- local inventoryLoop
- local chestEmptied = false
- for inventoryLoop = 1, 16 do
- prevInventoryCount[inventoryLoop] = turtle.getItemCount(inventoryLoop)
- end
- while (chestEmptied == false) do
- suckFn()
- local newInventoryCount = {}
- for inventoryLoop = 1, 16 do
- newInventoryCount[inventoryLoop] = turtle.getItemCount(inventoryLoop)
- end
- local foundDifferentItemCount = false
- inventoryLoop = 1
- while ((foundDifferentItemCount == false) and (inventoryLoop <= 16)) do
- if (prevInventoryCount[inventoryLoop] ~= newInventoryCount[inventoryLoop]) then
- foundDifferentItemCount = true
- else
- inventoryLoop = inventoryLoop + 1
- end
- end
- chestEmptied = not foundDifferentItemCount
- if (chestEmptied == false) then
- prevInventoryCount = newInventoryCount
- ensureInventorySpace()
- end
- end
- writeMessage("Finished emptying chest", messageLevel.DEBUG)
- end
- function moveTurtle(moveFn, detectFn, digFn, attackFn, compareFn, suckFn, maxDigCount)
- ensureFuel()
- local digCount = 0
- local moveSuccess = false
- if (lastMoveNeededDig == false) then
- moveSuccess = moveFn()
- else
- if (lookForChests == true) then
- if (isNoiseBlock(compareFn) == false) then
- if (detectFn() == true) then
- if (isChestBlock(compareFn) == true) then
- emptyChest (suckFn)
- end
- end
- end
- end
- local digSuccess = digFn()
- if (digSuccess == true) then
- digCount = 1
- end
- moveSuccess = moveFn()
- if (moveSuccess == true) then
- lastMoveNeededDig = digSuccess
- end
- end
- if (moveSuccess == false) then
- while ((moveSuccess == false) and (digCount < maxDigCount)) do
- if (detectFn() == true) then
- if(digCount == 0) then
- if (lookForChests == true) then
- if (isNoiseBlock(compareFn) == false) then
- if (detectFn() == true) then
- if (isChestBlock(compareFn) == true) then
- emptyChest (suckFn)
- end
- end
- end
- end
- else
- sleep(0.1)
- end
- digFn()
- digCount = digCount + 1
- else
- attackFn()
- end
- moveSuccess = moveFn()
- end
- if (digCount == 0) then
- lastMoveNeededDig = false
- else
- lastMoveNeededDig = true
- end
- end
- return moveSuccess
- end
- function turtleForward()
- local returnVal = moveTurtle(turtle.forward, turtle.detect, turtle.dig, turtle.attack, turtle.compare, turtle.suck, maximumGravelStackSupported)
- if (returnVal == true) then
- if (currOrient == direction.FORWARD) then
- currZ = currZ + 1
- elseif (currOrient == direction.LEFT) then
- currX = currX - 1
- elseif (currOrient == direction.BACK) then
- currZ = currZ - 1
- elseif (currOrient == direction.RIGHT) then
- currX = currX + 1
- else
- writeMessage ("Invalid currOrient in turtleForward function", messageLevel.ERROR)
- end
- ensureInventorySpace()
- end
- return returnVal
- end
- function turtleUp()
- local returnVal = moveTurtle(turtle.up, turtle.detectUp, turtle.digUp, turtle.attackUp, turtle.compareUp, turtle.suckUp, maximumGravelStackSupported)
- if (returnVal == true) then
- currY = currY + 1
- ensureInventorySpace()
- end
- return returnVal
- end
- function turtleDown()
- local returnVal
- returnVal = moveTurtle(turtle.down, turtle.detectDown, turtle.digDown, turtle.attackDown, turtle.compareDown, turtle.suckDown, 1)
- if (returnVal == true) then
- currY = currY - 1
- ensureInventorySpace()
- end
- return returnVal
- end
- function turtleBack()
- local returnVal = turtle.back()
- if(returnVal == false) then
- turtle.turnRight()
- turtle.turnRight()
- returnVal = turtleForward()
- turtle.turnRight()
- turtle.turnRight()
- end
- if (returnVal == true) then
- if (currOrient == direction.FORWARD) then
- currZ = currZ - 1
- elseif (currOrient == direction.LEFT) then
- currX = currX + 1
- elseif (currOrient == direction.BACK) then
- currZ = currZ + 1
- elseif (currOrient == direction.RIGHT) then
- currX = currX - 1
- else
- writeMessage ("Invalid currOrient in turtleBack function", messageLevel.ERROR)
- end
- ensureInventorySpace()
- end
- return returnVal
- end
- function turtleTurn(turnDir)
- if (turnDir == direction.LEFT) then
- if (currOrient == direction.FORWARD) then
- currOrient = direction.LEFT
- turtle.turnLeft()
- elseif (currOrient == direction.LEFT) then
- currOrient = direction.BACK
- turtle.turnLeft()
- elseif (currOrient == direction.BACK) then
- currOrient = direction.RIGHT
- turtle.turnLeft()
- elseif (currOrient == direction.RIGHT) then
- currOrient = direction.FORWARD
- turtle.turnLeft()
- else
- writeMessage ("Invalid currOrient in turtleTurn function", messageLevel.ERROR)
- end
- elseif (turnDir == direction.RIGHT) then
- if (currOrient == direction.FORWARD) then
- currOrient = direction.RIGHT
- turtle.turnRight()
- elseif (currOrient == direction.LEFT) then
- currOrient = direction.FORWARD
- turtle.turnRight()
- elseif (currOrient == direction.BACK) then
- currOrient = direction.LEFT
- turtle.turnRight()
- elseif (currOrient == direction.RIGHT) then
- currOrient = direction.BACK
- turtle.turnRight()
- else
- writeMessage ("Invalid currOrient in turtleTurn function", messageLevel.ERROR)
- end
- else
- writeMessage ("Invalid turnDir in turtleTurn function", messageLevel.ERROR)
- end
- end
- function turtleSetOrientation(newOrient)
- if (currOrient ~= newOrient) then
- if (currOrient == direction.FORWARD) then
- if (newOrient == direction.RIGHT) then
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.BACK) then
- turtle.turnRight()
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.LEFT) then
- turtle.turnLeft()
- currOrient = newOrient
- else
- writeMessage ("Invalid newOrient in turtleSetOrientation function", messageLevel.ERROR)
- end
- elseif (currOrient == direction.RIGHT) then
- if (newOrient == direction.BACK) then
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.LEFT) then
- turtle.turnRight()
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.FORWARD) then
- turtle.turnLeft()
- currOrient = newOrient
- else
- writeMessage ("Invalid newOrient in turtleSetOrientation function", messageLevel.ERROR)
- end
- elseif (currOrient == direction.BACK) then
- if (newOrient == direction.LEFT) then
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.FORWARD) then
- turtle.turnRight()
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.RIGHT) then
- turtle.turnLeft()
- currOrient = newOrient
- else
- writeMessage ("Invalid newOrient in turtleSetOrientation function", messageLevel.ERROR)
- end
- elseif (currOrient == direction.LEFT) then
- if (newOrient == direction.FORWARD) then
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.RIGHT) then
- turtle.turnRight()
- turtle.turnRight()
- currOrient = newOrient
- elseif (newOrient == direction.BACK) then
- turtle.turnLeft()
- currOrient = newOrient
- else
- writeMessage ("Invalid newOrient in turtleSetOrientation function", messageLevel.ERROR)
- end
- else
- writeMessage ("Invalid currOrient in turtleTurn function", messageLevel.ERROR)
- end
- end
- end
- function isNoiseBlock(compareFn)
- local returnVal = false
- local seamLoop = 1
- local prevSelectedSlot
- if (currentlySelectedSlot <= noiseBlocksCount) then
- returnVal = compareFn()
- end
- if (returnVal == false) then
- prevSelectedSlot = currentlySelectedSlot
- while((returnVal == false) and (seamLoop <= noiseBlocksCount)) do
- if (seamLoop ~= prevSelectedSlot) then
- turtle.select(seamLoop)
- currentlySelectedSlot = seamLoop
- returnVal = compareFn()
- end
- seamLoop = seamLoop + 1
- end
- end
- return returnVal
- end
- function isChestBlock(compareFn)
- local returnVal = false
- if (lookForChests == true) then
- turtle.select(15)
- currentlySelectedSlot = 15
- returnVal = compareFn()
- end
- return returnVal
- end
- function determineNoiseBlocksCountCount()
- local foundFirstBlankInventorySlot = false
- noiseBlocksCount = 1
- while ((noiseBlocksCount < 16) and (foundFirstBlankInventorySlot == false)) do
- if (turtle.getItemCount(noiseBlocksCount) > 0) then
- noiseBlocksCount = noiseBlocksCount + 1
- else
- foundFirstBlankInventorySlot = true
- end
- end
- noiseBlocksCount = noiseBlocksCount - 1
- if (turtle.getItemCount(15) > 0) then
- lookForChests = true
- lastEmptySlot = 14
- miningOffset = 0
- writeMessage("Looking for chests...", messageLevel.DEBUG)
- else
- lastEmptySlot = 15
- miningOffset = 1
- writeMessage("Ignoring chests...", messageLevel.DEBUG)
- end
- end
- function createQuarry()
- local topMiningLayer = startHeight + ((bottomLayer - startHeight - 2) % 3) - 1 + miningOffset
- if (topMiningLayer > currY) then
- topMiningLayer = topMiningLayer - 3
- end
- local startedLayerToRight = true
- local miningLevel
- for miningLevel = (bottomLayer + miningOffset), topMiningLayer, 3 do
- writeMessage("Mining Layer: "..miningLevel, messageLevel.INFO)
- haveBeenAtZeroZeroOnLayer = false
- if (miningLevel == (bottomLayer + miningOffset)) then
- levelToReturnTo = startHeight
- end
- if (currY > miningLevel) then
- while (currY > miningLevel) do
- turtleDown()
- end
- elseif (currY < miningLevel) then
- while (currY < miningLevel) do
- turtleUp()
- end
- end
- if (miningLevel == (bottomLayer + miningOffset)) then
- levelToReturnTo = (bottomLayer + miningOffset)
- else
- levelToReturnTo = miningLevel - 3
- end
- writeMessage("Mining Level: "..miningLevel..", Bottom Layer: "..bottomLayer..", Mining Offset: "..miningOffset, messageLevel.DEBUG)
- if (miningLevel > (bottomLayer + miningOffset)) then
- if (quarryWidth % 2 == 0) then
- turtleTurn(direction.RIGHT)
- else
- if (startedLayerToRight == true) then
- turtleTurn(direction.LEFT)
- startedLayerToRight = false
- else
- turtleTurn(direction.RIGHT)
- startedLayerToRight = true
- end
- end
- end
- local mineRows
- local onNearSideOfQuarry = true
- local diggingAway = true
- for mineRows = 1, quarryWidth do
- if ((mineRows == 1) and (lookForChests == false)) then
- if (isNoiseBlock(turtle.compareDown) == false) then
- turtle.digDown()
- ensureInventorySpace()
- end
- elseif (mineRows > 1) then
- if (onNearSideOfQuarry == diggingAway) then
- if (startedLayerToRight == true) then
- turtleTurn(direction.LEFT)
- else
- turtleTurn(direction.RIGHT)
- end
- else
- if (startedLayerToRight == true) then
- turtleTurn(direction.RIGHT)
- else
- turtleTurn(direction.LEFT)
- end
- end
- turtleForward()
- if (miningLevel ~= bottomLayer) then
- if (isNoiseBlock(turtle.compareDown) == false) then
- if (lookForChests == false) then
- turtle.digDown()
- ensureInventorySpace()
- elseif (turtle.detectDown() == true) then
- if (isChestBlock(turtle.compareDown) == true) then
- turtleBack()
- turtleDown()
- emptyChest(turtle.suck)
- turtleUp()
- turtleForward()
- turtle.digDown()
- ensureInventorySpace()
- else
- turtle.digDown()
- ensureInventorySpace()
- end
- end
- end
- end
- if (onNearSideOfQuarry == diggingAway) then
- if (startedLayerToRight == true) then
- turtleTurn(direction.LEFT)
- else
- turtleTurn(direction.RIGHT)
- end
- else
- if (startedLayerToRight == true) then
- turtleTurn(direction.RIGHT)
- else
- turtleTurn(direction.LEFT)
- end
- end
- end
- local blocksMined
- for blocksMined = 0, (quarryWidth - 1) do
- if (blocksMined > 0) then
- turtleForward()
- end
- if ((currX == 0) and (currZ == 0)) then
- levelToReturnTo = miningLevel
- haveBeenAtZeroZeroOnLayer = true
- orientationAtZeroZero = currOrient
- end
- if (miningLevel == bottomLayer) then
- local lookForChestsPrev = lookForChests
- lookForChests = false
- lastMoveNeededDig = true
- local moveDownSuccess = turtleDown()
- while (moveDownSuccess == true) do
- moveDownSuccess = turtleDown()
- end
- lastMoveNeededDig = false
- while (currY < bottomLayer) do
- turtleUp()
- end
- lastMoveNeededDig = false
- lookForChests = lookForChestsPrev
- elseif ((blocksMined > 0) and ((currX ~= 0) or (currZ ~= 0))) then
- if (isNoiseBlock(turtle.compareDown) == false) then
- if (lookForChests == false) then
- turtle.digDown()
- ensureInventorySpace()
- elseif (turtle.detectDown() == true) then
- if (isChestBlock(turtle.compareDown) == true) then
- turtleBack()
- turtleDown()
- emptyChest(turtle.suck)
- turtleUp()
- turtleForward()
- turtle.digDown()
- ensureInventorySpace()
- else
- turtle.digDown()
- ensureInventorySpace()
- end
- end
- end
- end
- if ((currX ~= 0) or (currZ ~= 0)) then
- if (isNoiseBlock(turtle.compareUp) == false) then
- if (lookForChests == false) then
- turtle.digUp()
- ensureInventorySpace()
- elseif (turtle.detectUp() == true) then
- if (isChestBlock(turtle.compareUp) == true) then
- emptyChest(turtle.suckUp)
- turtle.digUp()
- ensureInventorySpace()
- else
- turtle.digUp()
- ensureInventorySpace()
- end
- end
- end
- end
- end
- onNearSideOfQuarry = not onNearSideOfQuarry
- end
- diggingAway = not diggingAway
- end
- returnToStartAndUnload(false)
- turtleSetOrientation(direction.FORWARD)
- end
- local args = { ... }
- local paramsOK = true
- turtleId = os.getComputerLabel()
- if (#args == 1) then
- quarryWidth = tonumber(args[1])
- local x, y, z = gps.locate(5)
- startHeight = y
- if (startHeight == nil) then
- writeMessage("Can't locate GPS", messageLevel.FATAL)
- paramsOK = false
- end
- elseif (#args == 2) then
- quarryWidth = tonumber(args[1])
- startHeight = tonumber(args[2])
- else
- writeMessage("Usage: OreQuarry <diameter> <turtleY>", messageLevel.FATAL)
- paramsOK = false
- end
- if (paramsOK == true) then
- if ((startHeight < 6) or (startHeight > 128)) then
- writeMessage("turtleY must be between 6 and 128", messageLevel.FATAL)
- paramsOK = false
- end
- if ((quarryWidth < 2) or (quarryWidth > 64)) then
- writeMessage("diameter must be between 2 and 64", messageLevel.FATAL)
- paramsOK = false
- end
- end
- if (paramsOK == true) then
- writeMessage("** Ore Quarry v0.53 by AustinKK **", messageLevel.INFO)
- currX = 0
- currY = startHeight
- currZ = 0
- currOrient = direction.FORWARD
- determineNoiseBlocksCountCount()
- if ((noiseBlocksCount == 0) or (noiseBlocksCount > 13)) then
- writeMessage("No noise blocks have been been added. Please place blocks that the turtle should not mine (e.g. Stone, Dirt, Gravel etc.) in the first few slots of the turtle\'s inventory. The first empty slot signifies the end of the noise blocks.", messageLevel.FATAL)
- else
- turtle.select(1)
- currentlySelectedSlot = 1
- createQuarry()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement