Advertisement
Aixler

Mine

Jan 17th, 2013
929
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.62 KB | None | 0 0
  1. --TODO continue after chunk reload
  2.  
  3. function printUsage()
  4.     print( "Usage:" )
  5.     print( "Mine <forward> <right> <down>" )
  6. end
  7.  
  8. tArgs = { ... }
  9. if #tArgs ~= 3 then
  10.     printUsage()
  11.     return
  12. elseif tonumber(tArgs[1]) == nil or tonumber(tArgs[2]) == nil or tonumber(tArgs[3]) == nil then
  13.     printUsage()
  14.     return
  15. end
  16.  
  17. dropped = 0
  18. attacked = 0
  19. turn = 0
  20. mined = 0
  21. deep = 3
  22. slot = 2
  23. turtle.select(slot)
  24. A = tonumber(tArgs[1])
  25. B = tonumber(tArgs[2])
  26. C = tonumber(tArgs[3])
  27.  
  28. if A < 1 or A > 256 then
  29.     print("forward must be between 1 and 256")
  30.     error()
  31. elseif B < 1 or B > 256 then
  32.     print("right must be between 1 and 256")
  33.     error()
  34. elseif C < 1 or C > 256 then
  35.     print("down must be between 1 and 256")
  36.     error()
  37. end
  38.  
  39. forward = A - 1
  40. right = B - 1
  41. down = math.floor(C / 3) - 1
  42. downRemaining = math.fmod(C,3)
  43.  
  44. if down < 0 then
  45.     down = 0
  46.     downRemaining = 0
  47. end
  48.  
  49. if C < 3 then
  50.     oneLayer = 0
  51. else
  52.     oneLayer = C - 3
  53. end
  54.  
  55. function fuel()
  56.     fuelNeeded = (A * B - 1) * math.ceil(C / 3) + oneLayer
  57.     fuelLevel = turtle.getFuelLevel()
  58.     fuelDifference = fuelNeeded - fuelLevel
  59.     fuelCoal = math.ceil(fuelDifference / 80)
  60.     if fuelLevel >= fuelNeeded then
  61.         print("*Fuel usage: ".. fuelNeeded .." out of ".. fuelLevel .."")
  62.         print("*Enough fuel to proceed")
  63.     else
  64.         print("*Need ".. fuelDifference .." more fuel (".. fuelCoal .." Coal)")
  65.         while fuelNeeded > fuelLevel do
  66.             C = C - 1
  67.             if C < 3 then
  68.                 oneLayer = 0
  69.             else
  70.                 oneLayer = C - 3
  71.             end
  72.         fuelNeeded = (A * B - 1) * math.ceil(C / 3) + oneLayer
  73.         end
  74.         print("*Max area with current fuel: ".. A .." ".. B .." ".. C .."")
  75.         print("*Shutting Down...")
  76.         error()
  77.     end
  78. end
  79.  
  80. fuel()
  81. print("'Put an enderchest in slot 1'")
  82. print("'Turtle will mine forward, right, down'")
  83. print("'Type in anything to start'")
  84.  
  85. io.read()
  86.  
  87. function full()
  88.     if turtle.getItemCount(16) > 0 then
  89.         dropOff()
  90.     end
  91. end
  92.  
  93. function dropOff()
  94.     turtle.select(1)
  95.     while turtle.placeUp() == false do
  96.         if turtle.digUp() == false then
  97.             turtle.attackUp()
  98.         end
  99.     end
  100.     turtle.select(2)
  101.     slot = 2
  102.     for e=1, 15 do
  103.         turtle.select(slot)
  104.         turtle.dropUp()
  105.         slot = slot + 1
  106.     end
  107.     turtle.select(1)
  108.     turtle.digUp()
  109.     dropped = dropped + 1
  110. end
  111.  
  112. function mine()
  113.     full()
  114.     while turtle.forward() == false do
  115.         if turtle.dig() == false then
  116.             turtle.attack()
  117.             mined = mined - 1
  118.             attacked = attacked + 1
  119.         end
  120.         mined = mined + 1
  121.     end
  122.  
  123.     full()
  124.     if turtle.digDown() == true then
  125.         mined = mined + 1
  126.     end
  127.     full()
  128.     if turtle.digUp() == true then
  129.         mined = mined + 1
  130.     end
  131. end
  132.  
  133. function line()
  134.     for x=1, forward do
  135.         mine()
  136.     end
  137. end
  138.  
  139. function square()
  140.     for y=1, right do
  141.         line()
  142.         if turn == 0 then
  143.             turtle.turnRight()
  144.             mine()
  145.             turtle.turnRight()
  146.             turn = turn + 1
  147.         else
  148.             turtle.turnLeft()
  149.             mine()
  150.             turtle.turnLeft()
  151.             turn = turn - 1
  152.         end
  153.     end
  154.     line()
  155. end
  156.  
  157. function cube()
  158.     full()
  159.     if turtle.digDown() == true then
  160.         mined = mined + 1
  161.     end
  162.     full()
  163.     if turtle.digUp() == true then
  164.         mined = mined + 1
  165.     end
  166.  
  167.     square()
  168.     for z=1, down do
  169.         digCube()
  170.     end
  171.     if downRemaining ~= 0 then
  172.         deep = downRemaining
  173.         digCube()
  174.     end
  175. end
  176.  
  177. function digCube()
  178.     for d=1, deep do
  179.         while turtle.down() == false do
  180.             if turtle.digDown() == false then
  181.                 turtle.attackDown()
  182.                 mined = mined - 1
  183.                 attacked = attacked + 1
  184.             end
  185.             mined = mined + 1
  186.         end
  187.     end
  188.     full()
  189.     if turtle.digDown() == true then
  190.         mined = mined + 1
  191.     end
  192.     turtle.turnRight()
  193.     turtle.turnRight()
  194.     square()
  195. end
  196.  
  197. cube()
  198. dropOff()
  199. print ("mined ".. mined .." blocks")
  200. print ("attacked ".. attacked .." times")
  201. print ("dropped off ".. dropped .." times")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement