asweigart

Untitled

Feb 17th, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. --[[lava scooper
  2. Just goes forward until it is blocked or fills up on lava, then returns]]
  3. local tArgs = {...}
  4.  
  5. if #tArgs < 1 and tonumber(tArgs[1]) ~= nil then
  6. print('Usage: getlava <distance>')
  7. print(' Moves forward, looking for lava. Be')
  8. print(' sure to have empty buckets in the')
  9. print(' inventory!')
  10. return
  11. end
  12.  
  13. local MAX_DISTANCE = tonumber(tArgs[1])
  14. local movesForward = 0
  15. local movesDown = 0
  16. local i
  17.  
  18.  
  19. local function hasEmptyBucket()
  20. for i=1,16 do
  21. itemData = turtle.getItemDetail(i)
  22. if itemData ~= nil and itemData['name'] == 'minecraft:bucket' then
  23. return true
  24. end
  25. end
  26. return false
  27. end
  28.  
  29. local function refuelIfNeeded()
  30. if turtle.getFuelLimit() ~= 'unlimited' then
  31. -- find a lava bucket and refuel with it
  32. for i=1,16 do
  33. if turtle.getFuelLevel() + 1000 < turtle.getFuelLimit() then
  34. itemData = turtle.getItemDetail(i)
  35. if itemData ~= nil and itemData['name'] == 'minecraft:lava_bucket' then
  36. print('Using lava to refuel: ', turtle.refuel())
  37. end
  38. end
  39. end
  40. end
  41. end
  42.  
  43. local function selectEmptyBucket()
  44. for i=1,16 do
  45. itemData = turtle.getItemDetail(i)
  46. if itemData ~= nil and itemData['name'] == 'minecraft:bucket' then
  47. turtle.select(i)
  48. return true
  49. end
  50. end
  51. return false
  52. end
  53.  
  54.  
  55.  
  56. --main program
  57. local moved = false
  58. local gotLava = false
  59.  
  60. if not hasEmptyBucket() then
  61. print('I need an empty bucket!')
  62. return
  63. end
  64.  
  65. print('Starting...')
  66.  
  67. -- move forward until you hit the limit
  68. while movesForward < MAX_DISTANCE and hasEmptyBucket() do
  69. movesDown = 0
  70. while true do
  71. -- check if we're over lava
  72. exists, itemData = turtle.inspectDown()
  73. if exists and itemData['name'] == 'minecraft:flowing_lava' and selectEmptyBucket() then
  74. -- found lava, try to pick it up
  75. gotLava = turtle.placeDown()
  76. if gotLava then
  77. print('Got some lava.')
  78. refuelIfNeeded()
  79. end
  80. -- while we're at it, let's try to get lava from around
  81. -- check for lava in front:
  82. exists, itemData = turtle.inspect()
  83. if exists and itemData['name'] == 'minecraft:flowing_lava' and selectEmptyBucket() then
  84. gotLava = turtle.place()
  85. if gotLava then
  86. print('Got some lava.')
  87. refuelIfNeeded()
  88. end
  89. end
  90. -- check for lava to the left:
  91. turtle.turnLeft()
  92. exists, itemData = turtle.inspect()
  93. if exists and itemData['name'] == 'minecraft:flowing_lava' and selectEmptyBucket() then
  94. gotLava = turtle.place()
  95. if gotLava then
  96. print('Got some lava.')
  97. refuelIfNeeded()
  98. end
  99. end
  100. turtle.turnRight()
  101. -- check for lava to the right:
  102. turtle.turnRight()
  103. exists, itemData = turtle.inspect()
  104. if exists and itemData['name'] == 'minecraft:flowing_lava' and selectEmptyBucket() then
  105. gotLava = turtle.place()
  106. if gotLava then
  107. print('Got some lava.')
  108. refuelIfNeeded()
  109. end
  110. end
  111. turtle.turnLeft()
  112.  
  113. moved = turtle.down()
  114. if moved then
  115. movesDown = movesDown + 1
  116. else
  117. break -- if we can't move down, then move back up
  118. end
  119. else
  120. break -- start going back up
  121. end
  122. end
  123. -- go back up
  124. for i=1,movesDown do
  125. moved = turtle.up()
  126. if not moved then
  127. for i=1,8 do -- keep trying 8 times to get unstuck
  128. -- stuck somehow? dig up to get out
  129. turtle.digUp()
  130. moved = turtle.up()
  131. if not moved then
  132. print('I appear to be stuck under something!')
  133. sleep(5) -- try again in 5 seconds
  134. else
  135. break
  136. end
  137. end
  138. if not moved then
  139. -- was unable to get unstuck after all those tries
  140. print('Shutting down... :(')
  141. return
  142. end
  143. end
  144. end
  145.  
  146. -- move forward if needed
  147. moved = turtle.forward()
  148. if moved then
  149. movesForward = movesForward + 1
  150. else
  151. break -- if we can't move forward, then head back home
  152. end
  153.  
  154. if not hasEmptyBucket() then
  155. print('All filled up!')
  156. end
  157. end
  158.  
  159.  
  160. print('Reached distance of ', movesForward)
  161. print('Heading home...')
  162. for i=1,movesForward do
  163. moved = turtle.back()
  164. if not moved then
  165. print('I can\'t move back!')
  166. end
  167. end
  168.  
  169. print('Done')
Add Comment
Please, Sign In to add comment