Advertisement
zkb1325

Minecraft ComputerCraft Tunnel

Sep 8th, 2022
1,667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.48 KB | None | 0 0
  1. shell.run("clear")
  2.  
  3. while tunnelLength == nil do
  4.     term.setCursorPos(1, 1)
  5.     term.clearLine()
  6.     term.write("Tunnel Length: ")
  7.     tunnelLength = tonumber(read())
  8. end
  9.  
  10. while tunnelWidth == nil do
  11.     term.setCursorPos(1, 2)
  12.     term.clearLine()
  13.     term.write("Tunnel Width: ")
  14.     tunnelWidth = tonumber(read())
  15. end
  16.  
  17. while tunnelHeight == nil do
  18.     term.setCursorPos(1, 3)
  19.     term.clearLine()
  20.     term.write("Tunnel Height: ")
  21.     tunnelHeight = tonumber(read())
  22. end
  23.  
  24. -- while torchSpacing == nil do
  25. --     term.setCursorPos(1, 4)
  26. --     term.clearLine()
  27. --     term.write("Torch spacing (0 for no torches): ")
  28. --     torchSpacing = tonumber(read())
  29. -- end
  30.  
  31. local estimatedFuelUsage = tunnelWidth*2*tunnelLength*tunnelHeight
  32. estimatedFuelUsage = tunnelHeight*2*tunnelLength + estimatedFuelUsage + tunnelLength
  33. estimatedFuelUsage = math.ceil(estimatedFuelUsage)
  34.  
  35. term.clear()
  36. term.setCursorPos(1,1)
  37. print("This turtle will dig a tunnel "..tunnelLength.." blocks long, "..tunnelWidth.." blocks wide, and "..tunnelHeight.." blocks tall")
  38. -- if torchSpacing == 0 then
  39. --     print("No torches will be placed")
  40. -- else
  41. --     print("A torch will be placed every "..torchSpacing.." blocks")
  42. -- end
  43. print("")
  44. print("Current fuel: "..turtle.getFuelLevel())
  45. print("Estimated fuel usage: "..estimatedFuelUsage)
  46. if turtle.getFuelLevel() < estimatedFuelUsage then
  47.     print("!!! Turtle may run out of fuel before finishing !!!")
  48. end
  49. print("")
  50. print("Press ENTER to confirm or type <restart> and press enter to start over or type <exit> and press enter to exit program")
  51. term.write("Confirm: ")
  52. confirmStart = read()
  53. if confirmStart == "restart" then
  54.     shell.run(shell.getRunningProgram())
  55. end
  56. if confirmStart == "exit" then
  57.     shell.exit()
  58. end
  59. term.clear()
  60. term.setCursorPos(1, 1)
  61.  
  62. local fuelUsed = 0
  63. local turtleLengthProgress = 0
  64. local blocksBroken = 0
  65. local blocksToBreak = tunnelWidth*tunnelHeight*tunnelLength
  66. local currentTunnelLength = 1
  67.  
  68. function digHeight(h)
  69.     for u = 1, h-1 do
  70.         turtle.digUp()
  71.         blocksBroken = blocksBroken + 1
  72.         turtle.up()
  73.         fuelUsed = fuelUsed + 1
  74.         printTurtleStats()
  75.     end
  76. end
  77.  
  78. function digWidth(w)
  79.     for u = 1, w-1 do
  80.         turtle.dig()
  81.         blocksBroken = blocksBroken + 1
  82.         turtle.forward()
  83.         fuelUsed = fuelUsed + 1
  84.         printTurtleStats()
  85.     end
  86. end
  87.  
  88. function reverse(w)
  89.     for u = 1, w-1 do
  90.         turtle.back()
  91.         fuelUsed = fuelUsed + 1
  92.         printTurtleStats()
  93.     end
  94. end
  95.  
  96. function digOutNextSection()
  97.     turtle.dig()
  98.     blocksBroken = blocksBroken + 1
  99.     turtle.forward()
  100.     fuelUsed = fuelUsed + 1
  101.  
  102.     digHeight(tunnelHeight)
  103.     turtle.turnRight()
  104.     for h = 1, tunnelHeight do
  105.         digWidth(tunnelWidth)
  106.         reverse(tunnelWidth)
  107.         turtle.down()
  108.         fuelUsed = fuelUsed + 1
  109.     end
  110.     turtle.turnLeft()
  111. end
  112.  
  113. function moveTurtleToChest()
  114.     turtle.turnRight()
  115.     turtle.turnRight()
  116.     for i = 1, turtleLengthProgress do
  117.         turtle.forward()
  118.         fuelUsed = fuelUsed + 1
  119.     end
  120. end
  121.  
  122. function moveTurtleBackToFront()
  123.     turtle.turnLeft()
  124.     turtle.turnLeft()
  125.     for i = 1, turtleLengthProgress do
  126.         turtle.forward()
  127.         fuelUsed = fuelUsed + 1
  128.     end
  129. end
  130.  
  131. function emptyTurtleToChest()
  132.     for i = 1, 16 do
  133.         turtle.select(i)
  134.         turtle.drop()
  135.         i = i + 1
  136.     end
  137. end
  138.  
  139. function turtleShouldEmpty()
  140.     local occupiedSlots = 0
  141.     for i = 1, 16 do
  142.         if turtle.getItemCount(i) > 0 then
  143.             occupiedSlots = occupiedSlots + 1
  144.         end
  145.         i = i + 1
  146.     end
  147.     return 16 - occupiedSlots <= 4
  148. end
  149.  
  150. function printTurtleStats()
  151.     term.clear()
  152.     term.setCursorPos(1, 1)
  153.     local percent = math.ceil(blocksBroken/blocksToBreak*100)
  154.     print("Progress "..percent.."% complete ("..blocksBroken.."/"..blocksToBreak..")")
  155.     print("Fuel used: "..fuelUsed.."/"..estimatedFuelUsage)
  156.     print("Remaining estimated fuel usage: "..estimatedFuelUsage-fuelUsed)
  157.     print("Fuel remaining: "..turtle.getFuelLevel())
  158. end
  159.  
  160. for tl = 1, tunnelLength-1 do
  161.     digOutNextSection()
  162.     printTurtleStats()
  163.     turtleLengthProgress = turtleLengthProgress + 1
  164.     if turtleShouldEmpty() then
  165.         print("Going to empty inventory")
  166.         moveTurtleToChest()
  167.         emptyTurtleToChest()
  168.         moveTurtleBackToFront()
  169.     end
  170.     currentTunnelLength = currentTunnelLength + 1
  171. end
  172.  
  173. moveTurtleToChest()
  174. printTurtleStats()
  175. emptyTurtleToChest()
  176.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement