overshoot

Tunnel and Return

Jun 28th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.33 KB | None | 0 0
  1.  
  2. local tArgs = { ... }
  3. if #tArgs ~= 1 then
  4. print( "Usage: tunnel <length>" )
  5. return
  6. end
  7.  
  8. -- Mine in a quarry pattern until we hit something we can't dig
  9. local length = tonumber( tArgs[1] )
  10. if length < 1 then
  11. print( "Tunnel length must be positive" )
  12. return
  13. end
  14.  
  15. local depth = 0
  16. local collected = 0
  17.  
  18. local function collect()
  19. collected = collected + 1
  20. if math.fmod(collected, 25) == 0 then
  21. print( "Mined "..collected.." items." )
  22. end
  23. end
  24.  
  25. local function tryDig()
  26. while turtle.detect() do
  27. if turtle.dig() then
  28. collect()
  29. sleep(0.5)
  30. else
  31. return false
  32. end
  33. end
  34. return true
  35. end
  36.  
  37. local function tryDigUp()
  38. while turtle.detectUp() do
  39. if turtle.digUp() then
  40. collect()
  41. sleep(0.5)
  42. else
  43. return false
  44. end
  45. end
  46. return true
  47. end
  48.  
  49. local function tryDigDown()
  50. while turtle.detectDown() do
  51. if turtle.digDown() then
  52. collect()
  53. sleep(0.5)
  54. else
  55. return false
  56. end
  57. end
  58. return true
  59. end
  60.  
  61. local function refuel()
  62. local fuelLevel = turtle.getFuelLevel()
  63. if fuelLevel == "unlimited" or fuelLevel > 0 then
  64. return
  65. end
  66.  
  67. local function tryRefuel()
  68. for n=1,16 do
  69. if turtle.getItemCount(n) > 0 then
  70. turtle.select(n)
  71. if turtle.refuel(1) then
  72. turtle.select(1)
  73. return true
  74. end
  75. end
  76. end
  77. turtle.select(1)
  78. return false
  79. end
  80.  
  81. if not tryRefuel() then
  82. print( "Add more fuel to continue." )
  83. while not tryRefuel() do
  84. os.pullEvent( "turtle_inventory" )
  85. end
  86. print( "Resuming Tunnel." )
  87. end
  88. end
  89.  
  90. local function tryUp()
  91. refuel()
  92. while not turtle.up() do
  93. if turtle.detectUp() then
  94. if not tryDigUp() then
  95. return false
  96. end
  97. elseif turtle.attackUp() then
  98. collect()
  99. else
  100. sleep( 0.5 )
  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. sleep( 0.5 )
  117. end
  118. end
  119. return true
  120. end
  121.  
  122. local function tryForward()
  123. refuel()
  124. while not turtle.forward() do
  125. if turtle.detect() then
  126. if not tryDig() then
  127. return false
  128. end
  129. elseif turtle.attack() then
  130. collect()
  131. else
  132. sleep( 0.5 )
  133. end
  134. end
  135. return true
  136. end
  137.  
  138. print( "Tunnel and Return: Tunnelling..." )
  139.  
  140. for n=1,length do
  141. turtle.placeDown()
  142. tryDigUp()
  143. turtle.turnLeft()
  144. tryDig()
  145. tryUp()
  146. tryDig()
  147. turtle.turnRight()
  148. turtle.turnRight()
  149. tryDig()
  150. tryDown()
  151. tryDig()
  152. turtle.turnLeft()
  153.  
  154. if n<length then
  155. tryDig()
  156. if not tryForward() then
  157. print( "Aborting Tunnel." )
  158. break
  159. end
  160. else
  161. print( "Tunnel complete." )
  162. end
  163.  
  164. end
  165.  
  166. print( "Returning to start..." )
  167.  
  168. -- Return to where we started
  169. turtle.turnLeft()
  170. turtle.turnLeft()
  171. while depth > 0 do
  172. if turtle.forward() then
  173. depth = depth - 1
  174. else
  175. turtle.dig()
  176. end
  177. end
  178. turtle.turnRight()
  179. turtle.turnRight()
  180.  
  181. print( "Tunnel complete." )
  182. print( "Mined "..collected.." items total." )
  183. local tArgs = { ... }
  184. if #tArgs ~= 1 then
  185. print( "Usage: tunnel <length>" )
  186. return
  187. end
  188.  
  189. -- Mine in a quarry pattern until we hit something we can't dig
  190. local length = tonumber( tArgs[1] )
  191. if length < 1 then
  192. print( "Tunnel length must be positive" )
  193. return
  194. end
  195.  
  196. local depth = 0
  197. local collected = 0
  198.  
  199. local function collect()
  200. collected = collected + 1
  201. if math.fmod(collected, 25) == 0 then
  202. print( "Mined "..collected.." items." )
  203. end
  204. end
  205.  
  206. local function tryDig()
  207. while turtle.detect() do
  208. if turtle.dig() then
  209. collect()
  210. sleep(0.5)
  211. else
  212. return false
  213. end
  214. end
  215. return true
  216. end
  217.  
  218. local function tryDigUp()
  219. while turtle.detectUp() do
  220. if turtle.digUp() then
  221. collect()
  222. sleep(0.5)
  223. else
  224. return false
  225. end
  226. end
  227. return true
  228. end
  229.  
  230. local function tryDigDown()
  231. while turtle.detectDown() do
  232. if turtle.digDown() then
  233. collect()
  234. sleep(0.5)
  235. else
  236. return false
  237. end
  238. end
  239. return true
  240. end
  241.  
  242. local function refuel()
  243. local fuelLevel = turtle.getFuelLevel()
  244. if fuelLevel == "unlimited" or fuelLevel > 0 then
  245. return
  246. end
  247.  
  248. local function tryRefuel()
  249. for n=1,16 do
  250. if turtle.getItemCount(n) > 0 then
  251. turtle.select(n)
  252. if turtle.refuel(1) then
  253. turtle.select(1)
  254. return true
  255. end
  256. end
  257. end
  258. turtle.select(1)
  259. return false
  260. end
  261.  
  262. if not tryRefuel() then
  263. print( "Add more fuel to continue." )
  264. while not tryRefuel() do
  265. os.pullEvent( "turtle_inventory" )
  266. end
  267. print( "Resuming Tunnel." )
  268. end
  269. end
  270.  
  271. local function tryUp()
  272. refuel()
  273. while not turtle.up() do
  274. if turtle.detectUp() then
  275. if not tryDigUp() then
  276. return false
  277. end
  278. elseif turtle.attackUp() then
  279. collect()
  280. else
  281. sleep( 0.5 )
  282. end
  283. end
  284. return true
  285. end
  286.  
  287. local function tryDown()
  288. refuel()
  289. while not turtle.down() do
  290. if turtle.detectDown() then
  291. if not tryDigDown() then
  292. return false
  293. end
  294. elseif turtle.attackDown() then
  295. collect()
  296. else
  297. sleep( 0.5 )
  298. end
  299. end
  300. return true
  301. end
  302.  
  303. local function tryForward()
  304. refuel()
  305. while not turtle.forward() do
  306. if turtle.detect() then
  307. if not tryDig() then
  308. return false
  309. end
  310. elseif turtle.attack() then
  311. collect()
  312. else
  313. sleep( 0.5 )
  314. end
  315. end
  316. return true
  317. end
  318.  
  319. print( "Tunnelling..." )
  320.  
  321. for n=1,length do
  322. turtle.placeDown()
  323. tryDigUp()
  324. turtle.turnLeft()
  325. tryDig()
  326. tryUp()
  327. tryDig()
  328. turtle.turnRight()
  329. turtle.turnRight()
  330. tryDig()
  331. tryDown()
  332. tryDig()
  333. turtle.turnLeft()
  334.  
  335. if n<length then
  336. tryDig()
  337. if not tryForward() then
  338. print( "Aborting Tunnel." )
  339. break
  340. end
  341. else
  342. print( "Tunnel complete." )
  343. end
  344.  
  345. end
  346.  
  347. print( "Returning to start..." )
  348.  
  349. -- Return to where we started
  350. turtle.turnLeft()
  351. turtle.turnLeft()
  352. while depth > 0 do
  353. if turtle.forward() then
  354. depth = depth - 1
  355. else
  356. turtle.dig()
  357. end
  358. end
  359. turtle.turnRight()
  360. turtle.turnRight()
  361.  
  362. print( "Tunnel complete." )
  363. print( "Mined "..collected.." items total." )
Advertisement
Add Comment
Please, Sign In to add comment