|
|
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`); |
|
|
} |
|
|
|