Advertisement
Guest User

Untitled

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