mouse03f

highway

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