Advertisement
rocke97

Untitled

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