Advertisement
NTins

test

Jan 6th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.81 KB | None | 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. local function unload( _bKeepOneFuelStack )
  25. print( "Unloading items..." )
  26. for n=1,16 do
  27. local nCount = turtle.getItemCount(n)
  28. if nCount > 0 then
  29. turtle.select(n)
  30. local bDrop = true
  31. if _bKeepOneFuelStack and turtle.refuel(0) then
  32. bDrop = false
  33. _bKeepOneFuelStack = false
  34. end
  35. if bDrop then
  36. turtle.drop()
  37. unloaded = unloaded + nCount
  38. end
  39. end
  40. end
  41. collected = 0
  42. turtle.select(1)
  43. end
  44.  
  45. local function returnSupplies()
  46. local x,y,z,xd,zd = xPos,depth,zPos,xDir,zDir
  47. print( "Returning to surface..." )
  48. goTo( 0,0,0,0,-1 )
  49.  
  50. local fuelNeeded = 2*(x+y+z) + 1
  51. if not refuel( fuelNeeded ) then
  52. unload( true )
  53. print( "Waiting for fuel" )
  54. while not refuel( fuelNeeded ) do
  55. sleep(1)
  56. end
  57. else
  58. unload( true )
  59. end
  60.  
  61. print( "Resuming mining..." )
  62. goTo( x,y,z,xd,zd )
  63. end
  64.  
  65. local function collect()
  66. local bFull = true
  67. local nTotalItems = 0
  68. for n=1,16 do
  69. local nCount = turtle.getItemCount(n)
  70. if nCount == 0 then
  71. bFull = false
  72. end
  73. nTotalItems = nTotalItems + nCount
  74. end
  75.  
  76. if nTotalItems > collected then
  77. collected = nTotalItems
  78. if math.fmod(collected + unloaded, 50) == 0 then
  79. print( "Mined "..(collected + unloaded).." items." )
  80. end
  81. end
  82.  
  83. if bFull then
  84. print( "No empty slots left." )
  85. return false
  86. end
  87. return true
  88. end
  89.  
  90. function refuel( ammount )
  91. local fuelLevel = turtle.getFuelLevel()
  92. if fuelLevel == "unlimited" then
  93. return true
  94. end
  95.  
  96. local needed = ammount or (xPos + zPos + depth + 1)
  97. if turtle.getFuelLevel() < needed then
  98. local fueled = false
  99. for n=1,16 do
  100. if turtle.getItemCount(n) > 0 then
  101. turtle.select(n)
  102. if turtle.refuel(1) then
  103. while turtle.getItemCount(n) > 0 and turtle.getFuelLevel() < needed do
  104. turtle.refuel(1)
  105. end
  106. if turtle.getFuelLevel() >= needed then
  107. turtle.select(1)
  108. return true
  109. end
  110. end
  111. end
  112. end
  113. turtle.select(1)
  114. return false
  115. end
  116.  
  117. return true
  118. end
  119.  
  120. local function tryForwards()
  121. if not refuel() then
  122. print( "Not enough Fuel" )
  123. returnSupplies()
  124. end
  125.  
  126. while not turtle.forward() do
  127. if turtle.detect() then
  128. if turtle.dig() then
  129. if not collect() then
  130. returnSupplies()
  131. end
  132. else
  133. return false
  134. end
  135. elseif turtle.attack() then
  136. if not collect() then
  137. returnSupplies()
  138. end
  139. else
  140. sleep( 0.5 )
  141. end
  142. end
  143.  
  144. xPos = xPos + xDir
  145. zPos = zPos + zDir
  146. return true
  147. end
  148.  
  149.  
  150.  
  151. local function turnLeft()
  152. turtle.turnLeft()
  153. xDir, zDir = -zDir, xDir
  154. end
  155.  
  156. local function turnRight()
  157. turtle.turnRight()
  158. xDir, zDir = zDir, -xDir
  159. end
  160.  
  161. function goTo( x, y, z, xd, zd )
  162. while depth > y do
  163. if turtle.up() then
  164. depth = depth - 1
  165. elseif turtle.digUp() or turtle.attackUp() then
  166. collect()
  167. else
  168. sleep( 0.5 )
  169. end
  170. end
  171.  
  172. if xPos > x then
  173. while xDir ~= -1 do
  174. turnLeft()
  175. end
  176. while xPos > x do
  177. if turtle.forward() then
  178. xPos = xPos - 1
  179. elseif turtle.dig() or turtle.attack() then
  180. collect()
  181. else
  182. sleep( 0.5 )
  183. end
  184. end
  185. elseif xPos < x then
  186. while xDir ~= 1 do
  187. turnLeft()
  188. end
  189. while xPos < x do
  190. if turtle.forward() then
  191. xPos = xPos + 1
  192. elseif turtle.dig() or turtle.attack() then
  193. collect()
  194. else
  195. sleep( 0.5 )
  196. end
  197. end
  198. end
  199.  
  200. if zPos > z then
  201. while zDir ~= -1 do
  202. turnLeft()
  203. end
  204. while zPos > z do
  205. if turtle.forward() then
  206. zPos = zPos - 1
  207. elseif turtle.dig() or turtle.attack() then
  208. collect()
  209. else
  210. sleep( 0.5 )
  211. end
  212. end
  213. elseif zPos < z then
  214. while zDir ~= 1 do
  215. turnLeft()
  216. end
  217. while zPos < z do
  218. if turtle.forward() then
  219. zPos = zPos + 1
  220. elseif turtle.dig() or turtle.attack() then
  221. collect()
  222. else
  223. sleep( 0.5 )
  224. end
  225. end
  226. end
  227.  
  228. while depth < y do
  229. if turtle.down() then
  230. depth = depth + 1
  231. elseif turtle.digDown() or turtle.attackDown() then
  232. collect()
  233. else
  234. sleep( 0.5 )
  235. end
  236. end
  237.  
  238. while zDir ~= zd or xDir ~= xd do
  239. turnLeft()
  240. end
  241. end
  242.  
  243. if not refuel() then
  244. print( "Out of Fuel" )
  245. return
  246. end
  247. print("Welcome to Nrtins's Mesa Miner!")
  248. print("Based on excavate by dan200")
  249. print("Turtle will mine one layer of clay")
  250. print("You will get ",size*size," blocks of clay")
  251. print( "Excavating..." )
  252.  
  253. local reseal = false
  254. turtle.select(1)
  255. if turtle.digDown() then
  256. reseal = true
  257. end
  258.  
  259. local alternate = 0
  260. local done = false
  261.  
  262. while not done do
  263. for n=1,size do
  264. for m=1,size do
  265. if not tryForwards() then
  266. done = true
  267. break
  268. end
  269. end
  270. if done then
  271. break
  272. end
  273. if n<size then
  274. if math.fmod(n + alternate,2) == 0 then
  275. turnLeft()
  276. if not tryForwards() then
  277. done = true
  278. break
  279. end
  280. turnLeft()
  281. else
  282. turnRight()
  283. if not tryForwards() then
  284. done = true
  285. break
  286. end
  287. turnRight()
  288. end
  289. end
  290. end
  291. if done then
  292. break
  293. end
  294.  
  295. if size > 1 then
  296. if math.fmod(size,2) == 0 then
  297. turnRight()
  298. else
  299. if alternate == 0 then
  300. turnLeft()
  301. else
  302. turnRight()
  303. end
  304. alternate = 1 - alternate
  305. end
  306. end
  307.  
  308. done = true
  309. break
  310. end
  311.  
  312. print( "Returning to surface..." )
  313.  
  314. -- Return to where we started
  315. goTo( 0,0,0,0,-1 )
  316. unload( false )
  317. goTo( 0,0,0,0,1 )
  318.  
  319. -- Seal the hole
  320. if reseal then
  321. turtle.placeDown()
  322. end
  323.  
  324. print( "Mined "..(collected + unloaded).." items total." )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement