async function mineBlock(bot, name, count = 1) { // return if name is not string 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`); }