Advertisement
HarvDad

eatlava

Mar 13th, 2014
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. -- eatlava
  2. -- Refuels from lava directly below turtle
  3. -- Must start with one lava bucket in slot 1
  4. -- Turtle travels requested area refueling when lava is directly below, then returns
  5. -- Written by HarvDad, March 2014
  6.  
  7. args = {...}
  8. nArgs = #args
  9.  
  10. print("eatLava: Rev 2.1")
  11. x = 0
  12. y = 0
  13. z = 0
  14. face = 0
  15. minimumFuel = 100
  16. missionMessage = "Mission complete."
  17. usage = "Usage: eatlava <length> <width>"
  18. abort = false
  19. local currentFuelLevel = turtle.getFuelLevel()
  20.  
  21. if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
  22. print("Refuels from lava directly below turtle.")
  23. print("First time: Must start with one lava bucket in slot 1")
  24. print("Usage: eatLava <length> <width>")
  25. return
  26. end
  27.  
  28. if nArgs ~= 2 then
  29. print("Usage: eatLava <distance>")
  30. return
  31. end
  32.  
  33. length = tonumber(args[1])
  34. if length == nil then
  35. print("\"", args[1], "\" is not a valid length")
  36. return
  37. end
  38. if length < 1 then
  39. print("length must be a positive number greater than zero")
  40. return
  41. end
  42.  
  43. width = tonumber(args[2])
  44. if width == nil then
  45. print("\"", args[1], "\" is not a valid width")
  46. return
  47. end
  48. if width < 1 then
  49. print("width must be a positive number greater than zero")
  50. return
  51. end
  52.  
  53. areaCovered = 0;
  54.  
  55. function eatLava()
  56. turtle.select(1)
  57. if turtle.placeDown() then
  58. turtle.refuel()
  59. end
  60. end
  61.  
  62. function setFace(f)
  63. if f == 0 then
  64. if face == 0 then return end
  65. if face == 1 then right() return end
  66. if face == 2 then right() right() return end
  67. if face == 3 then left() return end
  68. end
  69.  
  70. if f == 1 then
  71. if face == 0 then left() return end
  72. if face == 1 then return end
  73. if face == 2 then right() return end
  74. if face == 3 then right() right() return end
  75. end
  76.  
  77. if f == 2 then
  78. if face == 0 then left() left() return end
  79. if face == 1 then left() return end
  80. if face == 2 then return end
  81. if face == 3 then right() return end
  82. end
  83.  
  84. if f == 3 then
  85. if face == 0 then right() return end
  86. if face == 1 then left() left() return end
  87. if face == 2 then left() return end
  88. if face == 3 then return end
  89. end
  90. end
  91.  
  92. function forward()
  93. while turtle.detect() do -- This loop added in case of falling sand or whatever
  94. turtle.dig()
  95. end
  96. for i=1,10 do -- This loop trys to handle pests (mob) that might be in the way
  97. if turtle.forward() then
  98. break
  99. end
  100. turtle.attack()
  101. sleep(2)
  102. end
  103. areaCovered = areaCovered + 1
  104.  
  105. if face == 0 then z = z+1 return end
  106. if face == 1 then x = x-1 return end
  107. if face == 2 then z = z-1 return end
  108. if face == 3 then x = x+1 return end
  109. end
  110.  
  111. function left()
  112. if face == 0 then face = 1 turtle.turnLeft() return end
  113. if face == 1 then face = 2 turtle.turnLeft() return end
  114. if face == 2 then face = 3 turtle.turnLeft() return end
  115. if face == 3 then face = 0 turtle.turnLeft() return end
  116. print("function left\(\): Bad face value: ", face)
  117. end
  118.  
  119. function right()
  120. if face == 0 then face = 3 turtle.turnRight() return end
  121. if face == 1 then face = 0 turtle.turnRight() return end
  122. if face == 2 then face = 1 turtle.turnRight() return end
  123. if face == 3 then face = 2 turtle.turnRight() return end
  124. print("function right\(\): Bad face value: ", face)
  125. end
  126.  
  127. function home(targetY)
  128. -- print("home:face ", face, ", x = ", x, ", z = ", z)
  129. if x < 0 then
  130. setFace(3)
  131. while x < 0 do
  132. forward()
  133. end
  134. else
  135. if x > 0 then
  136. setFace(1)
  137. while x > 0 do
  138. forward()
  139. end
  140. end
  141. end
  142.  
  143. if z < 0 then
  144. setFace(0)
  145. while z < 0 do
  146. forward()
  147. end
  148. else
  149. if z > 0 then
  150. setFace(2)
  151. while z > 0 do
  152. forward()
  153. end
  154. end
  155. end
  156. setFace(0)
  157. end
  158.  
  159.  
  160. -- MAIN PROGRAM
  161.  
  162. turtle.select(1)
  163.  
  164. print("Current Fuel Level: ", currentFuelLevel)
  165.  
  166. if currentFuelLevel ~= "unlimited" then
  167. if currentFuelLevel < minimumFuel then
  168. if not turtle.refuel() then
  169. print("No fuel")
  170. return
  171. end
  172. end
  173. end
  174.  
  175. nextTurn = "left"
  176.  
  177. forward()
  178. targetArea = length * width
  179. while areaCovered < targetArea do
  180. if abort then
  181. break
  182. end
  183. for w=1,width do
  184. if abort then
  185. break
  186. end
  187. for z=1,length do
  188. if abort then
  189. break
  190. end
  191. eatLava()
  192. if z < length then
  193. forward()
  194. end
  195. end
  196. if nextTurn == "left" then
  197. if areaCovered < targetArea then
  198. left()
  199. forward()
  200. left()
  201. nextTurn = "right"
  202. end
  203. else
  204. if areaCovered < targetArea then
  205. right()
  206. forward()
  207. right()
  208. nextTurn = "left"
  209. end
  210. end
  211. end
  212. end
  213.  
  214. home()
  215. print (missionMessage)
  216. print ("Fuel level is now ", turtle.getFuelLevel())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement