alesandreo

branch_mine.lua

Aug 12th, 2021 (edited)
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.39 KB | None | 0 0
  1. -- https://pastebin.com/Pt4DqMfH
  2. -- Created by IntelliJ IDEA.
  3. -- User: amcconaughey
  4. -- Date: 4/3/20
  5. -- Time: 4:07 PM
  6. -- To change this template use File | Settings | File Templates.
  7. --
  8. require('lib.ale.ale')
  9.  
  10. Mine = {
  11.     chest_active = false,
  12.     miner = Miner:new(),
  13.     materials = BlockList:new()
  14. }
  15. Mine.__index = Mine
  16.  
  17. function Mine:new(direction)
  18.     local mine = {}
  19.     setmetatable(mine, Mine)
  20.     mine.miner.flaglist:addBlock("minecraft:emerald_ore")
  21.     mine.miner.flaglist:addBlock("minecraft:diamond_ore")
  22.     mine.miner.whitelist:addTag("forge:ores")
  23.     mine.miner.filler:addBlock("minecraft:cobblestone")
  24.     mine.materials:addBlock("minecraft:chest")
  25.     mine.materials:addBlock("minecraft:torch")
  26.     if direction and direction == "left" then
  27.         mine.action = 'turnLeft'
  28.     else
  29.         mine.action = 'turnRight'
  30.     end
  31.     mine.miner:save_position('start')
  32.     return mine
  33. end
  34.  
  35. function Mine:setup()
  36.     self:createDropPoint()
  37. end
  38.  
  39. function Mine:createDropPoint()
  40.     local chest_slot
  41.     self.miner.inventory:consolidate()
  42.     chest_slot = self.miner.inventory:getSlot("minecraft:chest")
  43.     if not chest_slot then
  44.         return self:abort("No chests left in inventory, cannot create.")
  45.     end
  46.     self.miner:doAction(self.action)
  47.     self.miner:up()
  48.     self.miner:checkMineWall()
  49.     turtle.dig()
  50.     self.miner:down()
  51.     self.miner:checkMineWall()
  52.     turtle.dig()
  53.     self.miner.history:erase_undo(2)
  54.     chest_slot:select()
  55.     turtle.place()
  56.     self.miner:delete_position('active_drop_point')
  57.     self.miner:save_position('active_drop_point')
  58.     self.chest_active = true
  59.     self.miner:doOppositeAction(self.action)
  60. end
  61.  
  62. function Mine:dumpableSlot(block_name)
  63.     if not block_name then
  64.         return false
  65.     end
  66.     if self.materials:checkBlockName(block_name) then
  67.         return false
  68.     end
  69.     if self.miner.filler:checkBlockName(block_name) then
  70.         return false
  71.     end
  72.     return true
  73. end
  74.  
  75. function Mine:dumpInventory()
  76.     local presence, target = turtle.inspect()
  77.    
  78.     self.miner.inventory:consolidate()
  79.     if not presence then
  80.         return self:abort("Attempted to dump inventory with no target block.")
  81.     end
  82.     if not (target.name == "minecraft:chest") then
  83.         return self:abort("Attempted to dump inventory with no target chest.")
  84.     end
  85.     for k, slot in ipairs(self.miner.inventory.slots) do
  86.         if slot and self:dumpableSlot(slot:getName()) then
  87.             slot:select()
  88.             if not turtle.drop() then
  89.                 self.chest_active = false
  90.             end
  91.         end
  92.     end
  93.     return true
  94. end
  95.  
  96. function Mine:cleanUpInventory()
  97.     if self.chest_active then
  98.         self.miner:save_position('cleanup_resume')
  99.         self.miner:rewindToSavedPosition('active_drop_point')
  100.         self:dumpInventory()
  101.         self.miner:replayToSavedPosition('cleanup_resume')
  102.         self.miner:delete_position('cleanup_resume')
  103.     end
  104.     return self.chest_active
  105. end
  106.  
  107. function Mine:forward_trunk(place_torch)
  108.     if place_torch == nil then place_torch = false end
  109.     self.miner:forward()
  110.     self.miner:doAction(self.action)
  111.     self.miner:down()
  112.     self.miner:checkMineDown()
  113.     self.miner:checkMineWall()
  114.     for level = 1, 5, 1 do
  115.         self.miner:up()
  116.         self.miner:checkMineWall()
  117.     end
  118.     self.miner:checkMineUp()
  119.     self.miner:rewind(7, false)
  120.     if place_torch then
  121.         self:place_torch()
  122.     end
  123.     return true
  124. end
  125.  
  126. function Mine:trunk(trunk_length, branch_length)
  127.     local count = 0
  128.     for count = 1, trunk_length, 1 do
  129.         if count % 6 == 0 then
  130.             self:main_branch(branch_length)
  131.         end
  132.         self:forward_trunk((count % 6 == 3 ))
  133.     end
  134. end
  135.  
  136. function Mine:branch_forward(place_torch)
  137.     if place_torch == nil then place_torch = false end
  138.     self.miner:forward()
  139.     self.miner:checkMineWalls()
  140.     self.miner:down()
  141.     self.miner:checkMineDown()
  142.     self.miner:checkMineWalls()
  143.     self.miner:rewind(1, false)
  144.     self.miner:up()
  145.     self.miner:checkMineWalls()
  146.     self.miner:checkMineUp()
  147.     self.miner:rewind(1, false)
  148.     if place_torch then
  149.         self:place_torch()
  150.     end
  151. end
  152.  
  153. function Mine:mine_branch(branch_length)
  154.     for count = 1, branch_length, 1 do
  155.         self:branch_forward((count % 7 == 3))
  156.         self.miner.inventory:consolidate()
  157.         if self.miner.inventory:is_full() then
  158.             self:cleanUpInventory()
  159.         end
  160.     end
  161. end
  162.  
  163. function Mine:main_branch(branch_length)
  164.     self.miner:save_position('main_branch_point')
  165.     self.miner:doAction(self.action)
  166.     if not self.chest_active then
  167.         self.miner:doOppositeAction(self.action)
  168.         self.miner:back()
  169.         self.miner:back()
  170.         self:createDropPoint()
  171.         self:cleanUpInventory()
  172.         self.miner:forward()
  173.         self.miner:forward()
  174.         self.miner:doAction(self.action)
  175.     end
  176.     self:mine_branch(branch_length)
  177.     self.miner:rewindToSavedPosition('main_branch_point', false)
  178.     self.miner:doAction(self.action)
  179.     self.miner:forward()
  180.     self.miner:down()
  181.     self.miner:down()
  182.     self.miner:down()
  183.     self.miner:back()
  184.     self.miner:down()
  185.     self.miner:down()
  186.     self.miner:rewind(1, false)
  187.     self:mine_branch(branch_length)
  188.     self.miner:rewindToSavedPosition('main_branch_point', false)
  189.     self.miner:doAction(self.action)
  190.     self.miner:forward()
  191.     self.miner:up()
  192.     self.miner:up()
  193.     self.miner:up()
  194.     self.miner:up()
  195.     self.miner:up()
  196.     self.miner:up()
  197.     self.miner:rewind(1, false)
  198.     self:mine_branch(branch_length)
  199.     self.miner:rewindToSavedPosition('main_branch_point', false)
  200.     self.miner:delete_position('main_branch_point')
  201.     if self.miner.flagged then
  202.         local torch_slot = self.miner.inventory:getSlot('minecraft:torch')
  203.         if torch_slot then
  204.             torch_slot:select()
  205.             turtle.placeDown()
  206.             self.miner.flagged = false
  207.         end
  208.     end
  209. end
  210.  
  211. function Mine:place_torch()
  212.     self.miner:doAction(self.action)
  213.     local torch_slot = self.miner.inventory:getSlot('minecraft:torch')
  214.     if torch_slot then
  215.         torch_slot:select()
  216.         turtle.placeUp()
  217.     end
  218.     self.miner:rewind(1, false)
  219. end
  220.  
  221. function Mine:abort(message)
  222.     self.miner:rewindToSavedPosition('start')
  223.     error(message)
  224. end
  225.  
  226. Branch_Mine = Mine:new()
  227. Branch_Mine:setup()
  228. Branch_Mine:trunk(32,16)
Add Comment
Please, Sign In to add comment