Advertisement
bjohnston562

excavator/miner amazing

Jan 21st, 2021 (edited)
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function serialize(data, name) -- this is for setting the variable "data" what you want and "name" is the file name. when saving a number to the file make sure to write as tonumber(read()) (this overwrites each time)
  2. if not fs.exists('/data') then
  3. fs.makeDir('/data')
  4. end
  5. local f = fs.open('/data/'..name, 'w')
  6. f.write(textutils.serialize(data))
  7. f.close()
  8. end
  9.  
  10. function unserialize(name) --this will bring up the file name in my program i need to make x = unserialize(name) this will set my variable to the saved number
  11. if fs.exists('/data/'..name) then
  12. local f = fs.open('/data/'..name, 'r')
  13. data = textutils.unserialize(f.readAll())
  14. f.close()
  15. end
  16. return data
  17. end
  18.  
  19. --this sets up a host computer for gps network (below text)
  20. --shell.run("gps","host",x,y,z)
  21. --then on the turtle side you can set x, y, z = gps.locate(1) the one is the time till it times out if it cant find position
  22.  
  23. function recieve() --this is the recieve side to run scripts
  24. modem = peripheral.wrap("left")
  25. modem.open(0)
  26. while true do
  27. event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  28.  
  29. if message == "up" then
  30. turtle.up()
  31. end
  32.  
  33. if message == "down" then
  34. turtle.down()
  35. end
  36. end
  37. end
  38.  
  39. function getHeading() --gets heading and stores it in file = heading and variable is p (1 north is negative, 3 south is positive, 4 east is negative, and 2 west is positive )
  40. loc1 = vector.new(gps.locate(2,false))
  41. for i = 1,10 do
  42. if turtle.detect() == true then
  43. turtle.dig()
  44. else
  45. end
  46. end
  47. turtle.forward()
  48. loc2 = vector.new(gps.locate(2,false))
  49. if loc2.z - loc1.z < 0 then
  50. p = 1
  51. elseif loc2.x - loc1.x > 0 then
  52. p = 2
  53. elseif loc2.z - loc1.z > 0 then
  54. p = 3
  55. elseif loc2.x - loc1.x < 0 then
  56. p = 4
  57. end
  58. serialize(p, "heading")
  59. end
  60.  
  61. function dig() --dig and sleeps
  62. while turtle.dig() == true do
  63. sleep(0.5)
  64. end
  65. end
  66.  
  67. function digup()
  68. while turtle.digUp() == true do
  69. sleep(0.5)
  70. end
  71. end
  72.  
  73. function digdown()
  74. while turtle.digDown() == true do
  75. sleep(0.5)
  76. end
  77. end
  78.  
  79. function forward() --forward and sleeps
  80. while turtle.forward() == false do
  81. sleep(1)
  82. turtle.dig()
  83. end
  84. if heading == 1 then
  85. z_c_f = z_c_i - 1
  86. z_c_i = z_c_f
  87. elseif heading == 2 then
  88. x_c_f = x_c_i + 1
  89. x_c_i = x_c_f
  90. elseif heading == 3 then
  91. z_c_f = z_c_i + 1
  92. z_c_i = z_c_f
  93. elseif heading == 4 then
  94. x_c_f = x_c_i - 1
  95. x_c_i = x_c_f
  96. end
  97. serialize(x_c_f, "xfinal")
  98. serialize(z_c_f, "zfinal")
  99. end
  100.  
  101. function right() --turns right and sleeps
  102. turtle.turnRight()
  103.  
  104. if heading <= 3 then
  105. heading = heading + 1
  106. else
  107. heading = 1
  108. end
  109. end
  110.  
  111. function left() --turns left and sleeps
  112. turtle.turnLeft()
  113.  
  114. if heading >= 2 then
  115. heading = heading - 1
  116. else
  117. heading = 4
  118. end
  119. end
  120.  
  121. function down() --goes down and sleeps
  122. while turtle.down() == false do
  123. sleep(1)
  124. turtle.digDown()
  125. end
  126. y_c_f = y_c_i - 1
  127. y_c_i = y_c_f
  128. serialize(y_c_f, "yfinal")
  129. end
  130.  
  131. function up() --goes up and sleeps
  132. while turtle.up() == false do
  133. sleep(1)
  134. turtle.digUp()
  135. end
  136. y_c_f = y_c_i + 1
  137. y_c_i = y_c_f
  138. serialize(y_c_f, "yfinal")
  139. end
  140.  
  141. function inspect()
  142. turtle.inspect()
  143. end
  144.  
  145. function detect()
  146. turtle.detect()
  147. end
  148.  
  149. function clearinventory()
  150. for i = 2, 16 do
  151. turtle.select(i)
  152. turtle.dropUp()
  153. end
  154. turtle.select(1)
  155. end
  156.  
  157. function backtostart()
  158.  
  159. x_c_f = x_c_f - x_i
  160. y_c_f = y_c_f - y_i
  161. z_c_f = z_c_f - z_i
  162.  
  163. print(x_c_f)
  164. print(y_c_f)
  165. print(z_c_f)
  166.  
  167.  
  168. if x_c_f == 0 then
  169. movex = 0
  170. else
  171. movex = x_c_f - x_i
  172. end
  173. if y_c_f == 0 then
  174. movey = 0
  175. else
  176. movey = y_c_f - y_i
  177. end
  178. if z_c_f == 0 then
  179. movez = 0
  180. else
  181. movez = z_c_f - z_i
  182. end
  183.  
  184. --move the turtle to correct y position
  185. if movey > 0 then
  186. for i = 1, movey do
  187. while digdown() == true do
  188. digdown()
  189. end
  190. down()
  191. end
  192. else
  193. for i = -1, movey, -1 do
  194. while digup() == true do
  195. digup()
  196. end
  197. up()
  198. end
  199. end
  200. --move the turtle to correct x position
  201. if movex > 0 then
  202. if heading == 1 then
  203. left()
  204. for i = 1, movex do
  205. while dig() == true do
  206. dig()
  207. end
  208. forward()
  209. end
  210. elseif heading == 2 then
  211. right()
  212. right()
  213. for i = 1, movex do
  214. while dig() == true do
  215. dig()
  216. end
  217. forward()
  218. end
  219. elseif heading == 3 then
  220. right()
  221. for i = 1, movex do
  222. while dig() == true do
  223. dig()
  224. end
  225. forward()
  226. end
  227. elseif heading == 4 then
  228. for i = 1, movex do
  229. while dig() == true do
  230. dig()
  231. end
  232. forward()
  233. end
  234. end
  235. elseif movex == 0 then
  236. elseif movex < 0 then
  237. if heading == 1 then
  238. right()
  239. for i = -1, movex, -1 do
  240. while dig() == true do
  241. dig()
  242. end
  243. forward()
  244. end
  245. elseif heading == 2 then
  246. for i = -1, movex, -1 do
  247. while dig() == true do
  248. dig()
  249. end
  250. forward()
  251. end
  252. elseif heading == 3 then
  253. left()
  254. for i = -1, movex, -1 do
  255. while dig() == true do
  256. dig()
  257. end
  258. forward()
  259. end
  260. elseif heading == 4 then
  261. right()
  262. right()
  263. for i = -1, movex, -1 do
  264. while dig() == true do
  265. dig()
  266. end
  267. forward()
  268. end
  269. end
  270.  
  271. end
  272. --move turtle to correct z position
  273. if movez < 0 then
  274. if heading == 1 then
  275. right()
  276. right()
  277. for i = -1, movez, -1 do
  278. while dig() == true do
  279. dig()
  280. end
  281. forward()
  282. end
  283. elseif heading == 2 then
  284. right()
  285. for i = -1, movez, -1 do
  286. while dig() == true do
  287. dig()
  288. end
  289. forward()
  290. end
  291. elseif heading == 3 then
  292. for i = -1, movez, -1 do
  293. while dig() == true do
  294. dig()
  295. end
  296. forward()
  297. end
  298. elseif heading == 4 then
  299. left()
  300. for i = -1, movez, -1 do
  301. while dig() == true do
  302. dig()
  303. end
  304. forward()
  305. end
  306. end
  307. elseif movez == 0 then
  308. elseif movez > 0 then
  309. if heading == 1 then
  310. for i = 1, movez do
  311. while dig() == true do
  312. dig()
  313. end
  314. forward()
  315. end
  316. elseif heading == 2 then
  317. left()
  318. for i = 1, movez do
  319. while dig() == true do
  320. dig()
  321. end
  322. forward()
  323. end
  324. elseif heading == 3 then
  325. right()
  326. right()
  327. for i = 1, movez do
  328. while dig() == true do
  329. dig()
  330. end
  331. forward()
  332. end
  333. elseif heading == 4 then
  334. right()
  335. for i = 1, movez do
  336. while dig() == true do
  337. dig()
  338. end
  339. forward()
  340. end
  341. end
  342. end
  343. end
  344.  
  345. function returntowork()
  346. x_c_f = unserialize("xreturn")
  347. y_c_f = unserialize("yreturn")
  348. z_c_f = unserialize("zreturn")
  349.  
  350. x_c_f = x_c_f*1
  351. y_c_f = y_c_f*1
  352. z_c_f = z_c_f*1
  353.  
  354. if x_c_f == 0 then
  355. movex = 0
  356. else
  357. movex = x_c_f - x_i
  358. end
  359. if y_c_f == 0 then
  360. movey = 0
  361. else
  362. movey = y_c_f - y_i
  363. end
  364. if z_c_f == 0 then
  365. movez = 0
  366. else
  367. movez = z_c_f - z_i
  368. end
  369.  
  370. --move turtle to correct z position
  371. if movez < 0 then
  372. if heading == 1 then
  373. for i = -1, movez, -1 do
  374. while dig() == true do
  375. dig()
  376. end
  377. forward()
  378. end
  379. elseif heading == 2 then
  380. left()
  381. for i = -1, movez, -1 do
  382. while dig() == true do
  383. dig()
  384. end
  385. forward()
  386. end
  387. elseif heading == 3 then
  388. right()
  389. right()
  390. for i = -1, movez, -1 do
  391. while dig() == true do
  392. dig()
  393. end
  394. forward()
  395. end
  396. elseif heading == 4 then
  397. right()
  398. for i = -1, movez, -1 do
  399. while dig() == true do
  400. dig()
  401. end
  402. forward()
  403. end
  404. end
  405. elseif movez == 0 then
  406. elseif movez > 0 then
  407. if heading == 1 then
  408. right()
  409. right()
  410. for i = 1, movez do
  411. while dig() == true do
  412. dig()
  413. end
  414. forward()
  415. end
  416. elseif heading == 2 then
  417. right()
  418. for i = 1, movez do
  419. while dig() == true do
  420. dig()
  421. end
  422. forward()
  423. end
  424. elseif heading == 3 then
  425. for i = 1, movez do
  426. while dig() == true do
  427. dig()
  428. end
  429. forward()
  430. end
  431. elseif heading == 4 then
  432. left()
  433. for i = 1, movez do
  434. while dig() == true do
  435. dig()
  436. end
  437. forward()
  438. end
  439. end
  440. end
  441. --move the turtle to correct x position
  442. if movex > 0 then
  443. if heading == 1 then
  444. right()
  445. for i = 1, movex do
  446. while dig() == true do
  447. dig()
  448. end
  449. forward()
  450. end
  451. elseif heading == 2 then
  452. for i = 1, movex do
  453. while dig() == true do
  454. dig()
  455. end
  456. forward()
  457. end
  458. elseif heading == 3 then
  459. left()
  460. for i = 1, movex do
  461. while dig() == true do
  462. dig()
  463. end
  464. forward()
  465. end
  466. elseif heading == 4 then
  467. right()
  468. right()
  469. for i = 1, movex do
  470. while dig() == true do
  471. dig()
  472. end
  473. forward()
  474. end
  475. end
  476. elseif movex == 0 then
  477. elseif movex < 0 then
  478. if heading == 1 then
  479. left()
  480. for i = -1, movex, -1 do
  481. while dig() == true do
  482. dig()
  483. end
  484. forward()
  485. end
  486. elseif heading == 2 then
  487. right()
  488. right()
  489. for i = -1, movex, -1 do
  490. while dig() == true do
  491. dig()
  492. end
  493. forward()
  494. end
  495. elseif heading == 3 then
  496. right()
  497. for i = -1, movex, -1 do
  498. while dig() == true do
  499. dig()
  500. end
  501. forward()
  502. end
  503. elseif heading == 4 then
  504. for i = -1, movex, -1 do
  505. while dig() == true do
  506. dig()
  507. end
  508. forward()
  509. end
  510. end
  511.  
  512. end
  513. --move the turtle to correct y position
  514. if movey > 0 then
  515. for i = 1, movey do
  516. while digup() == true do
  517. digup()
  518. end
  519. up()
  520. end
  521. else
  522. for i = -1, movey, -1 do
  523. while digdown() == true do
  524. digdown()
  525. end
  526. down()
  527. end
  528. end
  529.  
  530. headingreturn = tonumber(unserialize("headingreturn"))
  531. while heading ~= headingreturn do
  532. right()
  533. end
  534. end
  535.  
  536. function inventorycheck()
  537. if turtle.getItemCount(16) > 0 then
  538. serialize(x_c_f, "xreturn")
  539. serialize(y_c_f, "yreturn")
  540. serialize(z_c_f, "zreturn")
  541. serialize(heading, "headingreturn")
  542. backtostart()
  543. clearinventory()
  544. returntowork()
  545. else
  546. end
  547. end
  548.  
  549. function refuel()
  550. if turtle.getItemCount(1) == 0 or turtle.getItemDetail(1).name ~= "minecraft:coal" and turtle.getItemDetail(1).name ~= "actuallyadditions:block_misc") then
  551. backtostart()
  552. print("Waiting for fuel to be placed in slot 1.")
  553. while turtle.getItemCount(1) == 0 or turtle.getItemDetail(1).name ~= "minecraft:coal" do
  554. sleep(1)
  555. end
  556. while turtle.getFuelLevel() < 1000 do
  557. turtle.select(1)
  558. turtle.refuel(1)
  559. end
  560. returntowork()
  561. elseif turtle.getItemCount(1) > 0 then
  562. while turtle.getFuelLevel() < 19900 do
  563. turtle.select(1)
  564. turtle.refuel(1)
  565. sleep(1)
  566. end
  567. end
  568. end
  569.  
  570. function digcubebottomleft() --efficiently mines out an area determined by the user
  571. print("Place coal blocks or coal in slot 1. Also dig a pit trap 2 blocks in front of the turtle in case a mob spawns in front of it. (optional but could slightly speed up process)")
  572.  
  573. print("What is the width? this number expands to the right with the first part of the cube being in front of the turtle.")
  574. w = tonumber(read())
  575.  
  576. print("What is the length? This number expands into the area you are excavating.")
  577. l = tonumber(read())
  578.  
  579. print("What is the height? This number is the how many blocks up the cube expands up from starting position")
  580. h = tonumber(read())
  581.  
  582. print("what is the current direction the turtle is facing? (type 1 for north, 2 for east, 3 for south and 4 for west)")
  583. heading = tonumber(read())
  584.  
  585. while dig() == true do --this get the turtle into position
  586. dig()
  587. end
  588. forward()
  589. if l > w and l > h then --if the cube has a long length like a tunnel this will be the function it follows
  590. for a = 1, h do
  591. for b = 1, w do --this digs into the cube
  592. for c = 1, (l-1) do --this digs the length
  593. while dig() == true do
  594. dig()
  595. end
  596. forward()
  597. end
  598. if w%2 == 1 then
  599. if b < w then
  600. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  601. right()
  602. inventorycheck()
  603. refuel()
  604. while dig() == true do
  605. dig()
  606. end
  607. forward()
  608. right()
  609. else
  610. left()
  611. inventorycheck()
  612. refuel()
  613. while dig() == true do
  614. dig()
  615. end
  616. forward()
  617. left()
  618. end
  619. else
  620. end
  621. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  622. if b < w then
  623. if a%2 == 1 then
  624. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  625. right()
  626. inventorycheck()
  627. refuel()
  628. while dig() == true do
  629. dig()
  630. end
  631. forward()
  632. right()
  633. else
  634. left()
  635. inventorycheck()
  636. refuel()
  637. while dig() == true do
  638. dig()
  639. end
  640. forward()
  641. left()
  642. end
  643. else
  644. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  645. left()
  646. inventorycheck()
  647. refuel()
  648. while dig() == true do
  649. dig()
  650. end
  651. forward()
  652. left()
  653. else
  654. right()
  655. inventorycheck()
  656. refuel()
  657. while dig() == true do
  658. dig()
  659. end
  660. forward()
  661. right()
  662. end
  663. end
  664. else
  665. end
  666. end
  667. end
  668. if a < h then
  669. while digup() == true do --this is to go up to next layer
  670. digup()
  671. end
  672. up()
  673. right()
  674. right()
  675. else
  676. end
  677. end
  678. elseif w > l and w > h then -- this is when the width is greater than the length and height
  679. for d = 1 , l-1 do
  680. while dig() == true do
  681. dig()
  682. end
  683. forward()
  684. end
  685. right()
  686. for a = 1, h do
  687. for b = 1, l do --this digs into the cube
  688. for c = 1, (w-1) do --this digs the length
  689. while dig() == true do
  690. dig()
  691. end
  692. forward()
  693. end
  694. if w%2 == 1 then
  695. if b < l then
  696. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  697. right()
  698. inventorycheck()
  699. refuel()
  700. while dig() == true do
  701. dig()
  702. end
  703. forward()
  704. right()
  705. else
  706. left()
  707. inventorycheck()
  708. refuel()
  709. while dig() == true do
  710. dig()
  711. end
  712. forward()
  713. left()
  714. end
  715. else
  716. end
  717. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  718. if b < l then
  719. if a%2 == 1 then
  720. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  721. right()
  722. inventorycheck()
  723. refuel()
  724. while dig() == true do
  725. dig()
  726. end
  727. forward()
  728. right()
  729. else
  730. left()
  731. inventorycheck()
  732. refuel()
  733. while dig() == true do
  734. dig()
  735. end
  736. forward()
  737. left()
  738. end
  739. else
  740. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  741. left()
  742. inventorycheck()
  743. refuel()
  744. while dig() == true do
  745. dig()
  746. end
  747. forward()
  748. left()
  749. else
  750. right()
  751. inventorycheck()
  752. refuel()
  753. while dig() == true do
  754. dig()
  755. end
  756. forward()
  757. right()
  758. end
  759. end
  760. else
  761. end
  762. end
  763. end
  764. if a < h then
  765. while digup() == true do --this is to go up to next layer
  766. digup()
  767. end
  768. up()
  769. right()
  770. right()
  771. else
  772. end
  773. end
  774. elseif h > w and h > l then
  775. for a = 1, w do
  776. for b = 1, l do --this digs into the cube
  777. for c = 1, (h-1) do --this digs the length
  778. if l%2 == 1 then
  779. if a%2 == 1 then
  780. if b%2 == 1 then
  781. while digup() == true do
  782. digup()
  783. end
  784. up()
  785. else
  786. while digdown() == true do
  787. digdown()
  788. end
  789. down()
  790. end
  791. else
  792. if b%2 == 1 then
  793. while digdown() == true do
  794. digdown()
  795. end
  796. down()
  797. else
  798. while digup() == true do
  799. digup()
  800. end
  801. up()
  802. end
  803.  
  804. end
  805. else
  806. if b%2 == 1 then
  807. while digup() == true do
  808. digup()
  809. end
  810. up()
  811. else
  812. while digdown() == true do
  813. digdown()
  814. end
  815. down()
  816. end
  817. end
  818. end
  819. if b < l then
  820. while dig() == true do
  821. dig()
  822. end
  823. forward()
  824. inventorycheck()
  825. refuel()
  826. else
  827. end
  828. end
  829. if a < w then
  830. if a%2 == 1 then
  831. right()
  832. inventorycheck()
  833. refuel()
  834. while dig() == true do
  835. dig()
  836. end
  837. forward()
  838. right()
  839. else
  840. left()
  841. inventorycheck()
  842. refuel()
  843. while dig() == true do
  844. dig()
  845. end
  846. forward()
  847. left()
  848. end
  849. else
  850. end
  851. end
  852. elseif w == l then
  853. for a = 1, h do
  854. for b = 1, w do --this digs into the cube
  855. for c = 1, (l-1) do --this digs the length
  856. while dig() == true do
  857. dig()
  858. end
  859. forward()
  860. end
  861. if w%2 == 1 then
  862. if b < w then
  863. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  864. right()
  865. inventorycheck()
  866. refuel()
  867. while dig() == true do
  868. dig()
  869. end
  870. forward()
  871. right()
  872. else
  873. left()
  874. inventorycheck()
  875. refuel()
  876. while dig() == true do
  877. dig()
  878. end
  879. forward()
  880. left()
  881. end
  882. else
  883. end
  884. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  885. if b < w then
  886. if a%2 == 1 then
  887. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  888. right()
  889. inventorycheck()
  890. refuel()
  891. while dig() == true do
  892. dig()
  893. end
  894. forward()
  895. right()
  896. else
  897. left()
  898. inventorycheck()
  899. refuel()
  900. while dig() == true do
  901. dig()
  902. end
  903. forward()
  904. left()
  905. end
  906. else
  907. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  908. left()
  909. inventorycheck()
  910. refuel()
  911. while dig() == true do
  912. dig()
  913. end
  914. forward()
  915. left()
  916. else
  917. right()
  918. inventorycheck()
  919. refuel()
  920. while dig() == true do
  921. dig()
  922. end
  923. forward()
  924. right()
  925. end
  926. end
  927. else
  928. end
  929. end
  930. end
  931. if a < h then
  932. while digup() == true do --this is to go up to next layer
  933. digup()
  934. end
  935. up()
  936. right()
  937. right()
  938. else
  939. end
  940. end
  941. elseif w == h then
  942. for d = 1 , l-1 do
  943. while dig() == true do
  944. dig()
  945. end
  946. forward()
  947. end
  948. right()
  949. for a = 1, h do
  950. for b = 1, l do --this digs into the cube
  951. for c = 1, (w-1) do --this digs the length
  952. while dig() == true do
  953. dig()
  954. end
  955. forward()
  956. end
  957. if w%2 == 1 then
  958. if b < l then
  959. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  960. right()
  961. inventorycheck()
  962. refuel()
  963. while dig() == true do
  964. dig()
  965. end
  966. forward()
  967. right()
  968. else
  969. left()
  970. inventorycheck()
  971. refuel()
  972. while dig() == true do
  973. dig()
  974. end
  975. forward()
  976. left()
  977. end
  978. else
  979. end
  980. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  981. if b < l then
  982. if a%2 == 1 then
  983. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  984. right()
  985. inventorycheck()
  986. refuel()
  987. while dig() == true do
  988. dig()
  989. end
  990. forward()
  991. right()
  992. else
  993. left()
  994. inventorycheck()
  995. refuel()
  996. while dig() == true do
  997. dig()
  998. end
  999. forward()
  1000. left()
  1001. end
  1002. else
  1003. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1004. left()
  1005. inventorycheck()
  1006. refuel()
  1007. while dig() == true do
  1008. dig()
  1009. end
  1010. forward()
  1011. left()
  1012. else
  1013. right()
  1014. inventorycheck()
  1015. refuel()
  1016. while dig() == true do
  1017. dig()
  1018. end
  1019. forward()
  1020. right()
  1021. end
  1022. end
  1023. else
  1024. end
  1025. end
  1026. end
  1027. if a < h then
  1028. while digup() == true do --this is to go up to next layer
  1029. digup()
  1030. end
  1031. up()
  1032. right()
  1033. right()
  1034. else
  1035. end
  1036. end
  1037. elseif h == l then
  1038. for a = 1, h do
  1039. for b = 1, w do --this digs into the cube
  1040. for c = 1, (l-1) do --this digs the length
  1041. while dig() == true do
  1042. dig()
  1043. end
  1044. forward()
  1045. end
  1046. if w%2 == 1 then
  1047. if b < w then
  1048. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1049. right()
  1050. inventorycheck()
  1051. refuel()
  1052. while dig() == true do
  1053. dig()
  1054. end
  1055. forward()
  1056. right()
  1057. else
  1058. left()
  1059. inventorycheck()
  1060. refuel()
  1061. while dig() == true do
  1062. dig()
  1063. end
  1064. forward()
  1065. left()
  1066. end
  1067. else
  1068. end
  1069. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1070. if b < w then
  1071. if a%2 == 1 then
  1072. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1073. right()
  1074. inventorycheck()
  1075. refuel()
  1076. while dig() == true do
  1077. dig()
  1078. end
  1079. forward()
  1080. right()
  1081. else
  1082. left()
  1083. inventorycheck()
  1084. refuel()
  1085. while dig() == true do
  1086. dig()
  1087. end
  1088. forward()
  1089. left()
  1090. end
  1091. else
  1092. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1093. left()
  1094. inventorycheck()
  1095. refuel()
  1096. while dig() == true do
  1097. dig()
  1098. end
  1099. forward()
  1100. left()
  1101. else
  1102. right()
  1103. inventorycheck()
  1104. refuel()
  1105. while dig() == true do
  1106. dig()
  1107. end
  1108. forward()
  1109. right()
  1110. end
  1111. end
  1112. else
  1113. end
  1114. end
  1115. end
  1116. if a < h then
  1117. while digup() == true do --this is to go up to next layer
  1118. digup()
  1119. end
  1120. up()
  1121. right()
  1122. right()
  1123. else
  1124. end
  1125. end
  1126. elseif w == h and l == h then
  1127. for a = 1, h do
  1128. for b = 1, w do --this digs into the cube
  1129. for c = 1, (l-1) do --this digs the length
  1130. while dig() == true do
  1131. dig()
  1132. end
  1133. forward()
  1134. end
  1135. if w%2 == 1 then
  1136. if b < w then
  1137. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1138. right()
  1139. inventorycheck()
  1140. refuel()
  1141. while dig() == true do
  1142. dig()
  1143. end
  1144. forward()
  1145. right()
  1146. else
  1147. left()
  1148. inventorycheck()
  1149. refuel()
  1150. while dig() == true do
  1151. dig()
  1152. end
  1153. forward()
  1154. left()
  1155. end
  1156. else
  1157. end
  1158. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1159. if b < w then
  1160. if a%2 == 1 then
  1161. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1162. right()
  1163. inventorycheck()
  1164. refuel()
  1165. while dig() == true do
  1166. dig()
  1167. end
  1168. forward()
  1169. right()
  1170. else
  1171. left()
  1172. inventorycheck()
  1173. refuel()
  1174. while dig() == true do
  1175. dig()
  1176. end
  1177. forward()
  1178. left()
  1179. end
  1180. else
  1181. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1182. left()
  1183. inventorycheck()
  1184. refuel()
  1185. while dig() == true do
  1186. dig()
  1187. end
  1188. forward()
  1189. left()
  1190. else
  1191. right()
  1192. inventorycheck()
  1193. refuel()
  1194. while dig() == true do
  1195. dig()
  1196. end
  1197. forward()
  1198. right()
  1199. end
  1200. end
  1201. else
  1202. end
  1203. end
  1204. end
  1205. if a < h then
  1206. while digup() == true do --this is to go up to next layer
  1207. digup()
  1208. end
  1209. up()
  1210. right()
  1211. right()
  1212. else
  1213. end
  1214. end
  1215. end
  1216. backtostart()
  1217. clearinventory()
  1218. end
  1219.  
  1220. function digcubetopleft() --efficiently mines out an area determined by the user
  1221. print("Place coal blocks or coal in slot 1. Also dig a pit trap 2 blocks in front of the turtle in case a mob spawns in front of it. (optional but could slightly speed up process)")
  1222.  
  1223. print("What is the width? this number expands to the right with the first part of the cube being in front of the turtle.")
  1224. w = tonumber(read())
  1225.  
  1226. print("What is the length? This number expands into the area you are excavating.")
  1227. l = tonumber(read())
  1228.  
  1229. print("What is the height? This number is the how many blocks up the cube expands up from starting position")
  1230. h = tonumber(read())
  1231.  
  1232. print("what is the current direction the turtle is facing? (type 1 for north, 2 for east, 3 for south and 4 for west)")
  1233. heading = tonumber(read())
  1234.  
  1235. while dig() == true do --this get the turtle into position
  1236. dig()
  1237. end
  1238. forward()
  1239. if l > w and l > h then --if the cube has a long length like a tunnel this will be the function it follows
  1240. for a = 1, h do
  1241. for b = 1, w do --this digs into the cube
  1242. for c = 1, (l-1) do --this digs the length
  1243. while dig() == true do
  1244. dig()
  1245. end
  1246. forward()
  1247. end
  1248. if w%2 == 1 then
  1249. if b < w then
  1250. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1251. right()
  1252. inventorycheck()
  1253. refuel()
  1254. while dig() == true do
  1255. dig()
  1256. end
  1257. forward()
  1258. right()
  1259. else
  1260. left()
  1261. inventorycheck()
  1262. refuel()
  1263. while dig() == true do
  1264. dig()
  1265. end
  1266. forward()
  1267. left()
  1268. end
  1269. else
  1270. end
  1271. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1272. if b < w then
  1273. if a%2 == 1 then
  1274. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1275. right()
  1276. inventorycheck()
  1277. refuel()
  1278. while dig() == true do
  1279. dig()
  1280. end
  1281. forward()
  1282. right()
  1283. else
  1284. left()
  1285. inventorycheck()
  1286. refuel()
  1287. while dig() == true do
  1288. dig()
  1289. end
  1290. forward()
  1291. left()
  1292. end
  1293. else
  1294. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1295. left()
  1296. inventorycheck()
  1297. refuel()
  1298. while dig() == true do
  1299. dig()
  1300. end
  1301. forward()
  1302. left()
  1303. else
  1304. right()
  1305. inventorycheck()
  1306. refuel()
  1307. while dig() == true do
  1308. dig()
  1309. end
  1310. forward()
  1311. right()
  1312. end
  1313. end
  1314. else
  1315. end
  1316. end
  1317. end
  1318. if a < h then
  1319. while digdown() == true do --this is to go up to next layer
  1320. digdown()
  1321. end
  1322. down()
  1323. right()
  1324. right()
  1325. else
  1326. end
  1327. end
  1328. elseif w > l and w > h then -- this is when the width is greater than the length and height
  1329. for d = 1 , l-1 do
  1330. while dig() == true do
  1331. dig()
  1332. end
  1333. forward()
  1334. end
  1335. right()
  1336. for a = 1, h do
  1337. for b = 1, l do --this digs into the cube
  1338. for c = 1, (w-1) do --this digs the length
  1339. while dig() == true do
  1340. dig()
  1341. end
  1342. forward()
  1343. end
  1344. if w%2 == 1 then
  1345. if b < l then
  1346. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1347. right()
  1348. inventorycheck()
  1349. refuel()
  1350. while dig() == true do
  1351. dig()
  1352. end
  1353. forward()
  1354. right()
  1355. else
  1356. left()
  1357. inventorycheck()
  1358. refuel()
  1359. while dig() == true do
  1360. dig()
  1361. end
  1362. forward()
  1363. left()
  1364. end
  1365. else
  1366. end
  1367. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1368. if b < l then
  1369. if a%2 == 1 then
  1370. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1371. right()
  1372. inventorycheck()
  1373. refuel()
  1374. while dig() == true do
  1375. dig()
  1376. end
  1377. forward()
  1378. right()
  1379. else
  1380. left()
  1381. inventorycheck()
  1382. refuel()
  1383. while dig() == true do
  1384. dig()
  1385. end
  1386. forward()
  1387. left()
  1388. end
  1389. else
  1390. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1391. left()
  1392. inventorycheck()
  1393. refuel()
  1394. while dig() == true do
  1395. dig()
  1396. end
  1397. forward()
  1398. left()
  1399. else
  1400. right()
  1401. inventorycheck()
  1402. refuel()
  1403. while dig() == true do
  1404. dig()
  1405. end
  1406. forward()
  1407. right()
  1408. end
  1409. end
  1410. else
  1411. end
  1412. end
  1413. end
  1414. if a < h then
  1415. while digdown() == true do --this is to go up to next layer
  1416. digdown()
  1417. end
  1418. down()
  1419. right()
  1420. right()
  1421. else
  1422. end
  1423. end
  1424. elseif h > w and h > l then
  1425. for a = 1, w do
  1426. for b = 1, l do --this digs into the cube
  1427. for c = 1, (h-1) do --this digs the length
  1428. if l%2 == 1 then
  1429. if a%2 == 1 then
  1430. if b%2 == 1 then
  1431. while digdown() == true do
  1432. digdown()
  1433. end
  1434. down()
  1435. else
  1436. while digup() == true do
  1437. digup()
  1438. end
  1439. up()
  1440. end
  1441. else
  1442. if b%2 == 1 then
  1443. while digup() == true do
  1444. digup()
  1445. end
  1446. up()
  1447. else
  1448. while digdown() == true do
  1449. digdown()
  1450. end
  1451. down()
  1452. end
  1453.  
  1454. end
  1455. else
  1456. if b%2 == 1 then
  1457. while digdown() == true do
  1458. digdown()
  1459. end
  1460. down()
  1461. else
  1462. while digup() == true do
  1463. digup()
  1464. end
  1465. up()
  1466. end
  1467. end
  1468. end
  1469. if b < l then
  1470. while dig() == true do
  1471. dig()
  1472. end
  1473. forward()
  1474. inventorycheck()
  1475. refuel()
  1476.  
  1477. else
  1478. end
  1479. end
  1480. if a < w then
  1481. if a%2 == 1 then
  1482. right()
  1483. inventorycheck()
  1484. refuel()
  1485. while dig() == true do
  1486. dig()
  1487. end
  1488. forward()
  1489. right()
  1490. else
  1491. left()
  1492. inventorycheck()
  1493. refuel()
  1494. while dig() == true do
  1495. dig()
  1496. end
  1497. forward()
  1498. left()
  1499. end
  1500. else
  1501. end
  1502. end
  1503. elseif w == l then
  1504. for a = 1, h do
  1505. for b = 1, w do --this digs into the cube
  1506. for c = 1, (l-1) do --this digs the length
  1507. while dig() == true do
  1508. dig()
  1509. end
  1510. forward()
  1511. end
  1512. if w%2 == 1 then
  1513. if b < w then
  1514. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1515. right()
  1516. inventorycheck()
  1517. refuel()
  1518. while dig() == true do
  1519. dig()
  1520. end
  1521. forward()
  1522. right()
  1523. else
  1524. left()
  1525. inventorycheck()
  1526. refuel()
  1527. while dig() == true do
  1528. dig()
  1529. end
  1530. forward()
  1531. left()
  1532. end
  1533. else
  1534. end
  1535. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1536. if b < w then
  1537. if a%2 == 1 then
  1538. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1539. right()
  1540. inventorycheck()
  1541. refuel()
  1542. while dig() == true do
  1543. dig()
  1544. end
  1545. forward()
  1546. right()
  1547. else
  1548. left()
  1549. inventorycheck()
  1550. refuel()
  1551. while dig() == true do
  1552. dig()
  1553. end
  1554. forward()
  1555. left()
  1556. end
  1557. else
  1558. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1559. left()
  1560. inventorycheck()
  1561. refuel()
  1562. while dig() == true do
  1563. dig()
  1564. end
  1565. forward()
  1566. left()
  1567. else
  1568. right()
  1569. inventorycheck()
  1570. refuel()
  1571. while dig() == true do
  1572. dig()
  1573. end
  1574. forward()
  1575. right()
  1576. end
  1577. end
  1578. else
  1579. end
  1580. end
  1581. end
  1582. if a < h then
  1583. while digdown() == true do --this is to go up to next layer
  1584. digdown()
  1585. end
  1586. down()
  1587. right()
  1588. right()
  1589. else
  1590. end
  1591. end
  1592. elseif w == h then
  1593. for d = 1 , l-1 do
  1594. while dig() == true do
  1595. dig()
  1596. end
  1597. forward()
  1598. end
  1599. right()
  1600. for a = 1, h do
  1601. for b = 1, l do --this digs into the cube
  1602. for c = 1, (w-1) do --this digs the length
  1603. while dig() == true do
  1604. dig()
  1605. end
  1606. forward()
  1607. end
  1608. if w%2 == 1 then
  1609. if b < l then
  1610. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1611. right()
  1612. inventorycheck()
  1613. refuel()
  1614. while dig() == true do
  1615. dig()
  1616. end
  1617. forward()
  1618. right()
  1619. else
  1620. left()
  1621. inventorycheck()
  1622. refuel()
  1623. while dig() == true do
  1624. dig()
  1625. end
  1626. forward()
  1627. left()
  1628. end
  1629. else
  1630. end
  1631. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1632. if b < l then
  1633. if a%2 == 1 then
  1634. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1635. right()
  1636. inventorycheck()
  1637. refuel()
  1638. while dig() == true do
  1639. dig()
  1640. end
  1641. forward()
  1642. right()
  1643. else
  1644. left()
  1645. inventorycheck()
  1646. refuel()
  1647. while dig() == true do
  1648. dig()
  1649. end
  1650. forward()
  1651. left()
  1652. end
  1653. else
  1654. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1655. left()
  1656. inventorycheck()
  1657. refuel()
  1658. while dig() == true do
  1659. dig()
  1660. end
  1661. forward()
  1662. left()
  1663. else
  1664. right()
  1665. inventorycheck()
  1666. refuel()
  1667. while dig() == true do
  1668. dig()
  1669. end
  1670. forward()
  1671. right()
  1672. end
  1673. end
  1674. else
  1675. end
  1676. end
  1677. end
  1678. if a < h then
  1679. while digdown() == true do --this is to go up to next layer
  1680. digdown()
  1681. end
  1682. down()
  1683. right()
  1684. right()
  1685. else
  1686. end
  1687. end
  1688. elseif h == l then
  1689. for a = 1, h do
  1690. for b = 1, w do --this digs into the cube
  1691. for c = 1, (l-1) do --this digs the length
  1692. while dig() == true do
  1693. dig()
  1694. end
  1695. forward()
  1696. end
  1697. if w%2 == 1 then
  1698. if b < w then
  1699. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1700. right()
  1701. inventorycheck()
  1702. refuel()
  1703. while dig() == true do
  1704. dig()
  1705. end
  1706. forward()
  1707. right()
  1708. else
  1709. left()
  1710. inventorycheck()
  1711. refuel()
  1712. while dig() == true do
  1713. dig()
  1714. end
  1715. forward()
  1716. left()
  1717. end
  1718. else
  1719. end
  1720. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1721. if b < w then
  1722. if a%2 == 1 then
  1723. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1724. right()
  1725. inventorycheck()
  1726. refuel()
  1727. while dig() == true do
  1728. dig()
  1729. end
  1730. forward()
  1731. right()
  1732. else
  1733. left()
  1734. inventorycheck()
  1735. refuel()
  1736. while dig() == true do
  1737. dig()
  1738. end
  1739. forward()
  1740. left()
  1741. end
  1742. else
  1743. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1744. left()
  1745. inventorycheck()
  1746. refuel()
  1747. while dig() == true do
  1748. dig()
  1749. end
  1750. forward()
  1751. left()
  1752. else
  1753. right()
  1754. inventorycheck()
  1755. refuel()
  1756. while dig() == true do
  1757. dig()
  1758. end
  1759. forward()
  1760. right()
  1761. end
  1762. end
  1763. else
  1764. end
  1765. end
  1766. end
  1767. if a < h then
  1768. while digdown() == true do --this is to go up to next layer
  1769. digdown()
  1770. end
  1771. down()
  1772. right()
  1773. right()
  1774. else
  1775. end
  1776. end
  1777. elseif w == h and l == h then
  1778. for a = 1, h do
  1779. for b = 1, w do --this digs into the cube
  1780. for c = 1, (l-1) do --this digs the length
  1781. while dig() == true do
  1782. dig()
  1783. end
  1784. forward()
  1785. end
  1786. if w%2 == 1 then
  1787. if b < w then
  1788. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1789. right()
  1790. inventorycheck()
  1791. refuel()
  1792. while dig() == true do
  1793. dig()
  1794. end
  1795. forward()
  1796. right()
  1797. else
  1798. left()
  1799. inventorycheck()
  1800. refuel()
  1801. while dig() == true do
  1802. dig()
  1803. end
  1804. forward()
  1805. left()
  1806. end
  1807. else
  1808. end
  1809. else -- this is the nightmare scenario where the width is even causing the turns to be different from layer to layer
  1810. if b < w then
  1811. if a%2 == 1 then
  1812. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1813. right()
  1814. inventorycheck()
  1815. refuel()
  1816. while dig() == true do
  1817. dig()
  1818. end
  1819. forward()
  1820. right()
  1821. else
  1822. left()
  1823. inventorycheck()
  1824. refuel()
  1825. while dig() == true do
  1826. dig()
  1827. end
  1828. forward()
  1829. left()
  1830. end
  1831. else
  1832. if b%2 == 1 then --this checks to see if it needs to go right or left odd b needs to go right
  1833. left()
  1834. inventorycheck()
  1835. refuel()
  1836. while dig() == true do
  1837. dig()
  1838. end
  1839. forward()
  1840. left()
  1841. else
  1842. right()
  1843. inventorycheck()
  1844. refuel()
  1845. while dig() == true do
  1846. dig()
  1847. end
  1848. forward()
  1849. right()
  1850. end
  1851. end
  1852. else
  1853. end
  1854. end
  1855. end
  1856. if a < h then
  1857. while digdown() == true do --this is to go up to next layer
  1858. digdown()
  1859. end
  1860. down()
  1861. right()
  1862. right()
  1863. else
  1864. end
  1865. end
  1866. end
  1867. backtostart()
  1868. clearinventory()
  1869. end
  1870.  
  1871.  
  1872. -- MAIN PROGRAM //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1873.  
  1874. x_i = 0 --this is if you are not using gps and not getting real world coords
  1875. y_i = 0
  1876. z_i = 0
  1877.  
  1878. x_c_f = 0 --stands for *_current_final represents the last position the turtle was at before it stopped mining
  1879. y_c_f = 0
  1880. z_c_f = 0
  1881.  
  1882. x_c_i = 0 --you need x_c_i and such as a placeholder in function forward to keep values increasing or decreasing
  1883. y_c_i = 0
  1884. z_c_i = 0
  1885.  
  1886. print("You can choose from two directions to dig. From top left down and to the right, or from bottom left up and to the right. 1 for top left and 2 for bottom left.")
  1887.  
  1888. direction = tonumber(read())
  1889. if direction == 1 then
  1890. digcubetopleft()
  1891. elseif direction == 2 then
  1892. digcubebottomleft()
  1893. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement