Spytox

CarryPipe

Apr 5th, 2025 (edited)
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.26 KB | Gaming | 0 0
  1. -- Configuration
  2. chunkWidth = 5
  3. forwardLimit = 20
  4.  
  5. criticalFuelLevel = chunkWidth * 3 + forwardLimit * 3 + 6 * chunkWidth * 80
  6. necessaryFuelLevel = criticalFuelLevel * 5
  7.  
  8. ----------------
  9. depth = 0
  10. forwardSteps = 0
  11. sidewardSteps = 0
  12.  
  13. ignoredBlocks = { "minecraft:dirt", "minecraft:stone", "minecraft:cobblestone", "minecraft:gravel", "minecraft:grass", "minecraft:bedrock", "minecraft:chest", "buildcrafttransport:pipe_holder" }
  14.  
  15. function moveDown()
  16.     turtle.digDown()
  17.     if turtle.down() then
  18.         depth = depth + 1
  19.         return true
  20.     else
  21.         return false
  22.     end
  23. end
  24.  
  25. function turn180degrees()
  26.     turtle.turnLeft()
  27.     turtle.turnLeft()
  28. end
  29.  
  30. function needsToEmptyInventory()
  31.     return (turtle.getItemCount(16) > 0)
  32. end
  33.  
  34. function needsToRefuel()
  35.     return (turtle.getFuelLevel() < criticalFuelLevel)
  36. end
  37.  
  38. function isIgnoredBlock(name)
  39.     for index, block in ipairs(ignoredBlocks) do
  40.        if block == name then return true end
  41.     end
  42.     return false
  43. end
  44.  
  45. function forceMoveOneBlock()
  46.     while not turtle.forward() do
  47.         turtle.attack()
  48.         turtle.dig()
  49.     end
  50. end
  51.  
  52. function moveForward(stepCount, stepWidth)
  53.     i = 0
  54.     while i < stepCount do
  55.         i = i + 1
  56.         for k = 1, stepWidth do
  57.             forceMoveOneBlock()
  58.         end
  59.     end
  60. end
  61.  
  62. function dumpInventory()
  63.     turtle.up()
  64.     turtle.up()
  65.     turtle.forward()  
  66.     turtle.forward()
  67.  
  68.     for i = 4 , 16 do
  69.         turtle.select(i)
  70.         turtle.dropDown()
  71.     end
  72.     if turtle.getItemCount(1) > 0 then -- obsolete?
  73.         turtle.select(1)
  74.         turtle.dropDown()
  75.     end
  76.     turtle.select(2)
  77.     turtle.back()
  78.     turtle.back()
  79.     turtle.down()
  80.     turtle.down()
  81. end
  82.  
  83. function refuel()
  84.     turtle.up()
  85.     turtle.up()
  86.     turtle.up()
  87.     moveForward(forwardSteps, 3)
  88.  
  89.     turtle.forward()
  90.     turtle.forward()
  91.     turtle.select(1)
  92.     while turtle.getFuelLevel() < turtle.getFuelLimit() do
  93.         if turtle.suck(1) then
  94.             turtle.refuel()
  95.         elseif turtle.getFuelLevel() < necessaryFuelLevel then
  96.             print("Error: Need more fuel")
  97.             os.sleep(2)
  98.         else
  99.             break
  100.         end
  101.     end
  102.     turtle.back()
  103.     turtle.back()
  104.  
  105.     print("Finished Refuel: ", turtle.getFuelLevel(), " Fuel available")
  106.     turtle.select(2)
  107.  
  108.     turn180degrees()
  109.     moveForward(forwardSteps, 3)
  110.  
  111.     turtle.down()
  112.     turtle.down()
  113.     turtle.down()
  114.     turn180degrees()
  115.  
  116.     return true
  117. end
  118.  
  119. function emptyInventory()
  120.     for i = 1, depth do
  121.         while not turtle.up() do
  122.             turtle.attackUp()
  123.             turtle.digUp()
  124.         end
  125.     end
  126.  
  127.     turn180degrees()
  128.     moveForward(sidewardSteps, 4)
  129.     turtle.turnLeft()
  130.  
  131.     dumpInventory()
  132.    
  133.     turtle.turnLeft()
  134.     moveForward(sidewardSteps, 4)
  135.    
  136.     for i = 1, depth do
  137.         while not turtle.down() do
  138.              turtle.attackDown()
  139.              turtle.digDown()
  140.         end
  141.     end
  142. end
  143.  
  144. function checkBlock()
  145.     local success, data = turtle.inspect()
  146.     if success then
  147.         if not isIgnoredBlock(data.name) then
  148.             turtle.dig()
  149.         end
  150.     end
  151. end
  152.  
  153. function clearSorrounding()
  154.     for i = 1 , 4 do
  155.         checkBlock()
  156.         turtle.turnLeft()
  157.     end
  158. end
  159.  
  160.  
  161. function placeSafetyBlock()
  162.     turtle.placeDown()
  163. end
  164.  
  165. function clearShaft()
  166.     while moveDown() do
  167.         clearSorrounding()
  168.         if needsToEmptyInventory() then emptyInventory() end
  169.     end
  170.    
  171.     while depth > 0 do
  172.         while not turtle.up() do
  173.             turtle.attackUp()
  174.             turtle.digUp()
  175.         end
  176.         depth = depth - 1
  177.     end
  178.     placeSafetyBlock()
  179. end
  180.  
  181. function moveForwardAndCarryPipe()
  182.     turtle.select(4)
  183.     turtle.forward()
  184.     turtle.dig()
  185.    
  186.     for i = 1, 3 do
  187.         turtle.select(2)
  188.         placeSafetyBlock()
  189.         turtle.turnLeft()
  190.         turtle.place()
  191.         turtle.turnRight()
  192.         turtle.turnRight()
  193.         turtle.place()
  194.         turtle.turnLeft()
  195.  
  196.         turtle.select(3)
  197.  
  198.         turtle.place()
  199.  
  200.         turn180degrees()
  201.         forceMoveOneBlock()
  202.         turn180degrees()
  203.     end
  204.  
  205.     turtle.forward()
  206.     turtle.up()
  207.     turtle.select(2)
  208.     turtle.place()
  209.     turtle.turnRight()
  210.     turtle.place()
  211.     turtle.turnRight()
  212.     turtle.turnRight()
  213.     turtle.place()
  214.     turtle.turnRight()
  215.     turtle.back()
  216.     turtle.down()
  217.  
  218.     turtle.select(4)
  219.     turtle.place()
  220.     turtle.select(2)
  221.  
  222.     turn180degrees()
  223.     forceMoveOneBlock()
  224.     turn180degrees()
  225. end
  226.  
  227. function start()
  228.     turtle.refuel()
  229.     refuel()
  230.     turn180degrees()
  231.  
  232.     while forwardSteps < forwardLimit do
  233.         turtle.turnRight()
  234.  
  235.         clearShaft()
  236.         while sidewardSteps < chunkWidth do
  237.             moveForward(1, 4)    
  238.             sidewardSteps = sidewardSteps + 1
  239.             clearShaft()
  240.         end
  241.  
  242.         turn180degrees()
  243.         moveForward(sidewardSteps, 4)
  244.         sidewardSteps = 0
  245.        
  246.         turtle.turnLeft()
  247.         dumpInventory()
  248.         if needsToRefuel() then
  249.             refuel()
  250.         else
  251.             os.sleep(2)
  252.         end
  253.  
  254.         moveForwardAndCarryPipe()
  255.         turn180degrees()
  256.  
  257.         forwardSteps = forwardSteps + 1
  258.     end
  259. end
  260.  
  261. start()
Add Comment
Please, Sign In to add comment