Advertisement
Guest User

ComputerCraft FastTunnel (modified default tunnel program)

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