Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- branch
- -- Creates a 1x1x3 tunnel of the length specified by the user
- -- then mines 3 blocks to the right and tunnels back
- -- Torches, if supplied, will be placed on the right-hand wall at 8 block intervals
- -- Written by HarvDad, March 2014
- args = {...}
- nArgs = #args
- print("branch: Rev 1.0")
- loop = 0;
- x = 0
- y = 0
- z = 0
- face = 0
- minimumFuel = 100
- missionMessage = "Mission complete."
- abort = false
- local currentFuelLevel = turtle.getFuelLevel()
- if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
- print("Creates a 2x2 tunnel with sealed sides.")
- print("Place fuel in slot 1")
- print("Place patch material (like cobblestone) in slot 2.")
- print("If torches are desired, place torches in slot 16.")
- print("Usage: branch <length>")
- return
- end
- if nArgs ~= 1 then
- print("Usage: branch <length>")
- return
- end
- length = tonumber(args[1])
- if length == nil then
- print("\"", args[1], "\" is not a valid length")
- return
- end
- if length < 1 then
- print("length must be a positive number greater than zero")
- end
- targetArea = length
- areaCovered = 1;
- function left()
- if face == 0 then face = 1 turtle.turnLeft() return end
- if face == 1 then face = 2 turtle.turnLeft() return end
- if face == 2 then face = 3 turtle.turnLeft() return end
- if face == 3 then face = 0 turtle.turnLeft() return end
- print("function left\(\): Bad face value: ", face)
- end
- function right()
- if face == 0 then face = 3 turtle.turnRight() return end
- if face == 1 then face = 0 turtle.turnRight() return end
- if face == 2 then face = 1 turtle.turnRight() return end
- if face == 3 then face = 2 turtle.turnRight() return end
- print("function right\(\): Bad face value: ", face)
- end
- function up()
- success = false
- repeat
- while turtle.detectUp() do -- This loop added in case of falling sand or whatever
- turtle.digUp()
- end
- success = turtle.up()
- until success
- y = y+1
- end
- function rise(nBlocks)
- local i
- for i=1,nBlocks do
- up()
- end
- end
- function descend(nBlocks)
- local i
- for i=1,nBlocks do
- down()
- end
- end
- function down()
- if turtle.detectDown() then
- turtle.digDown()
- end
- turtle.down()
- y = y-1
- end
- function forward()
- while turtle.detect() do -- This loop added in case of falling sand or whatever
- turtle.dig()
- end
- for i=1,10 do
- if turtle.forward() then
- break
- end
- turtle.attack()
- sleep(2)
- end
- if face == 0 then z = z+1 return end
- if face == 1 then x = x-1 return end
- if face == 2 then z = z-1 return end
- if face == 3 then x = x+1 return end
- end
- function patch()
- turtle.select(2)
- turtle.place()
- end
- function patchUp()
- turtle.select(2)
- turtle.placeUp()
- end
- function patchDown()
- turtle.select(2)
- turtle.placeDown()
- end
- addTorch = true
- torchSpacing = 3
- torchSpot = 7
- function mineForward()
- forward()
- while turtle.detectUp() do -- This loop added in case of falling sand or whatever
- turtle.digUp()
- turtle.suckUp()
- end
- if turtle.detectDown() then
- turtle.digDown()
- turtle.suckDown()
- end
- if addTorch then
- if (torchSpot % torchSpacing) == 0 then
- left()
- left()
- turtle.select(16)
- turtle.place()
- right()
- right()
- end
- end
- torchSpot = torchSpot + 1
- end
- function setFace(f)
- if f == 0 then
- if face == 0 then return end
- if face == 1 then right() return end
- if face == 2 then right() right() return end
- if face == 3 then left() return end
- end
- if f == 1 then
- if face == 0 then left() return end
- if face == 1 then return end
- if face == 2 then right() return end
- if face == 3 then right() right() return end
- end
- if f == 2 then
- if face == 0 then left() left() return end
- if face == 1 then left() return end
- if face == 2 then return end
- if face == 3 then right() return end
- end
- if f == 3 then
- if face == 0 then right() return end
- if face == 1 then left() left() return end
- if face == 2 then left() return end
- if face == 3 then return end
- end
- end
- function checkFuel()
- if currentFuelLevel == "unlimited" then
- return true
- end
- if currentFuelLevel < minimumFuel then
- if not turtle.refuel(200) then
- areaCovered = targetArea
- missionMessage = "Mission aborted due to low fuel."
- abort = true
- return false
- end
- end
- return true
- end
- function home(targetY)
- -- print("home:face ", face, ", x = ", x, ", z = ", z)
- if x < 0 then
- setFace(3)
- while x < 0 do
- forward()
- end
- else
- if x > 0 then
- setFace(1)
- while x > 0 do
- forward()
- end
- end
- end
- if z < 0 then
- setFace(0)
- while z < 0 do
- forward()
- end
- else
- if z > 0 then
- setFace(2)
- while z > 0 do
- forward()
- end
- end
- end
- end
- function dump()
- for i=2,14 do
- turtle.select(i)
- turtle.dropDown()
- end
- end
- function branchLoop()
- torchSpot = 7
- local i
- for i=1,length do
- mineForward()
- end
- right()
- for i=1,3 do
- mineForward()
- end
- right()
- for i=1,length do
- mineForward()
- end
- setFace(0)
- down()
- if turtle.detectDown() then
- turtle.select(15)
- if not turtle.compareDown() then
- turtle.digDown()
- turtle.suckDown()
- turtle.placeDown()
- end
- end
- if turtle.compareDown() then
- dump()
- end
- end
- -- MAIN PROGRAM
- turtle.select(1)
- print("Current Fuel Level: ", currentFuelLevel)
- if currentFuelLevel ~= "unlimited" then
- if currentFuelLevel < minimumFuel then
- if not turtle.refuel() then
- print("No fuel")
- return
- end
- end
- end
- for loop=1,5 do
- addTorch = false
- rise(1)
- for i=1,5 do
- mineForward()
- end
- turtle.back()
- turtle.back()
- left()
- addTorch = true
- branchLoop()
- end
- print(missionMessage, " Current fuel level is ", turtle.getFuelLevel())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement