alesandreo

lib/ale/turtle/miner.lua

Aug 11th, 2021 (edited)
569
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.63 KB | None | 0 0
  1. -- https://pastebin.com/tgD36Vx7
  2.  
  3. Miner = Turtle:new()
  4. Miner.whitelist  = BlockList:new()
  5. Miner.blacklist  = BlockList:new()
  6. Miner.flaglist   = BlockList:new()
  7. Miner.flagged    = false
  8. Miner.filler     = BlockList:new()
  9.  
  10. function Miner:isValuable(block_data)
  11.   if self.flaglist:checkBlock(block_data) then
  12.     self.flagged = true
  13.     return false
  14.   end
  15.   if self.blacklist:checkBlock(block_data) then return false end
  16.   if self.whitelist:checkBlock(block_data) then return true end
  17. end
  18.  
  19. function Miner:checkBlock()
  20.   local present
  21.   local block_data
  22.   present, block_data = turtle.inspect()
  23.   if not present then return false end
  24.   return self:isValuable(block_data)
  25. end
  26.  
  27. function Miner:checkBlockDown()
  28.   local present
  29.   local block_data
  30.   present, block_data = turtle.inspectDown()
  31.   if not present then return false end
  32.   return self:isValuable(block_data)
  33. end
  34.  
  35. function Miner:checkBlockUp()
  36.   local present
  37.   local block_data
  38.   present, block_data = turtle.inspectUp()
  39.   if not present then return false end
  40.   return self:isValuable(block_data)
  41. end
  42.  
  43. function Miner:checkMineWall()
  44.   self:processLava()
  45.   if self:checkBlock() then
  46.     self:mineBlock()
  47.   end
  48.   if not turtle.detect() then
  49.     self:fill()
  50.   end
  51. end
  52.  
  53. function Miner:checkMineUp()
  54.   self:processLavaUp()
  55.   if self:checkBlockUp() then
  56.     self:mineBlockUp()
  57.   end
  58.   if not turtle.detectUp() then
  59.     self:fillUp()
  60.   end
  61. end
  62.  
  63. function Miner:checkMineDown()
  64.   self:processLavaDown()
  65.   if self:checkBlockDown() then
  66.     self:mineBlockDown()
  67.   end
  68.   if not turtle.detectDown() then
  69.     self:fillDown()
  70.   end
  71. end
  72.  
  73. function Miner:checkMineWalls()
  74.   self:turnLeft()
  75.   self:checkMineWall()
  76.   self:turnLeft()
  77.   self:turnLeft()
  78.   self:checkMineWall()
  79.   self:turnLeft()
  80.   self:checkMineUp()
  81.   self:checkMineDown()
  82.   self.history:erase_undo(4)
  83. end
  84.  
  85. function Miner:checkMineShaft()
  86.   self:checkMineWall()
  87.   self:turnLeft()
  88.   self:checkMineWall()
  89.   self:turnLeft()
  90.   self:checkMineWall()
  91.   self:turnLeft()
  92.   self:checkMineWall()
  93.   self:turnLeft()
  94.   self:checkMineUp()
  95.   self:checkMineDown()
  96.   self.history:erase_undo(4)
  97. end
  98.  
  99. function Miner:mineBlock()
  100.   if self.stack >= self.MAX_STACK_DEPTH then
  101.     return true
  102.   end
  103.   os.sleep(self.stack/10)
  104.   self.stack = self.stack + 1
  105.   self:forward()
  106.   self:printPosition()
  107.   self:checkMineShaft()
  108.   self:rewind(1,false)
  109.   self:fill()
  110.   self.stack = self.stack - 1
  111. end
  112.  
  113. function Miner:mineBlockUp()
  114.   if self.stack >= self.MAX_STACK_DEPTH then
  115.     return true
  116.   end
  117.   os.sleep(self.stack/10)
  118.   self.stack = self.stack + 1
  119.   self:up()
  120.   self:checkMineShaft()
  121.   self:rewind(1,false)
  122.   self:fillUp()
  123.   self.stack = self.stack - 1
  124. end
  125.  
  126. function Miner:mineBlockDown()
  127.   if self.stack >= self.MAX_STACK_DEPTH then
  128.     return true
  129.   end
  130.   os.sleep(self.stack/10)
  131.   self.stack = self.stack + 1
  132.   self:down()
  133.   self:checkMineShaft()
  134.   self:rewind(1,false)
  135.   self:fillDown()
  136.   self.stack = self.stack - 1
  137. end
  138.  
  139. function Miner:processLava()
  140.   local bucket_slot
  141.   local lava_slot
  142.   local present
  143.   local block_data
  144.   present, block_data = turtle.inspect()
  145.   if present and block_data.name == 'minecraft:lava' then
  146.     bucket_slot = self.inventory:getSlot("minecraft:bucket")
  147.     if bucket_slot == nil then
  148.       print("No bucket found in inventory.")
  149.       return false
  150.     end
  151.     bucket_slot:select()
  152.     turtle.place()
  153.     lava_slot = self.inventory:getSlot("minecraft:lava_bucket")
  154.     if lava_slot then
  155.       lava_slot:select()
  156.       turtle.refuel()
  157.     end
  158.     return true
  159.   end
  160.   return true
  161. end
  162.  
  163. function Miner:processLavaDown()
  164.   local bucket_slot
  165.   local lava_slot
  166.   local present
  167.   local block_data
  168.   present, block_data = turtle.inspectDown()
  169.   if present and block_data.name == 'minecraft:lava' then
  170.     bucket_slot = self.inventory:getSlot("minecraft:bucket")
  171.     if bucket_slot == nil then
  172.       print("No bucket found in inventory.")
  173.       return false
  174.     end
  175.     bucket_slot:select()
  176.     turtle.placeDown()
  177.     lava_slot = self.inventory:getSlot("minecraft:lava_bucket")
  178.     if lava_slot then
  179.       lava_slot:select()
  180.       turtle.refuel()
  181.     end
  182.     return true
  183.   end
  184.   return true
  185. end
  186.  
  187. function Miner:processLavaUp()
  188.   local bucket_slot
  189.   local lava_slot
  190.   local present
  191.   local block_data
  192.   present, block_data = turtle.inspectUp()
  193.   if present and block_data.name == 'minecraft:lava' then
  194.     bucket_slot = self.inventory:getSlot("minecraft:bucket")
  195.     if bucket_slot == nil then
  196.       print("No bucket found in inventory.")
  197.       return false
  198.     end
  199.     bucket_slot:select()
  200.     turtle.placeUp()
  201.     lava_slot = self.inventory:getSlot("minecraft:lava_bucket")
  202.     if lava_slot then
  203.       lava_slot:select()
  204.       turtle.refuel()
  205.     end
  206.     return true
  207.   end
  208.   return true
  209. end
  210.  
  211. function Miner:getFillerSlot()
  212.   local filler_slot
  213.   for block, block_bool in pairs(self.filler.blocks) do
  214.     filler_slot = self.inventory:getSlot(block)
  215.     if filler_slot then
  216.       return filler_slot
  217.     end
  218.   end
  219. end
  220.  
  221. function Miner:fill()
  222.   local filler_slot
  223.   filler_slot = Miner:getFillerSlot()
  224.   if filler_slot then
  225.     filler_slot:select()
  226.     turtle.place()
  227.     return true
  228.   else
  229.     return false
  230.   end
  231. end
  232.  
  233. function Miner:fillDown()
  234.   local filler_slot
  235.   if filler_slot then
  236.     filler_slot = Miner:getFillerSlot()
  237.     filler_slot:select()
  238.     turtle.placeDown()
  239.     return true
  240.   else
  241.     return false
  242.   end
  243. end
  244.  
  245. function Miner:fillUp()
  246.   local filler_slot
  247.   if filler_slot then
  248.     filler_slot = Miner:getFillerSlot()
  249.     filler_slot:select()
  250.     turtle.placeUp()
  251.     return true
  252.   else
  253.     return false
  254.   end
  255. end
Add Comment
Please, Sign In to add comment