Advertisement
Vilsol

Most Efficient Turtle Quarry

Jan 20th, 2013
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.57 KB | None | 0 0
  1. ----------------------
  2. -- Efficient Quarry --
  3. --  Made By Vilsol  --
  4. --     1/20/2012    --
  5. ----------------------
  6.  
  7. term.clear()
  8. term.setCursorPos(1, 1)
  9.  
  10. tArgs = { ... }
  11. depth = 0
  12. left = false
  13.  
  14. if(tArgs[1] == "update")then
  15.     shell.run("rm", "eQuarry")
  16.     shell.run("pastebin", "get", "PMfpn37Z", "eQuarry")
  17.     print "Update successfull!"
  18.     error()
  19. end
  20.  
  21. function bringHome()
  22.     turtle.digUp()
  23.     turtle.select(13)
  24.     turtle.placeUp()
  25.     for slots = 1, 12 do
  26.         turtle.select(slots)
  27.         if(turtle.getItemCount(slots) > 0)then
  28.             turtle.dropUp()
  29.         end
  30.     end
  31.     turtle.select(13)
  32.     turtle.digUp()
  33.     turtle.select(1)
  34. end
  35.  
  36. function isFull()
  37.     slot = turtle.getItemCount(12)
  38.     if(slot >= 1)then
  39.         bringHome()
  40.     end
  41. end
  42.  
  43. function checkSlots()
  44.     enderchest = turtle.getItemCount(13)
  45.     dirt = turtle.getItemCount(14)
  46.     stone = turtle.getItemCount(15)
  47.     fuel = turtle.getItemCount(16)
  48.     if(enderchest == 1 and dirt == 1 and stone == 1 and fuel >= 1)then
  49.         return true
  50.     else
  51.         return false
  52.     end
  53. end
  54.  
  55. function checkFuel()
  56.     if(turtle.getFuelLevel() < 100)then
  57.         turtle.select(16)
  58.         if (turtle.refuel())then
  59.             print "Refueled successfully"
  60.             return true
  61.         else
  62.             print "Out of fuel!"
  63.             error()
  64.         end
  65.         turtle.select(1)
  66.     else
  67.         return true
  68.     end
  69. end
  70.  
  71. function safeDig()
  72.     isFull()
  73.     if(not turtle.dig())then
  74.         if(not turtle.detect())then
  75.             return true
  76.         else
  77.             if(turtle.attack())then
  78.                 for attack = 1, 50 do
  79.                     turtle.attack()
  80.                     if(turtle.dig())then
  81.                         dig = 1
  82.                         break
  83.                     end
  84.                     sleep(0.1)
  85.                 end
  86.                 if dig then
  87.                     dig = 0
  88.                     return true
  89.                 else
  90.                     print "Unknown problem!"
  91.                     error()
  92.                 end
  93.             else
  94.                 print "Unknown problem!"
  95.                 error()
  96.             end
  97.         end
  98.     else
  99.         return true
  100.     end
  101. end
  102.  
  103. function safeForward()
  104.     isFull()
  105.     if(not turtle.forward())then
  106.         sleep(1)
  107.         if(turtle.attack())then
  108.             for attack = 1, 50 do
  109.                 turtle.attack()
  110.                 if(turtle.forward())then
  111.                     forward = 1
  112.                     break
  113.                 end
  114.                 sleep(0.1)
  115.             end
  116.             if forward then
  117.                 forward = 0
  118.                 return true
  119.             else
  120.                 print "Unknown problem!"
  121.                 error()
  122.             end
  123.         else
  124.             if(turtle.dig())then
  125.                 sleep(1)
  126.                 for graveler = 1, 8 do
  127.                     if(not turtle.dig())then
  128.                         break
  129.                     end
  130.                     sleep(1)
  131.                 end
  132.                 if(turtle.forward())then
  133.                     return true
  134.                 else   
  135.                     print "Unknown problem!"
  136.                     error()
  137.                 end
  138.             else
  139.                 print "Unknown problem!"
  140.                 error()
  141.             end
  142.         end
  143.     else
  144.         return true
  145.     end
  146. end
  147.  
  148. function compareOre()
  149.     digup = 0
  150.     digdown = 0
  151.     turtle.select(14)
  152.     if not turtle.compareUp() then
  153.         digup = 1
  154.     end
  155.     if not turtle.compareDown() then
  156.         digdown = 1
  157.     end
  158.     turtle.select(15)
  159.     if not turtle.compareUp() then
  160.         digup = digup + 1
  161.     end
  162.     if not turtle.compareDown() then
  163.         digdown = digdown + 1
  164.     end
  165.     turtle.select(1)
  166.     if(digup == 2)then turtle.digUp() end
  167.     if(digdown == 2)then turtle.digDown() end
  168. end
  169.  
  170. function turn()
  171.     if left then
  172.         left = false
  173.         turtle.turnLeft()
  174.         safeDig()
  175.         safeForward()
  176.         turtle.turnLeft()
  177.     else
  178.         left = true
  179.         turtle.turnRight()
  180.         safeDig()
  181.         safeForward()
  182.         turtle.turnRight()
  183.     end
  184. end
  185.  
  186. function checkLayer(x, z)
  187.     for widthz = 1, z do
  188.         for heightx = 1, x do
  189.             compareOre()
  190.             safeDig()
  191.             safeForward()
  192.         end
  193.         compareOre()
  194.         if tonumber(widthz) < tonumber(z) then
  195.             turn()
  196.         end
  197.     end
  198.     if left then
  199.         turtle.turnRight()
  200.         for back = 1, z-1 do
  201.             safeForward()
  202.         end
  203.         turtle.turnRight()
  204.     else
  205.         turtle.turnLeft()
  206.         for back = 1, z-1 do
  207.             safeForward()
  208.         end
  209.         turtle.turnLeft()
  210.         for back = 1, x do
  211.             safeForward()
  212.         end
  213.         turtle.turnLeft()
  214.         turtle.turnLeft()
  215.     end
  216.     left = false
  217. end
  218.  
  219. function backUp()
  220.     for up = 1, y do
  221.         turtle.up()
  222.     end
  223. end
  224.  
  225. function digQuarry(x, z, y)
  226.     while true do
  227.         checkLayer(x, z)
  228.         for down = 1, 3 do
  229.             depth = depth + 1
  230.             turtle.digDown()
  231.             turtle.down()
  232.         end
  233.         if(depth >= y)then
  234.             backUp()
  235.             print "Done!"
  236.             break
  237.         end
  238.     end
  239. end
  240.  
  241. if(#tArgs < 3)then
  242.     print "Usage: eQuarry x z y"
  243.     error()
  244. else
  245.     x = tonumber(tArgs[1]) - 1
  246.     z = tonumber(tArgs[2])
  247.     y = tonumber(tArgs[3])
  248.     if(tonumber(x) and tonumber(z) and tonumber(y))then
  249.         if(true)then
  250.             if(checkFuel())then
  251.                 print ("Digging a " .. x+1 .. "x" .. z .. "x" .. y .. " quarry!")
  252.                 digQuarry(x, z, y)
  253.             else
  254.                 print "Something went very wrong!"
  255.                 error()
  256.             end
  257.         else
  258.             print "Please fill in the slot as follows:"
  259.             print "Slot 13: Enderchest for dumping items."
  260.             print "Slot 14: Dirt"
  261.             print "Slot 15: Stone"
  262.             print "Slot 16: Fuel"
  263.             error()
  264.         end
  265.     else
  266.         print "Please use only numbers!"
  267.         error()
  268.     end
  269. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement