ADAM / Adam /control_primitives /craftHelper.js
YuShu
Initial commit
36ba3ef
function failedCraftFeedback(bot, name, item, craftingTable) {
const recipes = bot.recipesAll(item.id, null, craftingTable);
if (!recipes.length) {
throw new Error(`No crafting table nearby`);
} else {
const recipes = bot.recipesAll(
item.id,
null,
mcData.blocksByName.crafting_table.id
);
// find the recipe with the fewest missing ingredients
var min = 999;
var min_recipe = null;
for (const recipe of recipes) {
const delta = recipe.delta;
var missing = 0;
for (const delta_item of delta) {
if (delta_item.count < 0) {
const inventory_item = bot.inventory.findInventoryItem(
mcData.items[delta_item.id].name,
null
);
if (!inventory_item) {
missing += -delta_item.count;
} else {
missing += Math.max(
-delta_item.count - inventory_item.count,
0
);
}
}
}
if (missing < min) {
min = missing;
min_recipe = recipe;
}
}
const delta = min_recipe.delta;
let message = "";
for (const delta_item of delta) {
if (delta_item.count < 0) {
const inventory_item = bot.inventory.findInventoryItem(
mcData.items[delta_item.id].name,
null
);
if (!inventory_item) {
message += ` ${-delta_item.count} more ${
mcData.items[delta_item.id].name
}, `;
} else {
if (inventory_item.count < -delta_item.count) {
message += `${
-delta_item.count - inventory_item.count
} more ${mcData.items[delta_item.id].name}`;
}
}
}
}
bot.chat(`I cannot make ${name} because I need: ${message}`);
}
}