Advertisement
addis2123

dig.lua

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