Advertisement
VGToolBox

Quarry

Nov 30th, 2012
595
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.36 KB | None | 0 0
  1. local tArgs = { ... }
  2. if #tArgs == 0 then
  3.     print( "Usage: clearRoomLarge <radius> <(optional, if not go until bedrock)depth>" )
  4.     return
  5. end
  6.  
  7. -- Mine in a quarry pattern until we hit something we can't
  8. local size = tonumber( tArgs[1] )
  9. if size < 1 then
  10.     print( "Excavate radius must be positive" )
  11.     return
  12. end
  13.  
  14. targetDepth = 256
  15. if #tArgs > 1 then
  16.     targetDepth = tonumber( tArgs[2] )
  17.     if targetDepth < 1 then
  18.         print( "Depth provided too shallow" )
  19.         return
  20.     end
  21.     targetDepth = targetDepth - 1
  22. end
  23. collected = 0
  24. depth = 0
  25. tripDepth = 0
  26. stopCause = 0
  27.  
  28. local xPos,zPos = 0,0
  29. local xDir,zDir = 0,1
  30.  
  31. local function collect()
  32.     collected = collected + 1
  33.     if math.fmod(collected, 25) == 0 then
  34.         print( "Mined "..collected.." blocks." )
  35.     end
  36.    
  37.     for n=1,9 do
  38.         if turtle.getItemCount(n) == 0 then
  39.             return true
  40.         end
  41.     end
  42.    
  43.     print( "No empty slots left." )
  44.     return false
  45. end
  46.  
  47. local function tryForwards()
  48.     while not turtle.forward() do
  49.         if turtle.dig() then
  50.             if not collect() then
  51.                 stopCause = 2
  52.                 return false
  53.             end
  54.         else
  55.             -- give sand a chance to fall
  56.             sleep(0.8)
  57.             if turtle.dig() then
  58.                 if not collect() then
  59.                     stopCause = 2
  60.                     return false
  61.                 end
  62.             else
  63.                 stopCause = 1
  64.                 return false
  65.             end
  66.         end
  67.     end
  68.     xPos = xPos + xDir
  69.     zPos = zPos + zDir
  70.     return true
  71. end
  72.  
  73. local function tryDown()
  74.     if depth == targetDepth then
  75.         return false
  76.     end
  77.     if not turtle.down() then
  78.         if turtle.digDown() then
  79.             if not collect() then
  80.                 return false
  81.             end
  82.         end
  83.         if not turtle.down() then
  84.             return false
  85.         end
  86.     end
  87.     depth = depth + 1
  88.     if math.fmod( depth, 10 ) == 0 then
  89.         print( "Descended "..depth.." metres." )
  90.     end
  91.     return true
  92. end
  93.  
  94. local function turnLeft()
  95.     turtle.turnLeft()
  96.     xDir, zDir = -zDir, xDir
  97. end
  98.  
  99. local function turnRight()
  100.     turtle.turnRight()
  101.     xDir, zDir = zDir, -xDir
  102. end
  103.  
  104. local function main() -- ===================START MAIN LOOP FUNCTION
  105.  
  106.     print( "Excavating..." )
  107.  
  108.     local reseal = false
  109.     if turtle.digDown() then
  110.         reseal = true
  111.     end
  112.  
  113.     if tripDepth == 0 then
  114.         while turtle.down() do
  115.             depth = depth + 1
  116.         end
  117.     end
  118.  
  119.     local alternate = 0
  120.     local done = false
  121.     while not done do
  122.         for n=1,size do
  123.             for m=1,size-1 do
  124.                 if not tryForwards() then
  125.                     done = true
  126.                     break
  127.                 end
  128.             end
  129.             if done then
  130.                 break
  131.             end
  132.             if n<size then
  133.                 if math.fmod(n + alternate,2) == 0 then
  134.                     turnLeft()
  135.                     if not tryForwards() then
  136.                         done = true
  137.                         break
  138.                     end
  139.                     turnLeft()
  140.                 else
  141.                     turnRight()
  142.                     if not tryForwards() then
  143.                         done = true
  144.                         break
  145.                     end
  146.                     turnRight()
  147.                 end
  148.             end
  149.         end
  150.         if done then
  151.             break
  152.         end
  153.        
  154.         if size > 1 then
  155.             if math.fmod(size,2) == 0 then
  156.                 turnRight()
  157.             else
  158.                 if alternate == 0 then
  159.                     turnLeft()
  160.                 else
  161.                     turnRight()
  162.                 end
  163.                 alternate = 1 - alternate
  164.             end
  165.         end
  166.        
  167.         if not tryDown() then
  168.             done = true
  169.             break
  170.         end
  171.     end
  172.  
  173. tripDepth = depth
  174.  
  175.     print( "Returning to surface..." )
  176.     -- Return to where we started
  177.     while depth > 0 do
  178.         if turtle.up() then
  179.             depth = depth - 1
  180.         elseif turtle.digUp() then
  181.             collect()
  182.         else
  183.             sleep( 0.5 )
  184.         end
  185.     end
  186.  
  187.     if xPos > 0 then
  188.         while xDir ~= -1 do
  189.             turnLeft()
  190.         end
  191.         while xPos > 0 do
  192.             if turtle.forward() then
  193.                 xPos = xPos - 1
  194.             elseif turtle.dig() then
  195.                 collect()
  196.             else
  197.                 sleep( 0.5 )
  198.             end
  199.         end
  200.     end
  201.  
  202.     if zPos > 0 then
  203.         while zDir ~= -1 do
  204.             turnLeft()
  205.         end
  206.         while zPos > 0 do
  207.             if turtle.forward() then
  208.                 zPos = zPos - 1
  209.             elseif turtle.dig() then
  210.                 collected = collected + 1
  211.             else
  212.                 sleep( 0.5 )
  213.             end
  214.         end
  215.     end
  216.     while zDir ~= 1 do
  217.         turnLeft()
  218.     end
  219.  
  220.     -- Seal the hole
  221.     if reseal then
  222.         turtle.placeDown()
  223.         turtle.forward()
  224.         turtle.placeDown()
  225.         turtle.back()
  226.     end
  227.  
  228.     turtle.turnLeft()
  229.     turtle.forward()
  230.     for n=1,9 do
  231.         turtle.drop()
  232.     end
  233.     turtle.back()
  234.     turtle.turnRight()
  235. end -- ===========================================END MAIN LOOP FUNCTION
  236.  
  237. local done = false
  238. while not done do
  239.     if (tripDepth == targetDepth) or (stopCause == 1) then
  240.         done = true
  241.     else
  242.         stopCause = 0
  243.         xPos,zPos = 0,0
  244.         xDir,zDir = 0,1
  245.         turtle.digDown()
  246.         for n=1,tripDepth do
  247.             if turtle.down() then
  248.                 depth = depth + 1
  249.             end
  250.         end
  251.         main()
  252.     end
  253. end
  254.  
  255. print( "Mined "..collected.." blocks total." )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement