Guest User

Untitled

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