File size: 1,492 Bytes
36ba3ef |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
async function craftItem(bot, name, count = 1) {
// return if name is not string
if (typeof name !== "string") {
throw new Error("name for craftItem must be a string");
}
// return if count is not number
if (typeof count !== "number") {
throw new Error("count for craftItem must be a number");
}
const itemByName = mcData.itemsByName[name];
if (!itemByName) {
throw new Error(`No item named ${name}`);
}
const craftingTable = bot.findBlock({
matching: mcData.blocksByName.crafting_table.id,
maxDistance: 32,
});
if (!craftingTable) {
bot.chat("Craft without a crafting table");
} else {
await bot.pathfinder.goto(
new GoalLookAtBlock(craftingTable.position, bot.world)
);
}
const recipe = bot.recipesFor(itemByName.id, null, 1, craftingTable)[0];
if (recipe) {
bot.chat(`I can make ${name}`);
try {
await bot.craft(recipe, count, craftingTable);
bot.chat(`I did the recipe for ${name} ${count} times`);
} catch (err) {
bot.chat(`I cannot do the recipe for ${name} ${count} times`);
}
} else {
failedCraftFeedback(bot, name, itemByName, craftingTable);
_craftItemFailCount++;
if (_craftItemFailCount > 10) {
throw new Error(
"craftItem failed too many times, check chat log to see what happened"
);
}
}
}
|