Advertisement
readix

turtle miner

Jun 27th, 2014
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.68 KB | None | 0 0
  1. local direction = 0 -- direction
  2. local drapeauBedrock = false -- indicateur pour savoir si on est arrivé à la bedrock
  3. local profondeur = 0 -- indique de combien on a creusé
  4. local longueur = 9 -- indique la longueur (x) de la zone à miner
  5. local largeur = 9 -- indique la largeur (y) de la zone à miner
  6. local xPosition = 0 -- indique la position courante en x
  7. local zPosition = 0 -- indique la position courante en z
  8. local niveauFuelMini = 5 -- niveau de déplacements auquel on doit refaire le plein de fuel
  9. local niveauCharbonMini = 5 -- quantité de charbons restants à laquelle on doit refaire le plein de charbon
  10.  
  11. local premierSlot = 4 -- premier slot où se trouve le minerai ramassé
  12. local dernierSlot = 13 -- dernier slot à surveiller pour enclencher le vidage de l'inventaire
  13. local enderchestSlot = 14 -- slot où se trouve l'enderchest pour les minerais
  14. local enderchestCharbonSlot = 15 -- slot où se trouve l'enderchest pour les minerais
  15. local charbonSlot = 16 -- slot ou est stocké le charbon
  16.  
  17. local plan = {} -- tableau pour stocker les coordonnées relatives des puits de minage.
  18.  
  19.  
  20. function compare_mine() -- fonction qui compare et mine, tourne à droite et direction++
  21.  
  22. local slot = 0
  23. local resultat = false
  24.  
  25. for slot=1,3 do
  26. turtle.select(slot)
  27. if turtle.compare() or resultat then
  28. resultat = true
  29. end
  30. end
  31.  
  32. if resultat == false then
  33. turtle.dig()
  34. if turtle.getItemCount(dernierSlot) > 0 then -- on vérifie si on doit vider l'inventaire de la tortue
  35. print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  36. videInventaire()
  37. end
  38. end
  39.  
  40. turtle.turnRight()
  41. direction=direction+1
  42.  
  43. end
  44.  
  45. function verifFuel() -- vérifie si on a assez de fuel (déplacements) en réserve.
  46. -- 1 charbon = 96 deplacements
  47. -- On vérifie le niveau de fuel
  48. local niveauFuel = turtle.getFuelLevel()
  49. if (niveauFuel ~= "unlimited") then
  50. if (niveauFuel < niveauFuelMini) then
  51. -- On a besoin de faire le plein
  52. turtle.select(charbonSlot)
  53. if turtle.getItemCount(charbonSlot) < niveauCharbonMini then
  54. rechargeCharbon() -- on refait le plein de charbon
  55. end
  56. turtle.refuel(1) -- on recharge pour 96 deplacements
  57. end
  58. end
  59. end
  60.  
  61. function rechargeCharbon() -- permet de refaire le plein en charbon
  62.  
  63. turtle.dig()
  64.  
  65. if turtle.getItemCount(dernierSlot-1) > 0 then -- on vérifie si on doit vider l'inventaire de la tortue
  66. print("vidage inventaire rech_charbon1; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  67. videInventaire()
  68. end
  69.  
  70. turtle.select(enderchestCharbonSlot)
  71. turtle.place()
  72. turtle.select(charbonSlot)
  73. turtle.suck()
  74.  
  75. turtle.select(enderchestCharbonSlot)
  76. turtle.dig()
  77.  
  78. end
  79.  
  80. function videInventaire() -- vide l'inventaire de la tortue dans l'enderchest dédié à ça
  81.  
  82. local slot
  83. turtle.dig()
  84. turtle.select(enderchestSlot)
  85. turtle.place()
  86. for slot=premierSlot,dernierSlot do
  87. turtle.select(slot)
  88. while turtle.getItemCount(slot) > 0 do
  89. turtle.drop(turtle.getItemCount(slot))
  90. if turtle.getItemCount(slot) > 0 then
  91. sleep(0.5)
  92. end
  93. end
  94. end
  95.  
  96. turtle.select(enderchestSlot)
  97. turtle.dig()
  98.  
  99. end
  100.  
  101. function calcPlan() -- calcule les emplacements des puits de minage
  102.  
  103. local x, z, temp, xTemp
  104. temp = 1
  105. -- pour forcer à miner le point de départ
  106. plan[temp] = {}
  107. plan[temp][1] = 0
  108. plan[temp][2] = 0
  109. temp = temp + 1
  110.  
  111. -- on boucle sur les colonnes
  112. for z=0,largeur do
  113. x = 0
  114. print("z : "..z)
  115.  
  116. --on calcule le x du 1er premier puit de minage pour la colonne z
  117. x = 5 - (z*2) +x
  118. while x < 0 do
  119. x = x + 5
  120. end
  121. plan[temp] = {}
  122. plan[temp][1] = x
  123. plan[temp][2] = z
  124. temp = temp + 1
  125. print("x : "..x)
  126.  
  127. -- et ensuite on trouve automatiquement les autres emplacements de la colonne z
  128. while x <= longueur do
  129. x = x + 5
  130. if x <= longueur then
  131. plan[temp] = {}
  132. plan[temp][1] = x
  133. plan[temp][2] = z
  134. temp = temp + 1
  135. print("x : "..x)
  136. end
  137. end
  138. z = z + 1
  139. end
  140. end
  141.  
  142. function deplacement(r,s) -- pour aller à des coordonnées précises
  143.  
  144. local nbX
  145. local nbZ
  146.  
  147. -- On commence par se déplacer en x
  148. print("r : "..r.." ; s : "..s)
  149. print("xPosition : "..xPosition.." ; zPosition : "..zPosition)
  150.  
  151. r = tonumber(r)
  152. s = tonumber(s)
  153.  
  154. if r > xPosition then
  155. nbX = r - xPosition
  156. print("dans r>= xposition")
  157. while direction ~= 0 do -- ici on se met dans la bonne direction
  158. turtle.turnRight()
  159. direction=direction+1
  160. if direction == 4 then direction = 0 end
  161. end
  162. elseif r < xPosition then
  163. nbX = xPosition - r
  164. print("dans xposition > r")
  165. while direction ~= 2 do -- ici on se met dans la bonne direction
  166. turtle.turnRight()
  167. direction=direction+1
  168. if direction == 4 then direction = 0 end
  169. end
  170. end
  171.  
  172. if r ~= xPosition then
  173. print("nbX : "..nbX)
  174. while nbX > 0 do
  175. if not turtle.forward() then
  176. turtle.dig() -- ici, on n'a pas réussi à avancer, donc on creuse devant soit pour dégager le passage
  177. if turtle.getItemCount(dernierSlot) > 0 then -- on vérifie si on doit vider l'inventaire de la tortue
  178. print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  179. videInventaire()
  180. end
  181. turtle.forward()
  182. end
  183. if direction == 0 then xPosition = xPosition + 1 else xPosition = xPosition - 1 end
  184. verifFuel()
  185. nbX = nbX - 1
  186. end
  187. end
  188.  
  189. -- Ensuite on fait le déplacement en z
  190.  
  191. if s > zPosition then
  192. nbZ = s - zPosition
  193.  
  194. while direction ~= 1 do -- ici on se met dans la bonne direction
  195. turtle.turnRight()
  196. direction=direction+1
  197. if direction == 4 then direction = 0 end
  198. end
  199. elseif s < zPosition then
  200. nbZ = zPosition - s
  201.  
  202. while direction ~= 3 do -- ici on se met dans la bonne direction
  203. turtle.turnRight()
  204. direction=direction+1
  205. if direction == 4 then direction = 0 end
  206. end
  207. end
  208.  
  209. if s ~= zPosition then
  210. while nbZ > 0 do
  211. if not turtle.forward() then
  212. turtle.dig() -- ici, on n'a pas réussi à avancer, donc on creuse devant soit pour dégager le passage
  213. if turtle.getItemCount(dernierSlot) > 0 then -- on vérifie si on doit vider l'inventaire de la tortue
  214. print("vidage inventaire comp_mine; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  215. videInventaire()
  216. end
  217. turtle.forward()
  218. end
  219. if direction == 1 then zPosition = zPosition + 1 else zPosition = zPosition - 1 end
  220. verifFuel()
  221. nbZ = nbZ - 1
  222. end
  223. end
  224.  
  225. --on se remet en direction "zéro"
  226. while direction ~= 0 do
  227. turtle.turnRight()
  228. direction=direction+1
  229. if direction == 4 then direction = 0 end
  230. end
  231.  
  232. end
  233.  
  234. --********************************************--
  235. --********** Programme principal *************--
  236. --********************************************--
  237.  
  238. calcPlan() -- on calcule les emplacements des puits de forage
  239.  
  240. --for k,v in pairs(plan) do print(k.." "..v[1].." "..v[2]) end
  241.  
  242. local p, pmax = 1, #plan
  243.  
  244. while p <= pmax do
  245.  
  246. drapeauBedrock = false --avant tout, on reset ce flag
  247. deplacement(plan[p][1],plan[p][2]) -- puis on se déplace sur le 1er puit à forer
  248. turtle.digDown() --creuse le bloc dessous
  249. sleep(0.2)
  250. turtle.down() --descend d'un cran
  251. profondeur = profondeur+1
  252. verifFuel()
  253.  
  254. while drapeauBedrock == false do
  255.  
  256. -- ici, direction = 0
  257. while direction~=4 do
  258. --compare et mine, tourne à droite et direction++
  259. compare_mine()
  260. end
  261. direction=0
  262.  
  263. if turtle.detectDown() == true then -- on vérifie si il y a un bloc en dessous
  264. if turtle.digDown() == false then -- si on n'arrive pas à creuser en dessous, alors c'est la bedrock
  265. drapeauBedrock = true -- donc je met le drapeau à true pour sortir de la boucle
  266. print("bedrock !")
  267. else
  268. if turtle.getItemCount(dernierSlot) > 0 then -- on vérifie si on doit vider l'inventaire de la tortue
  269. print("vidage inventaire princ1; prof "..profondeur.." ; nbitem ds slot "..dernierSlot.." : "..turtle.getItemCount(dernierSlot).." ; ")
  270. videInventaire()
  271. end
  272. turtle.down()
  273. profondeur = profondeur+1
  274. verifFuel()
  275. end
  276. else -- si il n'y a pas de bloc alors c'est de l'air, de l'eau ou de la lave
  277. turtle.down() -- alors on descend simplement (la tortue ne craint pas la lave ou l'eau) et on continue à miner
  278. profondeur = profondeur+1
  279. verifFuel()
  280. end
  281.  
  282. end
  283.  
  284. print("fin de la boucle "..profondeur)
  285. -- ici je remonte à la surface
  286. while profondeur ~= 0 do
  287. turtle.up()
  288. profondeur = profondeur-1
  289. verifFuel()
  290. end
  291.  
  292. p = p + 1
  293. end
  294.  
  295. deplacement(0,0) -- retour au point de départ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement