Advertisement
MigasRocha

Quarry No Drops

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