Advertisement
HarvDad

branch

Mar 13th, 2014
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- branch
  2. -- Creates a 1x1x3 tunnel of the length specified by the user
  3. -- then mines 3 blocks to the right and tunnels back
  4. -- Torches, if supplied, will be placed on the right-hand wall at 8 block intervals
  5. -- Written by HarvDad, March 2014
  6.  
  7. args = {...}
  8. nArgs = #args
  9.  
  10. print("branch: Rev 1.0")
  11.  
  12. loop = 0;
  13. x = 0
  14. y = 0
  15. z = 0
  16. face = 0
  17. minimumFuel = 100
  18. missionMessage = "Mission complete."
  19. abort = false
  20. local currentFuelLevel = turtle.getFuelLevel()
  21.  
  22. if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
  23. print("Creates a 2x2 tunnel with sealed sides.")
  24. print("Place fuel in slot 1")
  25. print("Place patch material (like cobblestone) in slot 2.")
  26. print("If torches are desired, place torches in slot 16.")
  27. print("Usage: branch <length>")
  28. return
  29. end
  30.  
  31. if nArgs ~= 1 then
  32. print("Usage: branch <length>")
  33. return
  34. end
  35.  
  36. length = tonumber(args[1])
  37. if length == nil then
  38. print("\"", args[1], "\" is not a valid length")
  39. return
  40. end
  41. if length < 1 then
  42. print("length must be a positive number greater than zero")
  43. end
  44.  
  45. targetArea = length
  46. areaCovered = 1;
  47.  
  48.  
  49. function left()
  50. if face == 0 then face = 1 turtle.turnLeft() return end
  51. if face == 1 then face = 2 turtle.turnLeft() return end
  52. if face == 2 then face = 3 turtle.turnLeft() return end
  53. if face == 3 then face = 0 turtle.turnLeft() return end
  54. print("function left\(\): Bad face value: ", face)
  55. end
  56.  
  57. function right()
  58. if face == 0 then face = 3 turtle.turnRight() return end
  59. if face == 1 then face = 0 turtle.turnRight() return end
  60. if face == 2 then face = 1 turtle.turnRight() return end
  61. if face == 3 then face = 2 turtle.turnRight() return end
  62. print("function right\(\): Bad face value: ", face)
  63. end
  64.  
  65. function up()
  66. success = false
  67.  
  68. repeat
  69. while turtle.detectUp() do -- This loop added in case of falling sand or whatever
  70. turtle.digUp()
  71. end
  72. success = turtle.up()
  73. until success
  74. y = y+1
  75. end
  76.  
  77. function rise(nBlocks)
  78. local i
  79. for i=1,nBlocks do
  80. up()
  81. end
  82. end
  83.  
  84. function descend(nBlocks)
  85. local i
  86. for i=1,nBlocks do
  87. down()
  88. end
  89. end
  90.  
  91. function down()
  92. if turtle.detectDown() then
  93. turtle.digDown()
  94. end
  95. turtle.down()
  96. y = y-1
  97. end
  98.  
  99.  
  100. function forward()
  101. while turtle.detect() do -- This loop added in case of falling sand or whatever
  102. turtle.dig()
  103. end
  104. for i=1,10 do
  105. if turtle.forward() then
  106. break
  107. end
  108. turtle.attack()
  109. sleep(2)
  110. end
  111. if face == 0 then z = z+1 return end
  112. if face == 1 then x = x-1 return end
  113. if face == 2 then z = z-1 return end
  114. if face == 3 then x = x+1 return end
  115. end
  116.  
  117. function patch()
  118. turtle.select(2)
  119. turtle.place()
  120. end
  121.  
  122. function patchUp()
  123. turtle.select(2)
  124. turtle.placeUp()
  125. end
  126.  
  127. function patchDown()
  128. turtle.select(2)
  129. turtle.placeDown()
  130. end
  131.  
  132. addTorch = true
  133. torchSpacing = 3
  134. torchSpot = 7
  135.  
  136. function mineForward()
  137. forward()
  138.  
  139. while turtle.detectUp() do -- This loop added in case of falling sand or whatever
  140. turtle.digUp()
  141. turtle.suckUp()
  142. end
  143.  
  144. if turtle.detectDown() then
  145. turtle.digDown()
  146. turtle.suckDown()
  147. end
  148.  
  149. if addTorch then
  150. if (torchSpot % torchSpacing) == 0 then
  151. left()
  152. left()
  153. turtle.select(16)
  154. turtle.place()
  155. right()
  156. right()
  157. end
  158. end
  159. torchSpot = torchSpot + 1
  160. end
  161.  
  162. function setFace(f)
  163. if f == 0 then
  164. if face == 0 then return end
  165. if face == 1 then right() return end
  166. if face == 2 then right() right() return end
  167. if face == 3 then left() return end
  168. end
  169.  
  170. if f == 1 then
  171. if face == 0 then left() return end
  172. if face == 1 then return end
  173. if face == 2 then right() return end
  174. if face == 3 then right() right() return end
  175. end
  176.  
  177. if f == 2 then
  178. if face == 0 then left() left() return end
  179. if face == 1 then left() return end
  180. if face == 2 then return end
  181. if face == 3 then right() return end
  182. end
  183.  
  184. if f == 3 then
  185. if face == 0 then right() return end
  186. if face == 1 then left() left() return end
  187. if face == 2 then left() return end
  188. if face == 3 then return end
  189. end
  190. end
  191.  
  192. function checkFuel()
  193. if currentFuelLevel == "unlimited" then
  194. return true
  195. end
  196.  
  197. if currentFuelLevel < minimumFuel then
  198. if not turtle.refuel(200) then
  199. areaCovered = targetArea
  200. missionMessage = "Mission aborted due to low fuel."
  201. abort = true
  202. return false
  203. end
  204. end
  205. return true
  206. end
  207.  
  208. function home(targetY)
  209. -- print("home:face ", face, ", x = ", x, ", z = ", z)
  210. if x < 0 then
  211. setFace(3)
  212. while x < 0 do
  213. forward()
  214. end
  215. else
  216. if x > 0 then
  217. setFace(1)
  218. while x > 0 do
  219. forward()
  220. end
  221. end
  222. end
  223.  
  224. if z < 0 then
  225. setFace(0)
  226. while z < 0 do
  227. forward()
  228. end
  229. else
  230. if z > 0 then
  231. setFace(2)
  232. while z > 0 do
  233. forward()
  234. end
  235. end
  236. end
  237. end
  238.  
  239. function dump()
  240. for i=2,14 do
  241. turtle.select(i)
  242. turtle.dropDown()
  243. end
  244. end
  245.  
  246. function branchLoop()
  247. torchSpot = 7
  248. local i
  249.  
  250. for i=1,length do
  251. mineForward()
  252. end
  253.  
  254. right()
  255.  
  256. for i=1,3 do
  257. mineForward()
  258. end
  259.  
  260. right()
  261.  
  262. for i=1,length do
  263. mineForward()
  264. end
  265.  
  266. setFace(0)
  267. down()
  268.  
  269. if turtle.detectDown() then
  270. turtle.select(15)
  271. if not turtle.compareDown() then
  272. turtle.digDown()
  273. turtle.suckDown()
  274. turtle.placeDown()
  275. end
  276. end
  277. if turtle.compareDown() then
  278. dump()
  279. end
  280. end
  281.  
  282. -- MAIN PROGRAM
  283.  
  284. turtle.select(1)
  285.  
  286. print("Current Fuel Level: ", currentFuelLevel)
  287.  
  288. if currentFuelLevel ~= "unlimited" then
  289. if currentFuelLevel < minimumFuel then
  290. if not turtle.refuel() then
  291. print("No fuel")
  292. return
  293. end
  294. end
  295. end
  296.  
  297. for loop=1,5 do
  298. addTorch = false
  299.  
  300. rise(1)
  301. for i=1,5 do
  302. mineForward()
  303. end
  304. turtle.back()
  305. turtle.back()
  306. left()
  307. addTorch = true
  308. branchLoop()
  309. end
  310.  
  311.  
  312. print(missionMessage, " Current fuel level is ", turtle.getFuelLevel())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement