| async function mineBlock(bot, name, count = 1) { |
| |
| if (typeof name !== "string") { |
| throw new Error(`name for mineBlock must be a string`); |
| } |
| if (typeof count !== "number") { |
| throw new Error(`count for mineBlock must be a number`); |
| } |
| const blockByName = mcData.blocksByName[name]; |
| if (!blockByName) { |
| throw new Error(`No block named ${name}`); |
| } |
| const blocks = bot.findBlocks({ |
| matching: [blockByName.id], |
| maxDistance: 32, |
| count: 1024, |
| }); |
| if (blocks.length === 0) { |
| bot.chat(`No ${name} nearby, please explore first`); |
| _mineBlockFailCount++; |
| if (_mineBlockFailCount > 10) { |
| throw new Error( |
| "mineBlock failed too many times, make sure you explore before calling mineBlock" |
| ); |
| } |
| return; |
| } |
| const targets = []; |
| for (let i = 0; i < blocks.length; i++) { |
| targets.push(bot.blockAt(blocks[i])); |
| } |
| await bot.collectBlock.collect(targets, { |
| ignoreNoPath: true, |
| count: count, |
| }); |
| bot.save(`${name}_mined`); |
| } |
|
|