Advertisement
CBredlow

3x3improved

Jun 19th, 2025
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.57 KB | Source Code | 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. local length = tonumber(tArgs[1])
  14. if length < 1 then
  15.     print("Tunnel length must be positive")
  16.     return
  17. end
  18.  
  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 tryMove(moveFunc, digFunc, attackFunc)
  94.     refuel()
  95.     while not moveFunc() do
  96.         if turtle.detect() then
  97.             if not digFunc() then
  98.                 return false
  99.             end
  100.         elseif attackFunc and attackFunc() then
  101.             collect()
  102.         else
  103.             sleep(0.5)
  104.         end
  105.     end
  106.     return true
  107. end
  108.  
  109. local function digLayer()
  110.     -- Dig the 3x3 layer
  111.     tryDigUp() -- Top center
  112.     tryDigDown() -- Bottom center
  113.     turtle.turnLeft()
  114.     tryDig() -- Left center
  115.     tryMove(turtle.up, tryDig, turtle.attack) -- Top left
  116.     tryDig()
  117.     turtle.turnRight()
  118.     turtle.turnRight()
  119.     tryDig() -- Top right
  120.     tryMove(turtle.down, tryDig, turtle.attack)
  121.     tryDig() -- Bottom right
  122.     tryMove(turtle.down, tryDig, turtle.attack)
  123.     tryDig() -- Bottom left
  124.     turtle.turnLeft()
  125.     turtle.turnLeft()
  126.     tryDig() -- Left bottom
  127.     turtle.turnRight()
  128.     tryMove(turtle.up, tryDig, turtle.attack) -- Return to center
  129. end
  130.  
  131. print("Tunnelling...")
  132.  
  133. for n = 1, length do
  134.     digLayer()
  135.     if n < length then
  136.         if not tryMove(turtle.forward, tryDig, turtle.attack) then
  137.             print("Aborting Tunnel.")
  138.             break
  139.         end
  140.     else
  141.         print("Tunnel complete.")
  142.     end
  143. end
  144.  
  145. -- Return to start
  146. local depth = length
  147. turtle.turnLeft()
  148. turtle.turnLeft()
  149. while depth > 0 do
  150.     if not tryMove(turtle.forward, tryDig, turtle.attack) then
  151.         print("Unable to return to start.")
  152.         break
  153.     end
  154.     depth = depth - 1
  155. end
  156. turtle.turnRight()
  157. turtle.turnRight()
  158.  
  159. print("Tunnel complete.")
  160. print("Mined " .. collected .. " items total.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement