Advertisement
KaosKlaus

U-Turn Tunnel

Mar 8th, 2014
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.44 KB | None | 0 0
  1. -- ******** PRE-INIT *********
  2. --local tArgs = { ... }
  3. --if #tArgs ~= 1 then
  4. --  print( "Usage: mine <length>" )
  5. --  return
  6. --end
  7. --
  8. --local length = tonumber( tArgs[1] )
  9.  
  10. local length = 74
  11.  
  12. if length % 2 ~= 0 then
  13.     length = length+1
  14. end
  15.  
  16. -- ******** FUNCTIONS *********
  17.  
  18. local function tryDig()
  19.     while turtle.detect() do
  20.         if turtle.dig() then
  21.             sleep(0.5)
  22.         else
  23.             return false
  24.         end
  25.     end
  26.     return true
  27. end
  28.  
  29. local function tryDigUp()
  30.     while turtle.detectUp() do
  31.         if turtle.digUp() then
  32.             sleep(0.5)
  33.         else
  34.             return false
  35.         end
  36.     end
  37.     return true
  38. end
  39.  
  40. local function tryDigDown()
  41.     while turtle.detectDown() do
  42.         if turtle.digDown() then
  43.             sleep(0.5)
  44.         else
  45.             return false
  46.         end
  47.     end
  48.     return true
  49. end
  50.  
  51. local function refuel()
  52.     local fuelLevel = turtle.getFuelLevel()
  53.     if fuelLevel == "unlimited" or fuelLevel > 0 then
  54.         return
  55.     end
  56.    
  57.     local function tryRefuel()
  58.         for n=1,16 do
  59.             if turtle.getItemCount(n) > 0 then
  60.                 turtle.select(n)
  61.                 if turtle.refuel(1) then
  62.                     turtle.select(1)
  63.                     return true
  64.                 end
  65.             end
  66.         end
  67.         turtle.select(1)
  68.         return false
  69.     end
  70.    
  71.     if not tryRefuel() then
  72.         print( "Add more fuel to continue." )
  73.         while not tryRefuel() do
  74.             sleep(1)
  75.         end
  76.         print( "Resuming Tunnel." )
  77.     end
  78. end
  79.  
  80. local function tryUp()
  81.     refuel()
  82.     while not turtle.up() do
  83.         if turtle.detectUp() then
  84.             if not tryDigUp() then
  85.                 return false
  86.             end
  87.         elseif turtle.attackUp() then
  88.         else
  89.             sleep( 0.5 )
  90.         end
  91.     end
  92.     return true
  93. end
  94.  
  95. local function tryDown()
  96.     refuel()
  97.     while not turtle.down() do
  98.         if turtle.detectDown() then
  99.             if not tryDigDown() then
  100.                 return false
  101.             end
  102.         elseif turtle.attackDown() then
  103.         else
  104.             sleep( 0.5 )
  105.         end
  106.     end
  107.     return true
  108. end
  109.  
  110. local function tryForward()
  111.     refuel()
  112.     while not turtle.forward() do
  113.         if turtle.detect() then
  114.             if not tryDig() then
  115.                 return false
  116.             end
  117.         elseif turtle.attack() then
  118.         else
  119.             sleep( 0.5 )
  120.         end
  121.     end
  122.     return true
  123. end
  124.  
  125. local function iteminSlot(Slot)
  126.     if turtle.getItemCount(Slot) > 0 then
  127.         return true
  128.     else
  129.         return false
  130.     end
  131. end
  132.  
  133. local function placeTorch()
  134.     refuel()
  135.     if iteminSlot(16) then
  136.         turtle.select(16)
  137.         if not turtle.place() then
  138.             turtle.forward()
  139.             tryDigDown()
  140.             if not turtle.placeDown() then
  141.                 turtle.down()
  142.                 turtle.select(1)
  143.                 turtle.placeDown()
  144.                 turtle.select(16)
  145.                 turtle.up()
  146.                 turtle.placeDown()
  147.             end
  148.             turtle.back()
  149.         end
  150.     end
  151.     turtle.select(1)
  152. end
  153.  
  154. local function tunnel(length, torch)
  155.     local nextTorch = 0
  156.     if torch ~= false then
  157.         nextTorch = torch
  158.         torch = true
  159.     end
  160.     turtle.select(1)
  161.    
  162.     for n=1,length do
  163.         turtle.placeDown()
  164.         tryDigUp()
  165.         turtle.turnLeft()
  166.         tryDig()
  167.         tryUp()
  168.         tryDig()
  169.         if torch == true and nextTorch == 0 then placeTorch() end
  170.         turtle.turnRight()
  171.         turtle.turnRight()
  172.         tryDig()
  173.         if torch == true and nextTorch == 0 then
  174.             placeTorch()
  175.             nextTorch = 9
  176.         end
  177.         tryDown()
  178.         tryDig()
  179.         turtle.turnLeft()
  180.    
  181.         if n<length then
  182.             tryDig()
  183.             if not tryForward() then
  184.                 return false
  185.             end
  186.              if torch == true then nextTorch = nextTorch -1 end
  187.         else
  188.             return true
  189.         end
  190.     end
  191. end
  192.  
  193.  
  194. -- ******** MAIN *********
  195.  
  196. if not tunnel(length/2, 0) then
  197.     print( "Aborting Mining." )
  198.     return false
  199. end
  200. tryDig()
  201. tryForward()
  202. tunnel(2, false)
  203. turtle.turnRight()
  204. tunnel(7, 3)
  205. turtle.turnRight()
  206. if not tunnel(length/2+2, 2) then
  207.     print( "Aborting Mining." )
  208.     return false
  209. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement