sanderronde

tunnelcustom.lua

Jan 28th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.52 KB | None | 0 0
  1.  
  2. local tArgs = { ... }
  3. if #tArgs ~= 2 then
  4.     print( "Usage: tunnel <length> <diameter>" )
  5.     return
  6. end
  7.  
  8. -- Mine in a quarry pattern until we hit something we can't dig
  9. local length = tonumber( tArgs[1] )
  10. local diameter = tonumber(tArgs[2])
  11. if length < 1 then
  12.     print( "Tunnel length must be positive" )
  13.     return
  14. end
  15. if diameter < 1 then
  16.     print( "Tunnel diameter must be positive" )
  17.     return
  18. end
  19. if diameter % 2 == 0 then
  20.     print("Diameter must be uneven")
  21.     return
  22. end
  23.    
  24. local depth = 0
  25. local collected = 0
  26.  
  27. local function collect()
  28.     collected = collected + 1
  29.     if math.fmod(collected, 25) == 0 then
  30.         print( "Mined "..collected.." items." )
  31.     end
  32. end
  33.  
  34. local function tryDig()
  35.     while turtle.detect() do
  36.         if turtle.dig() then
  37.             collect()
  38.             sleep(0.5)
  39.         else
  40.             return false
  41.         end
  42.     end
  43.     return true
  44. end
  45.  
  46. local function tryDigUp()
  47.     while turtle.detectUp() do
  48.         if turtle.digUp() then
  49.             collect()
  50.             sleep(0.5)
  51.         else
  52.             return false
  53.         end
  54.     end
  55.     return true
  56. end
  57.  
  58. local function tryDigDown()
  59.     while turtle.detectDown() do
  60.         if turtle.digDown() then
  61.             collect()
  62.             sleep(0.5)
  63.         else
  64.             return false
  65.         end
  66.     end
  67.     return true
  68. end
  69.  
  70. local function refuel()
  71.     local fuelLevel = turtle.getFuelLevel()
  72.     if fuelLevel == "unlimited" or fuelLevel > 0 then
  73.         return
  74.     end
  75.    
  76.     local function tryRefuel()
  77.         for n=1,16 do
  78.             if turtle.getItemCount(n) > 0 then
  79.                 turtle.select(n)
  80.                 if turtle.refuel(1) then
  81.                     turtle.select(1)
  82.                     return true
  83.                 end
  84.             end
  85.         end
  86.         turtle.select(1)
  87.         return false
  88.     end
  89.    
  90.     if not tryRefuel() then
  91.         print( "Add more fuel to continue." )
  92.         while not tryRefuel() do
  93.             os.pullEvent( "turtle_inventory" )
  94.         end
  95.         print( "Resuming Tunnel." )
  96.     end
  97. end
  98.  
  99. local function tryUp()
  100.     refuel()
  101.     while not turtle.up() do
  102.         if turtle.detectUp() then
  103.             if not tryDigUp() then
  104.                 return false
  105.             end
  106.         elseif turtle.attackUp() then
  107.             collect()
  108.         else
  109.             sleep( 0.5 )
  110.         end
  111.     end
  112.     return true
  113. end
  114.  
  115. local function tryDown()
  116.     refuel()
  117.     while not turtle.down() do
  118.         if turtle.detectDown() then
  119.             if not tryDigDown() then
  120.                 return false
  121.             end
  122.         elseif turtle.attackDown() then
  123.             collect()
  124.         else
  125.             sleep( 0.5 )
  126.         end
  127.     end
  128.     return true
  129. end
  130.  
  131. local function tryForward()
  132.     refuel()
  133.     while not turtle.forward() do
  134.         if turtle.detect() then
  135.             if not tryDig() then
  136.                 return false
  137.             end
  138.         elseif turtle.attack() then
  139.             collect()
  140.         else
  141.             sleep( 0.5 )
  142.         end
  143.     end
  144.     return true
  145. end
  146.  
  147. print( "Tunnelling..." )
  148.  
  149. local function dig_forward()
  150.     for w=1,((diameter-1)/2) - 1 do
  151.         print("Going forward 1")
  152.         tryDig()
  153.         turtle.forward()
  154.         -- tryForward()
  155.     end
  156.     tryDig()
  157.  
  158.     for w=1,((diameter-1)/2) - 1 do
  159.         print("Going back 1")
  160.         turtle.back()
  161.     end
  162. end
  163.  
  164. local function dig_column(direction)
  165.     for h=1,diameter-1 do
  166.         dig_forward()
  167.         if direction == "up" then
  168.             print("Going up")
  169.             tryUp()
  170.         else
  171.             print("Going down")
  172.             tryDown()
  173.         end
  174.     end
  175.     dig_forward()
  176. end
  177.  
  178. local function do_iteration(n)
  179.     print("Diameter is", diameter, "len is", length)
  180.     if diameter > 1 then
  181.         print("Diam is bigger than 1")
  182.         -- Minimum diameter = 3
  183.        
  184.         dig_forward()
  185.         turtle.turnLeft()
  186.  
  187.         dig_column("up")
  188.  
  189.         turtle.turnRight()
  190.         turtle.turnRight()
  191.  
  192.         dig_column("down")
  193.        
  194.         dig_forward()
  195.         turtle.turnLeft()
  196.     end
  197.    
  198.     if n<length then
  199.         tryDig()
  200.         if not tryForward() then
  201.             print( "Aborting Tunnel." )
  202.             return false
  203.         end
  204.     else
  205.         print( "Tunnel complete." )
  206.     end
  207.     return true
  208. end
  209.  
  210. for n=1,length do
  211.     if not do_iteration(n) then
  212.         break
  213.     end
  214. end
  215.  
  216. --[[
  217. print( "Returning to start..." )
  218.  
  219. -- Return to where we started
  220. turtle.turnLeft()
  221. turtle.turnLeft()
  222. while depth > 0 do
  223.     if turtle.forward() then
  224.         depth = depth - 1
  225.     else
  226.         turtle.dig()
  227.     end
  228. end
  229. turtle.turnRight()
  230. turtle.turnRight()
  231. ]]
  232.  
  233. print( "Tunnel complete." )
  234. print( "Mined "..collected.." items total." )
Add Comment
Please, Sign In to add comment