citylion

quarryx

May 7th, 2021
572
143 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Original work of lmaogoaway
  2. x = 1
  3. y = 1
  4. z = 1
  5. d = 0
  6. digCount = 0
  7.  
  8. ignore = {
  9.     "minecraft:stone",
  10.     "minecraft:gravel",
  11.     "minecraft:dirt",
  12.     "minecraft:cobblestone",
  13.     "minecraft:bedrock"
  14. }
  15.  
  16. print("Welcome to Little Quarry")
  17. print("------------------------")
  18. print("Enter dimensions of the quarry")
  19.  
  20. print("X:")
  21. userx = tonumber(read())
  22. print("Current Y:")
  23. usery = tonumber(read())
  24. y = usery
  25. print("Z:")
  26. userz = tonumber(read())
  27. print("Bedrock top Y:")
  28. bedrock = tonumber(read()) + 1
  29.  
  30.  
  31.  
  32. -- function round(n)
  33. --  return (n + 0.5 - (n + 0.5) % 1)
  34. -- end
  35. maxLayer = math.floor((usery - bedrock) / 3)
  36. if (bedrock + (maxLayer) * 3) == y then
  37.     maxLayer = maxLayer - 1
  38. end
  39.  
  40. if turtle.getFuelLevel() < (((maxLayer) * (userx * userz)) + (y * 2)) then
  41.     print("Need atleast", (((maxLayer) * (userx * userz)) + (y * 2)), "Fuel level")
  42. end
  43.  
  44. function fatal(s)
  45.     print("--FATAL ERROR--")
  46.     print("er: ", s)
  47.     home(true)
  48.     error()
  49. end
  50.  
  51. function turn(n)
  52.     n = n or 0
  53.     if n == 0 and d == 3 then
  54.         turtle.turnRight()
  55.         d = 0
  56.     elseif n == 3 and d == 0 then
  57.         turtle.turnLeft()
  58.         d = 3
  59.     else
  60.         while d < n do
  61.             turtle.turnRight()
  62.             d = d + 1
  63.         end
  64.         while d > n do
  65.             turtle.turnLeft()
  66.             d = d - 1
  67.         end
  68.     end
  69. end
  70.  
  71. function down()
  72.     if not turtle.down() then
  73.         dig("down")
  74.         turtle.down()
  75.     end
  76.     y = y - 1
  77. end
  78.  
  79. function up()
  80.     if not turtle.up() then
  81.         dig("up")
  82.         turtle.up()
  83.     end
  84.     y = y + 1
  85. end
  86.  
  87. function forward()
  88.     if turtle.forward() then
  89.         if d == 0 then
  90.             z = z + 1
  91.         elseif d == 1 then
  92.             x = x + 1
  93.         elseif d == 2 then
  94.             z = z - 1
  95.         elseif d == 3 then
  96.             x = x - 1
  97.         end
  98.     else
  99.         print("x:", x, "y:", y, "z:", z)
  100.         fatal("cannot forward")
  101.     end
  102. end
  103.  
  104. function dig(command)
  105.     command = command or "forward"
  106.     if command == "forward" then
  107.         if turtle.detect() then
  108.             while turtle.dig() do
  109.                 sleep(0.2)
  110.                 digCount = digCount + 1
  111.             end
  112.         end
  113.     elseif command == "up" then
  114.         if turtle.detectUp() then
  115.             while turtle.digUp() do
  116.                 sleep(0.2)
  117.                 digCount = digCount + 1
  118.             end
  119.         end
  120.     elseif command == "down" then
  121.         if turtle.detectDown() then
  122.             while turtle.digDown() do
  123.                 sleep(0.2)
  124.                 digCount = digCount + 1
  125.             end
  126.         end
  127.     end
  128.  
  129.     if digCount == 16 then
  130.         if turtle.getItemCount(16) ~= 0 then
  131.             tempd = d
  132.             tempx = x
  133.             tempy = y
  134.             tempz = z
  135.             home(true)
  136.             gotoLayer(tempy)
  137.             turn(0)
  138.             while z < tempz do
  139.                 forward()
  140.             end
  141.             turn(1)
  142.             while x < tempx do         
  143.                 forward()
  144.             end
  145.             turn(tempd)
  146.         end
  147.         digCount = 0
  148.     end
  149. end
  150.  
  151. function home(n)
  152.     n = n or false
  153.     i = i or false
  154.     --x
  155.     if x > 1 then
  156.         turn(3)
  157.         while x > 1 do
  158.             forward()
  159.         end
  160.     end
  161.     --z
  162.     if z > 1 then
  163.         turn(2)
  164.         while z > 1 do
  165.             forward()
  166.         end
  167.     end
  168.     --y
  169.     if n == true then
  170.         turn(2)
  171.         while y < usery do
  172.             up()
  173.         end
  174.         unload()
  175.         turn(0)
  176.     end
  177. end
  178.  
  179. function unload()
  180.     for i=1, 16 do
  181.         turtle.select(i)
  182.         turtle.drop(64)
  183.     end
  184.     turtle.select(1)
  185. end
  186.  
  187. function gotoLayer(n)
  188.     while y > n do
  189.         down()
  190.     end
  191.     while y < n do
  192.         up()
  193.     end
  194. end
  195.  
  196. function check()
  197.     downS, downD = turtle.inspectDown()
  198.     upS, upD = turtle.inspectUp()
  199.     upCheck = false
  200.     downCheck = false
  201.     --up
  202.     for key,value in pairs(ignore) do
  203.         if upD.name == value then
  204.             upCheck = true
  205.             break
  206.         end
  207.     end
  208.     if not upCheck then
  209.         dig("up")
  210.     end
  211.     --down
  212.     for key,value in pairs(ignore) do
  213.         if downD.name == value then
  214.             downCheck = true
  215.             break
  216.         end
  217.     end
  218.     if not downCheck then
  219.         dig("down")
  220.     end
  221. end
  222.  
  223. function mineLayer()
  224.     miningDirection = true
  225.     for i=1, userx do
  226.         if miningDirection == true then
  227.             turn(0)
  228.             while z < userz do
  229.                 dig()
  230.                 forward()
  231.                 check()
  232.             end
  233.             if x < userx then
  234.                 turn(1)
  235.                 dig()
  236.                 forward()
  237.                 check()
  238.             end
  239.             miningDirection = false
  240.         else
  241.            
  242.             turn(2)
  243.             while z > 1 do
  244.                 dig()
  245.                 forward()
  246.                 check()
  247.             end
  248.             if x < userx then
  249.                 turn(1)
  250.                 dig()
  251.                 forward()
  252.                 check()
  253.             end
  254.             miningDirection = true
  255.         end
  256.     end
  257. end
  258.  
  259. print(bedrock + (maxLayer) * 3)
  260. print(maxLayer)
  261.  
  262. -- main loop (i=0, maxLayer)
  263. for i=0, maxLayer do
  264.     gotoLayer(bedrock + (maxLayer - i) * 3)
  265.     print("mining at Y:", y)
  266.     mineLayer()
  267.     home()
  268. end
  269. print("program completed successfully")
  270. home(true)
RAW Paste Data