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