TerrificTable55

turtle.tunnel with return

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