postrach

Turtle quarry new

Oct 31st, 2020 (edited)
816
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local args = {...}
  2.  
  3. if #args ~= 3 then
  4.   print("Usage: quarry <width> <length> <height>")
  5.   error()
  6. end
  7.  
  8. width = args[1]
  9. length = args[2]
  10. height = args[3]
  11. y = height
  12.  
  13. --[[--------Setup----------------------
  14. 1. Dig out a 5x5 square to work in
  15.     (The turtle will not dig this area!)
  16. 2. Place the turtle facing out at the
  17.     center of any edge
  18. 3. Place a chest of coal/charcoal
  19.     to the left of the turtle
  20. 4. Place a chest of vanilla wood items
  21.     (logs, planks, sticks) or
  22.     torches to the right.
  23. 5. Place storage chests facing
  24.     the turtle to the left
  25.     and the right of the
  26.     center of the 5x5
  27.     You can place the chests as high
  28.     as you like for more storage
  29. ---Example---
  30. t = turtle
  31. c = chest
  32. x = empty spot
  33. O = center of the area to dig
  34.  
  35. x c t c x
  36. x x x x x
  37. c c O c c
  38. x x x x x
  39. x x x x x
  40. --]]
  41.  
  42. --[[ Enter Starting Position ]]
  43.  
  44. StartingRadius = 3
  45. StartingHeight = 1
  46.  
  47. --[[ Defaults ]]
  48. --StartingRadius = 3
  49. --StartingHeight = 1
  50. --------------------------------------------------------
  51.  
  52.  
  53.  
  54. dir = "z"
  55. facing = 1
  56. x = 0
  57. z = 2
  58. y = 1
  59.  
  60. xmax = math.floor(width/2)
  61. xmin = 0-math.floor(width/2)
  62. zmax = math.floor(length/2)
  63. zmin = 0-math.floor(length/2)
  64.  
  65. stop = 0
  66. returning = 0
  67.  
  68. function refuel()
  69.     if turtle.getFuelLevel() < ((width + length + height) * 2) then
  70.         turtle.select(16)
  71.         if turtle.refuel(1) then
  72.             if turtle.getItemCount(16) < 2 then
  73.                 print "Low on Fuel. Restocking..."
  74.                 home()
  75.                 restock()
  76.                 goBack()
  77.             end
  78.         else
  79.             print "Low on Fuel. Restocking..."
  80.             home()
  81.             restock()
  82.             goBack()
  83.         end
  84.         turtle.select(1)
  85.     end
  86. end
  87.  
  88. function forward()
  89.     local dig = 1
  90.     torch = false
  91.   if returning == 0 then
  92.     refuel()
  93.   end
  94.  
  95.   if (z % 7) == 0 and (x % 7) == 0 then
  96.     torch = true
  97.     turnLeft()
  98.     turnLeft()
  99.     turtle.dig()
  100.     turnLeft()
  101.     turnLeft()
  102.     if turtle.getItemCount(15) < 5 and returning == 0 then
  103.         home()
  104.         restock()
  105.         goBack()
  106.     end
  107.   end
  108.  
  109.   if dir == "x" then
  110.     if facing == 1 and x == xmax then
  111.         dig = 0
  112.     end
  113.     if facing == -1 and x == xmin then
  114.         dig = 0
  115.     end
  116.   end
  117.   if dir == "z" then
  118.     if facing == 1 and z == zmax then
  119.         dig = 0
  120.     end
  121.     if facing == -1 and z == zmin then
  122.         dig = 0
  123.     end
  124.   end
  125.   while not turtle.forward() and dig == 1 do
  126.     turtle.dig()
  127.     turtle.attack()
  128.   end
  129.   if torch == true and y == 1 then
  130.     turnLeft()
  131.     turnLeft()
  132.     turtle.select(15)
  133.     turtle.place()
  134.     turtle.select(1)
  135.     turnLeft()
  136.     turnLeft()
  137.     torch = false
  138.   end
  139.   if dir == "z" then
  140.     z = z + facing
  141.   elseif dir == "x" then
  142.     x = x + facing
  143.   end
  144.  
  145.   if y == 1 then
  146.     turtle.select(1)
  147.     turtle.placeDown()
  148.   end
  149.  
  150.   if y == height then
  151.     turtle.placeUp()
  152.   end
  153.  
  154.  
  155.  
  156.   if returning == 0 then
  157.       if turtle.getItemCount(14) > 0 then
  158.         print "Inventory Full. Dropping off Items..."
  159.         home()
  160.         restock()
  161.         goBack()
  162.       end
  163.   end
  164. end
  165.  
  166. function turnRight()
  167.     turtle.turnRight()
  168.     if dir == "z" then
  169.         dir = "x"
  170.     elseif dir == "x" then
  171.         dir = "z"
  172.         if facing == 1 then
  173.             facing = -1
  174.         elseif facing == -1 then
  175.             facing = 1
  176.         end
  177.     end
  178. end
  179.  
  180. function turnLeft()
  181.     turtle.turnLeft()
  182.     if dir == "z" then
  183.         dir = "x"
  184.         if facing == 1 then
  185.             facing = -1
  186.         elseif facing == -1 then
  187.             facing = 1
  188.         end
  189.     elseif dir == "x" then
  190.         dir = "z"
  191.     end
  192. end
  193.  
  194. function up()
  195.     while turtle.up() == false do
  196.         turtle.digUp()
  197.     end
  198.     y = y + 1
  199. end
  200.  
  201. function down()
  202.     while turtle.down() == false do
  203.         turtle.digDown()
  204.     end
  205.     y = y - 1
  206. end
  207.  
  208. function dig()
  209.     if y < height then
  210.         if inspectUp("minecraft:flowing_water") or inspectUp("minecraft:water") or inspectUp("minecraft:lava") or inspectUp("minecraft:flowing_lava") then
  211.             up()
  212.             if inspectUp("minecraft:flowing_water") or inspectUp("minecraft:water") or inspectUp("minecraft:lava") or inspectUp("minecraft:flowing_lava") then
  213.                 turtle.placeUp()
  214.             end
  215.             for i=1,4 do
  216.                 if inspect("minecraft:flowing_water") or inspect("minecraft:water") or inspect("minecraft:lava") or inspect("minecraft:flowing_lava") then
  217.                     turtle.place()
  218.                     turtle.dig()
  219.                 end
  220.                 turnRight()
  221.             end
  222.             down()
  223.         end
  224.         while turtle.digUp() do
  225.         end
  226.         if inspectUp("minecraft:gravel") or inspectUp("minecraft:sand") then
  227.             while turtle.digUp() do
  228.                 sleep(1)
  229.             end
  230.         end
  231.     end
  232. end
  233. function home()
  234.     oldx = x
  235.     oldz = z
  236.     oldy = y
  237.     olddir = dir
  238.     oldfacing = facing
  239.    
  240.     returning = 1
  241.    
  242.     while y > 1 do
  243.         down()
  244.     end
  245.    
  246.     if dir == "z" then
  247.         if facing == 1 then
  248.             if z > 3 then
  249.                 turnRight()
  250.                 turnRight()
  251.                 while z > 3 do
  252.                     forward()
  253.                 end
  254.                 turnLeft()
  255.                 while x < 0 do
  256.                     forward()
  257.                 end
  258.                 turnRight()
  259.                 forward()
  260.             elseif z < 3 then
  261.                 turnRight()
  262.                 forward()
  263.                 turnLeft()
  264.                 while z < 3 do
  265.                     forward()
  266.                 end
  267.                 turnRight()
  268.                 while x < 0 do
  269.                     forward()
  270.                 end
  271.                 turnRight()
  272.                 forward()
  273.             elseif z == 3 then
  274.                 turnRight()
  275.                 while x < 0 do
  276.                     forward()
  277.                 end
  278.                 turnRight()
  279.                 forward()
  280.             end
  281.         elseif facing == -1 then
  282.             if z < 3 then
  283.                 turnRight()
  284.                 turnRight()
  285.                 while z < 3 do
  286.                     forward()
  287.                 end
  288.                 turnLeft()
  289.                 while x > 0 do
  290.                     forward()
  291.                 end
  292.                 turnLeft()
  293.                 forward()
  294.             elseif z > 3 then
  295.                 turnRight()
  296.                 forward()
  297.                 turnLeft()
  298.                 while z > 3 do
  299.                     forward()
  300.                 end
  301.                 turnRight()
  302.                 while x > 0 do
  303.                     forward()
  304.                 end
  305.                 turnLeft()
  306.                 forward()
  307.             elseif z == 3 then
  308.                 turnLeft()
  309.                 while x < 0 do
  310.                     forward()
  311.                 end
  312.                 turnLeft()
  313.                 forward()
  314.             end
  315.         end
  316.     elseif dir == "x" then
  317.         if facing == 1 then
  318.             if x > 0 then
  319.                 turnRight()
  320.                 turnRight()
  321.                 while x > 0 do
  322.                     forward()
  323.                 end
  324.                 turnLeft()
  325.                 while z > 2 do
  326.                     forward()
  327.                 end
  328.             elseif x < 0 then
  329.                 turnRight()
  330.                 forward()
  331.                 turnLeft()
  332.                 while x < 0 do
  333.                     forward()
  334.                 end
  335.                 turnRight()
  336.                 while z > 2 do
  337.                     forward()
  338.                 end
  339.             elseif x == 0 then
  340.                 turnRight()
  341.                 while z > 2 do
  342.                     forward()
  343.                 end
  344.             end
  345.         elseif facing == -1 then
  346.             if x > 3 then
  347.                 turnRight()
  348.                 forward()
  349.                 turnLeft()
  350.                 while x > 3 do
  351.                     forward()
  352.                 end
  353.                 turnRight()
  354.                 while z < 3 do
  355.                     forward()
  356.                 end
  357.                 turnLeft()
  358.                 while x > 0 do
  359.                     forward()
  360.                 end
  361.                 turnLeft()
  362.                 forward()
  363.             elseif x < 3 then
  364.                 turnRight()
  365.                 turnRight()
  366.                 while x < 3 do
  367.                     forward()
  368.                 end
  369.                 turnLeft()
  370.                 while z < 3 do
  371.                     forward()
  372.                 end
  373.                 turnLeft()
  374.                 while x > 0 do
  375.                     forward()
  376.                 end
  377.                 turnLeft()
  378.                 forward()
  379.             end
  380.         end
  381.     end
  382.     turnLeft()
  383.     turnLeft()
  384.     returning = 0
  385. end
  386.  
  387. function dropoff()
  388.     for i=2,14 do
  389.         turtle.select(i)
  390.         if turtle.drop() == false and turtle.getItemCount() > 0 then
  391.             return false
  392.         end
  393.     end
  394.     return true
  395. end
  396.  
  397. function inspect(block)
  398.     p1, p2 = turtle.inspect()
  399.     if p1 == true then
  400.         for k,v in pairs(p2) do
  401.             if v == block then
  402.                 return true
  403.             else
  404.                 return false
  405.             end
  406.         end
  407.     else
  408.         return false
  409.     end
  410. end
  411.  
  412. function inspectUp(block)
  413.     p1, p2 = turtle.inspectUp()
  414.     if p1 == true then
  415.         for k,v in pairs(p2) do
  416.             if v == block then
  417.                 return true
  418.             else
  419.                 return false
  420.             end
  421.         end
  422.     else
  423.         return false
  424.     end
  425. end
  426.  
  427. function detail(item)
  428.     local data = turtle.getItemDetail()
  429.    
  430.     if data then
  431.         if data.name == item then
  432.             return true
  433.         else
  434.             return false
  435.         end
  436.     else
  437.         return false
  438.     end
  439. end
  440.  
  441. function stick()
  442.     turtle.select(1)
  443.     turtle.transferTo(5)
  444.     turnLeft()
  445.     turnLeft()
  446.     turtle.suck()
  447.     turtle.craft()
  448.     if detail("minecraft:coal") or detail("minecraft:charcoal") then
  449.         turtle.drop()
  450.         turtle.select(2)
  451.         turtle.transferTo(1)
  452.         turtle.select(1)
  453.     end
  454.     turnLeft()
  455.     turnLeft()
  456.     turtle.transferTo(15)
  457. end
  458.  
  459. function planks()
  460.     turtle.select(1)
  461.     turtle.transferTo(5,(math.floor(turtle.getItemCount()/2)))
  462.     turtle.craft()
  463.     if detail("minecraft:planks") then
  464.         turtle.drop()
  465.         turtle.select(5)
  466.         turtle.drop()
  467.         turtle.select(2)
  468.         turtle.transferTo(1)
  469.     end
  470.     stick()
  471. end
  472.  
  473. function log()
  474.     turtle.select(1)
  475.     turtle.craft()
  476.     if detail("minecraft:log") then
  477.         turtle.drop()
  478.         turtle.select(2)
  479.         turtle.transferTo(1)
  480.     end
  481.     planks()
  482. end
  483.  
  484. function restock()
  485.     local empty = 0
  486.     returning = 1
  487.     turnLeft()
  488.     turnLeft()
  489.     forward()
  490.     turnRight()
  491.     forward()
  492.     turnLeft()
  493.     while inspect("minecraft:chest") == true and empty == 0 do
  494.         if dropoff() == true then
  495.             empty = 1
  496.         else
  497.             up()
  498.         end
  499.     end
  500.    
  501.     if empty == 0 then
  502.         while y > 1 do
  503.             down()
  504.         end
  505.         turnLeft()
  506.         forward()
  507.         forward()
  508.         turnRight()
  509.         while inspect("minecraft:chest") == true and empty == 0 do
  510.             if dropoff() == true then
  511.                 empty = 1
  512.             else
  513.                 up()
  514.             end
  515.         end
  516.     end
  517.    
  518.     if empty == 1 then
  519.         while y > 1 do
  520.             down()
  521.         end
  522.         if x > 0 then
  523.             turnRight()
  524.             forward()
  525.             turnRight()
  526.         else
  527.             turnLeft()
  528.             forward()
  529.             turnLeft()
  530.         end
  531.         forward()
  532.     end
  533.    
  534.     if empty == 0 then
  535.         shell.exit()
  536.         print "WARNING! No more storage: Shutting down..."
  537.         print "Press any key to end."
  538.     end
  539.     if turtle.getItemCount(15) < 60 then
  540.         turnLeft()
  541.         turtle.select(16)
  542.         turtle.drop()
  543.         turnRight()
  544.         turtle.select(1)
  545.         turtle.drop()
  546.         turtle.select(15)
  547.         turnRight()
  548.         turtle.drop()
  549.         turtle.select(1)
  550.         while turtle.getItemCount(15) < 60 do
  551.             turtle.select(15)
  552.             turtle.drop()
  553.             turtle.select(1)
  554.             turtle.suck()
  555.             if detail("minecraft:torch") then
  556.                 turtle.transferTo(15)
  557.             elseif detail("minecraft:stick") then
  558.                 stick()
  559.             elseif detail("minecraft:planks") then
  560.                 planks()
  561.             elseif detail("minecraft:log") then
  562.                 log()
  563.             end
  564.         end
  565.         dropoff()
  566.         turnLeft()
  567.         turtle.select(1)
  568.         turtle.suck()
  569.     end
  570.     if turtle.getItemCount(16) < 60 then
  571.         turnLeft()
  572.         turtle.select(16)
  573.         while turtle.getItemCount() < 60 do
  574.             turtle.suck(5)
  575.         end
  576.         turnRight()
  577.         turtle.select(1)
  578.     end
  579.     returning = 0
  580. end
  581.  
  582. function goBack()
  583.     returning = 1
  584.     forward()
  585.     turtle.select(1)
  586.     turtle.suck()
  587.     if oldx > 0 then
  588.         turnRight()
  589.         while x < oldx do
  590.             forward()
  591.         end
  592.         turnLeft()
  593.     elseif oldx < 0 then
  594.         turnLeft()
  595.         while x > oldx do
  596.             forward()
  597.         end
  598.         turnRight()
  599.     end
  600.     if x > -3 and x < 3 and oldz < 3 then
  601.         turnRight()
  602.         while x < 3 do
  603.             forward()
  604.         end
  605.         turnLeft()
  606.     end
  607.     if oldz > 0 then
  608.         while z < oldz do
  609.             forward()
  610.         end
  611.     elseif oldz < 0 then
  612.         turnLeft()
  613.         turnLeft()
  614.         while z > oldz do
  615.             forward()
  616.         end
  617.         turnLeft()
  618.         turnLeft()
  619.     end
  620.     if x > oldx then
  621.         turnLeft()
  622.         while x > oldx do
  623.             forward()
  624.         end
  625.         turnRight()
  626.     end
  627.     while dir ~= olddir or facing ~= oldfacing do
  628.         turnRight()
  629.     end
  630.     while y < oldy do
  631.         up()
  632.     end
  633.     returning = 0
  634. end
  635.  
  636. levels = math.ceil(height/2)
  637.  
  638. goback = 0
  639. for i=1,levels do
  640.     while y < StartingHeight do
  641.         up()
  642.     end
  643.     while y < ((i*2)-1) do
  644.         up()
  645.     end
  646.     ring = 6
  647.     if StartingRadius > 3 then
  648.         if goback == 0 then
  649.             goback = 1
  650.             print "Starting Radius set higher than 3"
  651.             print "Moving to new start"
  652.             ring = StartingRadius * 2
  653.             while z < StartingRadius and z < zmax do
  654.                 forward()
  655.                 dig()
  656.             end
  657.             turnRight()
  658.             dig()
  659.             while x < StartingRadius and x < xmax do
  660.                 forward()
  661.                 dig()
  662.             end
  663.             turnRight()
  664.         end
  665.     else
  666.         dig()
  667.         forward()
  668.         dig()
  669.         turnLeft()
  670.         forward()
  671.         dig()
  672.         forward()
  673.         dig()
  674.         turnRight()
  675.         turnRight()
  676.         while x < 3 do
  677.           forward()
  678.           dig()
  679.         end
  680.         turnRight()
  681.     end
  682.    
  683.    
  684.  
  685.     while z < zmax or x > xmin or stop == 0 do
  686.       for i=1,(ring) do
  687.         if z > zmin then
  688.           forward()
  689.           dig()
  690.         end
  691.       end
  692.       turnRight()
  693.       for i=1,(ring) do
  694.         if x > xmin then
  695.           forward()
  696.           dig()
  697.         end
  698.       end
  699.       turnRight()
  700.       ring = ring + 1
  701.       for i=1,(ring) do
  702.         if z < zmax then
  703.           forward()
  704.           dig()
  705.         end
  706.       end
  707.       turnRight()
  708.       if x == xmin and z == zmax then
  709.         stop = 1
  710.       end
  711.       for i=1,(ring) do
  712.         if x < xmax and stop == 0 then
  713.           forward()
  714.           dig()
  715.         end
  716.       end
  717.       turnRight()
  718.       ring = ring + 1
  719.     end
  720.  
  721.     turnLeft()
  722.     turnLeft()
  723.     home()
  724.     restock()
  725.  
  726. end
  727. print ("Finished Clearing Area!")
  728. print ("Mined an area " .. length .. " by " .. width .. " by " .. height .. ".")
  729. print ("Mined a total area of " .. (length * width * height) .. " blocks!")
RAW Paste Data