Advertisement
Guest User

Quarry.lua

a guest
Mar 23rd, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.24 KB | None | 0 0
  1. local args = { ... }
  2.  
  3. if #args ~= 4 then
  4.         print("Usage: Quarry <Forward Distance> <Right Distance> <Down Distance> <Mine Twice? 0 or 1>")
  5.         return
  6. end
  7.  
  8. local forwardAmount = tonumber(args[1])
  9. local rightAmount = tonumber(args[2])
  10. local downAmount = tonumber(args[3])
  11. local mineDelay = false
  12. if args[4] == "1" then
  13.     mineDelay = true
  14. end
  15.  
  16. if forwardAmount < 1 then
  17.         print("Forward Distance must be bigger than 0")
  18.         return
  19. end
  20. if rightAmount < 1 then
  21.         print("Right Distance must be bigger than 0")
  22.         return
  23. end
  24. if downAmount < 1 then
  25.         print("Down Distance must be bigger than 0")
  26. end
  27.  
  28. local forwardProgress = 1
  29. local rightProgress = 1
  30. local downProgress = 0
  31.  
  32. local turnRight = true
  33. local travelRight = true
  34.  
  35. local timesRefueled = 0
  36. local blocksMined = 0
  37. local blocksMoved = 0
  38.  
  39. local localX, localY, localZ = 1, 0, 1
  40. local prevX, prevY, prevZ, prevDir = 0, 0, 0, "Front"
  41. local dir = "Front"
  42.  
  43. local function Refuel()
  44.         if turtle.getFuelLevel() == 0 then
  45.                 turtle.select(16)
  46.                 if turtle.refuel(1) then
  47.                         timesRefueled = timesRefueled + 1
  48.                         return true
  49.                 else
  50.                         print("Requires Fuel")
  51.                         return false
  52.                 end
  53.         end
  54.   return true
  55. end
  56.  
  57. local function TurnLeft()
  58.         turtle.turnLeft()
  59.         if dir == "Front" then
  60.                 dir = "Left"
  61.         elseif dir == "Left" then
  62.                 dir = "Back"
  63.         elseif dir == "Back" then
  64.                 dir = "Right"
  65.         else
  66.                 dir = "Front"
  67.         end
  68. end
  69.  
  70. local function TurnRight()
  71.         turtle.turnRight()
  72.         if dir == "Front" then
  73.                 dir = "Right"
  74.         elseif dir == "Right" then
  75.                 dir = "Back"
  76.         elseif dir == "Back" then
  77.                 dir = "Left"
  78.         else
  79.                 dir = "Front"
  80.         end
  81. end
  82.  
  83. local function Turn()
  84.         if turnRight then
  85.                 TurnRight()
  86.         else
  87.                 TurnLeft()
  88.         end
  89. end
  90.  
  91. local function AntiTurn()
  92.         if turnRight then
  93.                 TurnLeft()
  94.         else
  95.                 TurnRight()
  96.         end
  97. end
  98.  
  99. local function Forward()
  100.         if not Refuel() then
  101.                 return false
  102.         end
  103.        
  104.         if dir == "Front" then
  105.                 if localZ + 1 <= forwardAmount then
  106.                         turtle.forward()
  107.                         localZ = localZ + 1
  108.       blocksMoved = blocksMoved + 1
  109.                         return true
  110.                 end
  111.         elseif dir == "Left" then
  112.                 if localX - 1 >= 1 then
  113.                         turtle.forward()
  114.                         localX = localX - 1
  115.       blocksMoved = blocksMoved + 1
  116.                         return true
  117.                 end
  118.         elseif dir == "Back" then
  119.                 if localZ - 1 >= 1 then
  120.                         turtle.forward()
  121.                         localZ = localZ - 1
  122.       blocksMoved = blocksMoved + 1
  123.                         return true
  124.                 end
  125.         else
  126.                 if localX + 1 <= rightAmount then
  127.                         turtle.forward()
  128.                         localX = localX + 1
  129.       blocksMoved = blocksMoved + 1
  130.                         return true
  131.                 end
  132.         end
  133.         return false
  134. end
  135.  
  136. local function Back()
  137.         if not Refuel() then
  138.                 return false
  139.         end
  140.        
  141.         if dir == "Back" then
  142.                 if localZ + 1 <= forwardAmount then
  143.                         turtle.back()
  144.                         localZ = localZ + 1
  145.       blocksMoved = blocksMoved + 1
  146.                         return true
  147.                 end
  148.         elseif dir == "Right" then
  149.                 if localX - 1 >= 1 then
  150.                         turtle.back()
  151.                         localX = localX - 1
  152.       blocksMoved = blocksMoved + 1
  153.                         return true
  154.                 end
  155.         elseif dir == "Front" then
  156.                 if localZ - 1 >= 1 then
  157.                         turtle.back()
  158.                         localZ = localZ - 1
  159.       blocksMoved = blocksMoved + 1
  160.                         return true
  161.                 end
  162.         else
  163.                 if localX + 1 <= rightAmount then
  164.                         turtle.back()
  165.                         localX = localX + 1
  166.       blocksMoved = blocksMoved + 1
  167.                         return true
  168.                 end
  169.         end
  170.         return false
  171. end
  172.  
  173. local function Down()
  174.         if not Refuel() then
  175.                     return false
  176.           end
  177.        
  178.           if localY + 1 <= downAmount then
  179.                     turtle.down()
  180.                     localY = localY + 1
  181.         blocksMoved = blocksMoved + 1
  182.                     return true
  183.           end
  184.           return false
  185. end
  186.  
  187. local function Up()
  188.         if not Refuel() then
  189.                 return false
  190.         end
  191.        
  192.         if localY - 1 >= 0 then
  193.                 turtle.up()
  194.                 localY = localY - 1
  195.     blocksMoved = blocksMoved + 1
  196.                 return true
  197.         end
  198.         return false
  199. end
  200.  
  201. local function HomeTime()
  202.         prevX, prevY, prevZ, prevDir = localX, localY, localZ, dir
  203.        
  204.         TurnRight()
  205.         TurnRight()
  206.         if not Forward() then
  207.                 AntiTurn()
  208.                 Forward()
  209.         end
  210.        
  211.         if dir == "Front" then
  212.                 TurnLeft()
  213.         elseif dir == "Right" then
  214.                 TurnRight()
  215.         end
  216.        
  217.         while true do
  218.                 if not Up() then
  219.                         break
  220.                 end
  221.         end
  222.        
  223.         while true do
  224.                 if not Forward() then
  225.                         break
  226.                 end
  227.         end
  228.        
  229.         if localX == 1 then
  230.                 TurnLeft()
  231.                 while true do
  232.                         if not Forward() then
  233.                                 break
  234.                         end
  235.                 end
  236.         elseif localZ == 1 then
  237.                 TurnRight()
  238.                 while true do
  239.                         if not Forward() then
  240.                                 break
  241.                         end
  242.                 end
  243.         end
  244.        
  245.         if dir == "Left" then
  246.                 TurnLeft()
  247.         end
  248.        
  249.         for n = 1, 15 do
  250.                 turtle.select(n)
  251.                 if not turtle.drop() then
  252.                         break
  253.                 end
  254.         end
  255.         BackToWork()
  256. end
  257.  
  258. local function BackToWork()
  259.         TurnRight()
  260.         TurnRight()
  261.        
  262.         for z = 1, prevZ do
  263.                 Forward()
  264.         end
  265.         TurnRight()
  266.         for x = 1, prevX do
  267.                 Forward()
  268.         end
  269.         for y = 0, prevY - 2 do
  270.                 Down()
  271.         end
  272.         if prevDir == "Front" then
  273.                 TurnLeft()
  274.         elseif prevDir == "Back" then
  275.                 TurnRight()
  276.         elseif prevDir == "Left" then
  277.                 TurnLeft()
  278.                 TurnLeft()
  279.         end
  280.         Back()
  281.         Down()
  282.         Down()
  283.         Forward()
  284.         Dig()
  285. end
  286.  
  287. local function CheckSpace()
  288.         local success, data = turtle.inspect()
  289.         for n = 1, 15 do
  290.                 turtle.select(n)
  291.                 if true or turtle.getItemCount() == 0 or (turtle.compare() and turtle.getItemSpace() ~= 0) then
  292.                         return true
  293.                 end
  294.         end
  295.         return false
  296. end
  297.  
  298. local function Dig()
  299.         if not CheckSpace() then
  300.                 HomeTime()
  301.         end
  302.   if mineDelay then
  303.     sleep(0.75)
  304.   end
  305.         if dir == "Front" then
  306.                 if localZ + 1 <= forwardAmount then
  307.                         turtle.dig()
  308.       blocksMined = blocksMined + 1
  309.                         return true
  310.                 end
  311.         elseif dir == "Left" then
  312.                 if localX - 1 >= 1 then
  313.                         turtle.dig()
  314.       blocksMined = blocksMined + 1
  315.                         return true
  316.                 end
  317.         elseif dir == "Back" then
  318.                 if localZ - 1 >= 1 then
  319.                         turtle.dig()
  320.       blocksMined = blocksMined + 1
  321.                         return true
  322.                 end
  323.         else
  324.                 if localX + 1 <= rightAmount then
  325.                         turtle.dig()
  326.       blocksMined = blocksMined + 1
  327.                         return true
  328.                 end
  329.         end
  330.         return false
  331. end
  332.  
  333. local function DigUp()
  334.         if not CheckSpace() then
  335.                 HomeTime()
  336.         end
  337.         if localY - 1 >= 1 then
  338.                 turtle.digUp()
  339.     blocksMined = blocksMined + 1
  340.                 return true
  341.         end
  342. end
  343.  
  344. local function DigDown()
  345.         if not CheckSpace() then
  346.                 HomeTime()
  347.         end
  348.         if localY + 1 <= downAmount then
  349.                 turtle.digDown()
  350.     blocksMined = blocksMined + 1
  351.                 return true
  352.         end
  353. end
  354.  
  355. DigDown()
  356. Down()
  357. DigDown()
  358. Down()
  359. DigDown()
  360. while true do
  361.        
  362.  
  363.     if Dig() then
  364.         Dig()
  365.                  Forward()
  366.                     DigUp()
  367.         DigDown()
  368.     else
  369.                     Turn()
  370.                     if Dig() then
  371.             Dig()
  372.                               Forward()
  373.                               DigUp()
  374.                               DigDown()
  375.                               Turn()
  376.                               turnRight = not turnRight
  377.                     else
  378.                               if DigDown() then
  379.                                         Down()
  380.                                     end
  381.             if DigDown() then
  382.                                               Down()
  383.                                               DigDown()
  384.                                     end
  385.             Turn()
  386.                        end
  387.                 end
  388.        
  389.           if (localX == rightAmount and localZ == forwardAmount) or (localX == 0 and localZ == 0) and localY == downAmount then
  390.                     print("FINISHED")
  391.                     break
  392.           end
  393. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement