Advertisement
makmoud98

Untitled

Feb 18th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. NAMES = {'TConstruct:SearedBrick','chisel:marble','chisel:granite','chisel:diorite','minecraft:chest', 'ComputerCraft:CC-TurtleExpanded','minecraft:obsidian','minecraft:flowing_lava','minecraft:flowing_water','minecraft:lava','minecraft:water','chisel:andesite','chisel:limestone','minecraft:dirt','minecraft:stone','minecraft:granite','minecraft:diorite','minecraft:andesite','minecraft:gravel', 'minecraft:sand', 'minecraft:cobblestone'}
  2. PROTOCOL = 'mine'
  3. HOSTNAME = 'mineman'
  4.  
  5. function is_stone(success, data)
  6. if success then
  7. for i = 1, #NAMES do
  8. if NAMES[i] == data.name then
  9. return ""
  10. end
  11. end
  12. local id = rednet.lookup(PROTOCOL, HOSTNAME)
  13. if id then
  14. rednet.send(id, data.name, PROTOCOL)
  15. end
  16. return false
  17. end
  18. return true
  19. end
  20.  
  21. function dig_vein(i, path, moving_back)
  22. if path[i] == nil then
  23. path[i] = {}
  24. end
  25. --check up down and forward first,
  26. if not moving_back then
  27. if #path[i] == 0 then
  28. if not is_stone(turtle.inspectUp()) then
  29. path[i][#path[i]+1] = 0
  30. end
  31. if not is_stone(turtle.inspectDown()) then
  32. path[i][#path[i]+1] = 1
  33. end
  34. for j = 1, 4 do--forward, left, back, right
  35. if not is_stone(turtle.inspect()) then
  36. path[i][#path[i]+1] = 1 + j
  37. end
  38. turtle.turnLeft()
  39. end
  40. end
  41. if #path[i] == 0 then--go back from the path you started
  42. return dig_vein(i, path, true)
  43. else
  44. local dir = path[i][1]
  45. if dir == 0 then
  46. turtle.digUp()
  47. for x=0,20 do
  48. if not turtle.up() then
  49. turtle.digUp()
  50. else
  51. break
  52. end
  53. end
  54. elseif dir == 1 then
  55. turtle.digDown()
  56. turtle.down()
  57. elseif dir == 2 then
  58. turtle.dig()
  59. for x=0,20 do
  60. if not turtle.forward() then
  61. turtle.dig()
  62. else
  63. break
  64. end
  65. end
  66. elseif dir == 3 then
  67. turtle.turnLeft()
  68. turtle.dig()
  69. for x=0,20 do
  70. if not turtle.forward() then
  71. turtle.dig()
  72. else
  73. break
  74. end
  75. end
  76. elseif dir == 4 then
  77. turtle.turnLeft()
  78. turtle.turnLeft()
  79. turtle.dig()
  80. for x=0,20 do
  81. if not turtle.forward() then
  82. turtle.dig()
  83. else
  84. break
  85. end
  86. end
  87. elseif dir == 5 then
  88. turtle.turnRight()
  89. turtle.dig()
  90. for x=0,20 do
  91. if not turtle.forward() then
  92. turtle.dig()
  93. else
  94. break
  95. end
  96. end
  97. end
  98. i = i + 1
  99. return dig_vein(i, path, false)
  100. end
  101. else--moving back
  102. i = i - 1
  103. if i == 0 then
  104. return 0
  105. elseif #path[i] > 0 then
  106. local dir = path[i][1]
  107. if dir == 0 then
  108. turtle.down()
  109. elseif dir == 1 then
  110. for x=0,20 do
  111. if not turtle.up() then
  112. turtle.digUp()
  113. else
  114. break
  115. end
  116. end
  117. elseif dir == 2 then
  118. turtle.back()
  119. elseif dir == 3 then
  120. turtle.back()
  121. turtle.turnRight()
  122. elseif dir == 4 then
  123. turtle.back()
  124. turtle.turnLeft()
  125. turtle.turnLeft()
  126. elseif dir == 5 then
  127. turtle.back()
  128. turtle.turnLeft()
  129. end
  130. table.remove(path[i], 1)
  131. if #path[i] > 0 then
  132. return dig_vein(i, path, false)
  133. else
  134. return dig_vein(i, path, true)
  135. end
  136. end
  137. end
  138. end
  139.  
  140. function refuel(f)
  141. for k = 1, 16 do
  142. turtle.select(k)
  143. if turtle.refuel(f) then
  144. return true
  145. end
  146. end
  147. end
  148.  
  149. function dropAll()
  150. foundcoal = false
  151. for k = 1, 16 do
  152. turtle.select(k)
  153. local data = turtle.getItemDetail()
  154. if not foundcoal and data and data.name == 'minecraft:coal' then
  155. foundcoal = true
  156. else
  157. turtle.dropDown()
  158. end
  159. end
  160. end
  161.  
  162. function hasSpace()
  163. for slot=1,16 do
  164. if turtle.getItemDetail(slot) == nil then
  165. return true
  166. end
  167. end
  168. return false
  169. end
  170.  
  171. function split(inputstr, sep)
  172. if sep == nil then
  173. sep = "%s"
  174. end
  175. local t={} ; i=1
  176. for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
  177. t[i] = str
  178. i = i + 1
  179. end
  180. return t
  181. end
  182.  
  183. function mine(height, length)
  184. for i=1,height do
  185. turtle.digUp()
  186. turtle.up()
  187. end
  188. for i=1,length do
  189. if i == 100 then
  190. break
  191. end
  192. if turtle.getFuelLevel() < (length*1.2) then
  193. if not refuel(2) then
  194. return false
  195. end
  196. end
  197. if not hasSpace() then
  198. for k = 2, i do
  199. turtle.back()
  200. end
  201. for i=1,height do
  202. turtle.digDown()
  203. turtle.down()
  204. end
  205. refuel(5)
  206. dropAll()
  207. if turtle.getFuelLevel() < (i*1.2) then
  208. return false
  209. end
  210. for k = 2, i do
  211. for x=0,20 do
  212. if not turtle.forward() then
  213. turtle.dig()
  214. else
  215. break
  216. end
  217. end
  218. end
  219. end
  220. if turtle.detect() then
  221. turtle.dig()
  222. end
  223. for x=0,20 do
  224. if not turtle.forward() then
  225. turtle.dig()
  226. else
  227. break
  228. end
  229. end
  230. dig_vein(1,{},false)
  231. if turtle.detectDown() then
  232. turtle.digDown()
  233. end
  234. turtle.down()
  235. dig_vein(1,{},false)
  236. for x=0,20 do
  237. if not turtle.up() then
  238. turtle.digUp()
  239. else
  240. break
  241. end
  242. end
  243. end
  244. turtle.turnLeft()
  245. turtle.turnLeft()
  246. for i = 1, length do
  247. for x=0,20 do
  248. if not turtle.forward() then
  249. turtle.dig()
  250. else
  251. break
  252. end
  253. end
  254. if turtle.getFuelLevel() == 0 then
  255. return false
  256. end
  257. end
  258. for i=1,height do
  259. turtle.digDown()
  260. turtle.down()
  261. end
  262. dropAll()
  263. turtle.turnLeft()
  264. turtle.turnLeft()
  265. return true
  266. end
  267.  
  268. rednet.open('right')
  269.  
  270. while true do
  271. local id, msg, prot = rednet.receive()
  272. local id1 = rednet.lookup(PROTOCOL, HOSTNAME)
  273. if id1 and id == id1 and prot == PROTOCOL then
  274. print('got cmd')
  275. tokens = split(msg, ' ')
  276. if #tokens == 2 and tokens[1] == 'mine' then
  277. print('got mine cmd')
  278. h = 0
  279. while mine(h,tonumber(tokens[2])) do
  280. h = h + 4
  281. if h > 50 then
  282. break
  283. end
  284. end
  285. end
  286. end
  287. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement