Guest User

tunnel

a guest
Jul 29th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.97 KB | None | 0 0
  1.  
  2. local tArgs = { ... }
  3. if #tArgs ~= 1 then
  4.     print( "Usage: tunnel <length>" )
  5.     return
  6. end
  7.  
  8. -- Mine in a quarry pattern until we hit something we can't dig
  9. local length = tonumber( tArgs[1] )
  10. if length < 1 then
  11.     print( "Tunnel length must be positive" )
  12.     return
  13. end
  14.    
  15. local depth = 0
  16. local collected = 0
  17.  
  18. local function collect()
  19.     collected = collected + 1
  20.     if math.fmod(collected, 25) == 0 then
  21.         print( "Mined "..collected.." items." )
  22.     end
  23. end
  24.  
  25. local function tryDig()
  26.     while turtle.detect() do
  27.         if turtle.dig() then
  28.             collect()
  29.             sleep(0.5)
  30.         else
  31.             return false
  32.         end
  33.     end
  34.     return true
  35. end
  36.  
  37. local function tryDigUp()
  38.     while turtle.detectUp() do
  39.         if turtle.digUp() then
  40.             collect()
  41.             sleep(0.5)
  42.         else
  43.             return false
  44.         end
  45.     end
  46.     return true
  47. end
  48.  
  49. local function tryDigDown()
  50.     while turtle.detectDown() do
  51.         if turtle.digDown() then
  52.             collect()
  53.             sleep(0.5)
  54.         else
  55.             return false
  56.         end
  57.     end
  58.     return true
  59. end
  60.  
  61. local function refuel()
  62.     local fuelLevel = turtle.getFuelLevel()
  63.     if fuelLevel == "unlimited" or fuelLevel > 0 then
  64.         return
  65.     end
  66.    
  67.     local function tryRefuel()
  68.         for n=1,16 do
  69.             if turtle.getItemCount(n) > 0 then
  70.                 turtle.select(n)
  71.                 if turtle.refuel(1) then
  72.                     turtle.select(1)
  73.                     return true
  74.                 end
  75.             end
  76.         end
  77.         turtle.select(1)
  78.         return false
  79.     end
  80.    
  81.     if not tryRefuel() then
  82.         print( "Add more fuel to continue." )
  83.         while not tryRefuel() do
  84.             os.pullEvent( "turtle_inventory" )
  85.         end
  86.         print( "Resuming Tunnel." )
  87.     end
  88. end
  89.  
  90. local function tryUp()
  91.     refuel()
  92.     while not turtle.up() do
  93.         if turtle.detectUp() then
  94.             if not tryDigUp() then
  95.                 return false
  96.             end
  97.         elseif turtle.attackUp() then
  98.             collect()
  99.         else
  100.             sleep( 0.5 )
  101.         end
  102.     end
  103.     return true
  104. end
  105.  
  106. local function tryDown()
  107.     refuel()
  108.     while not turtle.down() do
  109.         if turtle.detectDown() then
  110.             if not tryDigDown() then
  111.                 return false
  112.             end
  113.         elseif turtle.attackDown() then
  114.             collect()
  115.         else
  116.             sleep( 0.5 )
  117.         end
  118.     end
  119.     return true
  120. end
  121.  
  122. local function tryForward()
  123.     refuel()
  124.     while not turtle.forward() do
  125.         if turtle.detect() then
  126.             if not tryDig() then
  127.                 return false
  128.             end
  129.         elseif turtle.attack() then
  130.             collect()
  131.         else
  132.             sleep( 0.5 )
  133.         end
  134.     end
  135.     return true
  136. end
  137.  
  138. print( "Tunnelling..." )
  139.  
  140. for n=1,length do
  141.     turtle.placeDown()
  142.     tryDigUp()
  143.     turtle.turnLeft()
  144.     tryDig()
  145.     tryUp()
  146.     tryDig()
  147.     turtle.turnRight()
  148.     turtle.turnRight()
  149.     tryDig()
  150.     tryDown()
  151.     tryDig()
  152.     turtle.turnLeft()
  153.    
  154.     if n<length then
  155.         tryDig()
  156.         if not tryForward() then
  157.             print( "Aborting Tunnel." )
  158.             break
  159.         end
  160.     else
  161.         print( "Tunnel complete." )
  162.     end
  163.  
  164. end
  165.  
  166. --[[
  167. print( "Returning to start..." )
  168.  
  169. -- Return to where we started
  170. turtle.turnLeft()
  171. turtle.turnLeft()
  172. while depth > 0 do
  173.     if turtle.forward() then
  174.         depth = depth - 1
  175.     else
  176.         turtle.dig()
  177.     end
  178. end
  179. turtle.turnRight()
  180. turtle.turnRight()
  181. ]]
  182.  
  183. print( "Tunnel complete." )
  184. print( "Mined "..collected.." items total." )
Add Comment
Please, Sign In to add comment