mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-08-26 09:03:43 +02:00
fix craftingplan to bias towards common ingredients
This commit is contained in:
parent
9f91e189de
commit
799d6b1cfa
3 changed files with 14 additions and 4 deletions
|
@ -211,7 +211,6 @@ export const queryList = [
|
||||||
// Generate crafting plan
|
// Generate crafting plan
|
||||||
let craftingPlan = mc.getDetailedCraftingPlan(target_item, quantity, curr_inventory);
|
let craftingPlan = mc.getDetailedCraftingPlan(target_item, quantity, curr_inventory);
|
||||||
craftingPlan = prefixMessage + craftingPlan;
|
craftingPlan = prefixMessage + craftingPlan;
|
||||||
console.log(craftingPlan);
|
|
||||||
return pad(craftingPlan);
|
return pad(craftingPlan);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -79,7 +79,7 @@ export async function craftRecipe(bot, itemName, num=1) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!recipes || recipes.length === 0) {
|
if (!recipes || recipes.length === 0) {
|
||||||
log(bot, `You do not have the resources to craft a ${itemName}.`);
|
log(bot, `You do not have the resources to craft a ${itemName}. It requires: ${Object.entries(mc.getItemCraftingRecipes(itemName)[0][0]).map(([key, value]) => `${key}: ${value}`).join(', ')}.`);
|
||||||
if (placedTable) {
|
if (placedTable) {
|
||||||
await collectBlock(bot, 'crafting_table', 1);
|
await collectBlock(bot, 'crafting_table', 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,6 +205,13 @@ export function getItemCraftingRecipes(itemName) {
|
||||||
{craftedCount : r.result.count}
|
{craftedCount : r.result.count}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// sort recipes by if their ingredients include common items
|
||||||
|
const commonItems = ['oak_planks', 'oak_log', 'coal', 'cobblestone'];
|
||||||
|
recipes.sort((a, b) => {
|
||||||
|
let commonCountA = Object.keys(a[0]).filter(key => commonItems.includes(key)).reduce((acc, key) => acc + a[0][key], 0);
|
||||||
|
let commonCountB = Object.keys(b[0]).filter(key => commonItems.includes(key)).reduce((acc, key) => acc + b[0][key], 0);
|
||||||
|
return commonCountB - commonCountA;
|
||||||
|
});
|
||||||
|
|
||||||
return recipes;
|
return recipes;
|
||||||
}
|
}
|
||||||
|
@ -403,7 +410,7 @@ export function getDetailedCraftingPlan(targetItem, count = 1, current_inventory
|
||||||
const inventory = { ...current_inventory };
|
const inventory = { ...current_inventory };
|
||||||
const leftovers = {};
|
const leftovers = {};
|
||||||
const plan = craftItem(targetItem, count, inventory, leftovers);
|
const plan = craftItem(targetItem, count, inventory, leftovers);
|
||||||
return formatPlan(plan);
|
return formatPlan(targetItem, plan);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isBaseItem(item) {
|
function isBaseItem(item) {
|
||||||
|
@ -469,7 +476,7 @@ function craftItem(item, count, inventory, leftovers, crafted = { required: {},
|
||||||
return crafted;
|
return crafted;
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatPlan({ required, steps, leftovers }) {
|
function formatPlan(targetItem, { required, steps, leftovers }) {
|
||||||
const lines = [];
|
const lines = [];
|
||||||
|
|
||||||
if (Object.keys(required).length > 0) {
|
if (Object.keys(required).length > 0) {
|
||||||
|
@ -485,6 +492,10 @@ function formatPlan({ required, steps, leftovers }) {
|
||||||
lines.push('');
|
lines.push('');
|
||||||
lines.push(...steps);
|
lines.push(...steps);
|
||||||
|
|
||||||
|
if (Object.keys(required).some(item => item.includes('oak')) && !targetItem.includes('oak')) {
|
||||||
|
lines.push('Note: Any varient of wood can be used for this recipe.');
|
||||||
|
}
|
||||||
|
|
||||||
if (Object.keys(leftovers).length > 0) {
|
if (Object.keys(leftovers).length > 0) {
|
||||||
lines.push('\nYou will have leftover:');
|
lines.push('\nYou will have leftover:');
|
||||||
Object.entries(leftovers).forEach(([item, count]) =>
|
Object.entries(leftovers).forEach(([item, count]) =>
|
||||||
|
|
Loading…
Add table
Reference in a new issue