ItsNoah

getlavaplus

Apr 15th, 2021 (edited)
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.26 KB | None | 0 0
  1. local tArgs = {...}
  2. -- Mine in a quarry pattern until we hit something we can't dig
  3. local size = tonumber(tArgs[1])
  4. local mdepth
  5. if #tArgs >= 2 then
  6.     mdepth = tonumber(tArgs[2])
  7. else
  8.     mdepth = 1
  9. end
  10. if size < 1 then
  11.     print("Excavate diameter must be positive")
  12.     return
  13. end
  14. if mdepth < 1 then
  15.     print("Excavate depth must be positive")
  16.     return
  17. end
  18.  
  19. local depth = 0
  20. local collected = 0
  21. local filled = false
  22.  
  23. local xPos, zPos = 0, 0
  24. local xDir, zDir = 0, 1
  25.  
  26. function refuel( ammount )
  27.     local fuelLevel = turtle.getFuelLevel()
  28.     if fuelLevel == "unlimited" then
  29.         return true
  30.     end
  31.    
  32.     local needed = ammount or (xPos + zPos + depth + 2)
  33.     if turtle.getFuelLevel() < needed then
  34.         local fueled = false
  35.         for n=1,16 do
  36.             if turtle.getItemCount(n) > 0 then
  37.                 turtle.select(n)
  38.                 if turtle.refuel(1) then
  39.                     while turtle.getItemCount(n) > 0 and turtle.getFuelLevel() < needed do
  40.                         turtle.refuel(1)
  41.                     end
  42.                     if turtle.getFuelLevel() >= needed then
  43.                         turtle.select(1)
  44.                         return true
  45.                     end
  46.                 end
  47.             end
  48.         end
  49.         turtle.select(1)
  50.         return false
  51.     end
  52.    
  53.     return true
  54. end
  55.  
  56. local function tryForwards()
  57.     if not refuel() then
  58.         print("Not enough Fuel")
  59.         returnSupplies()
  60.     end
  61.  
  62.     while not turtle.forward() do
  63.         if turtle.detect() then
  64.             turtle.dig()
  65.         end
  66.     end
  67.  
  68.     xPos = xPos + xDir
  69.     zPos = zPos + zDir
  70.     return true
  71. end
  72.  
  73. local function tryDown()
  74.     if not refuel() then
  75.         print("Not enough Fuel")
  76.     end
  77.  
  78.     while not turtle.down() do
  79.         if turtle.detectDown() then
  80.             turtle.digDown()
  81.         end
  82.     end
  83.  
  84.     depth = depth + 1
  85.     return true
  86. end
  87.  
  88. local function turnLeft()
  89.     turtle.turnLeft()
  90.     xDir, zDir = -zDir, xDir
  91. end
  92.  
  93. local function turnRight()
  94.     turtle.turnRight()
  95.     xDir, zDir = zDir, -xDir
  96. end
  97.  
  98. function goTo(x, y, z, xd, zd)
  99.     while depth > y do
  100.         if turtle.up() then
  101.             depth = depth - 1
  102.         else
  103.             turtle.digUp()
  104.         end
  105.     end
  106.  
  107.     if xPos > x then
  108.         while xDir ~= -1 do
  109.             turnLeft()
  110.         end
  111.         while xPos > x do
  112.             if turtle.forward() then
  113.                 xPos = xPos - 1
  114.             else
  115.                 turtle.dig()
  116.             end
  117.         end
  118.     elseif xPos < x then
  119.         while xDir ~= 1 do
  120.             turnLeft()
  121.         end
  122.         while xPos < x do
  123.             if turtle.forward() then
  124.                 xPos = xPos + 1
  125.             else
  126.                 turtle.dig()
  127.             end
  128.         end
  129.     end
  130.  
  131.     if zPos > z then
  132.         while zDir ~= -1 do
  133.             turnLeft()
  134.         end
  135.         while zPos > z do
  136.             if turtle.forward() then
  137.                 zPos = zPos - 1
  138.             else
  139.                 turtle.dig()
  140.             end
  141.         end
  142.     elseif zPos < z then
  143.         while zDir ~= 1 do
  144.             turnLeft()
  145.         end
  146.         while zPos < z do
  147.             if turtle.forward() then
  148.                 zPos = zPos + 1
  149.             else
  150.                 turtle.dig()
  151.             end
  152.         end
  153.     end
  154.  
  155.     while depth == y do
  156.         if turtle.down() then
  157.             depth = depth + 1
  158.         else
  159.             turtle.digDown()
  160.         end
  161.     end
  162.  
  163.     while zDir ~= zd or xDir ~= xd do
  164.         turnLeft()
  165.     end
  166. end
  167.  
  168. function collect()
  169.     turtle.placeUp()
  170.     if turtle.refuel() then
  171.         collected = collected +1
  172.     end
  173.     turtle.place()
  174.     if turtle.refuel() then
  175.         collected = collected +1
  176.     end
  177.     turtle.placeDown()
  178.     if turtle.refuel() then
  179.         collected = collected +1
  180.     end
  181.     if turtle.getFuelLevel() >= 99999 then
  182.         filled = true
  183.     end
  184.     return filled
  185. end
  186.  
  187.  
  188. -- Start Collecting --
  189.  
  190. if not refuel() then
  191.     print("Out of Fuel")
  192.     return
  193. end
  194.  
  195. print("Collecting...")
  196.  
  197.  
  198. local alternate = 0
  199. local done = false
  200. while not done do
  201.     for n = 1, size do
  202.         for m = 1, size - 1 do
  203.             done = collect()
  204.             if not tryForwards() then
  205.                 done = true
  206.                 break
  207.             end
  208.         end
  209.         if done then
  210.             break
  211.         end
  212.         if n < size then
  213.             if math.fmod(n + alternate, 2) == 0 then
  214.                 done = collect()
  215.                 turnLeft()
  216.                 if not tryForwards() then
  217.                     done = true
  218.                     break
  219.                 end
  220.                 turnLeft()
  221.             else
  222.                 done = collect()
  223.                 turnRight()
  224.                 if not tryForwards() then
  225.                     done = true
  226.                     break
  227.                 end
  228.                 turnRight()
  229.             end
  230.         end
  231.     end
  232.     if done then
  233.         break
  234.     end
  235.    
  236.  
  237.     if size > 1 then
  238.         if math.fmod(size, 2) == 0 then
  239.             turnRight()
  240.         else
  241.             if alternate == 0 then
  242.                 turnLeft()
  243.             else
  244.                 turnRight()
  245.             end
  246.             alternate = 1 - alternate
  247.         end
  248.     end
  249.     done = collect()
  250.     if not tryDown() then
  251.         done = true
  252.         break
  253.     end
  254.     if depth >= mdepth then
  255.         done = true
  256.     end
  257. end
  258.  
  259. goTo(0, -1, 0, 0, 1)
  260.  
  261. print("Collected [" .. (collected * 1000) .. "] fuel in total.")
  262. print("Now at [" .. turtle.getFuelLevel() .. "]")
Add Comment
Please, Sign In to add comment