cletus/bot/bot-tasks/eat-food.js
2025-05-09 15:53:19 -05:00

57 lines
1.9 KiB
JavaScript

const { GoalNear } = require('mineflayer-pathfinder').goals;
const memory = require('../lib/memory');
module.exports = async function eatFood(bot, db, sayWithPersona) {
try {
const foodItem = bot.inventory.items().find(i =>
i.name.includes('bread') || i.name.includes('apple') || i.name.includes('carrot')
);
if (foodItem) {
await bot.equip(foodItem, 'hand');
await bot.consume();
sayWithPersona("you were hungry, so you ate something. yum.");
return;
}
sayWithPersona("you're starving and have no food. checking a chest...");
memory.getMemory(db, 'food-chest', async (err, pos) => {
if (err || !pos) {
sayWithPersona("you have no idea where food is. you're doomed.");
return;
}
bot.pathfinder.setGoal(new GoalNear(pos.x, pos.y, pos.z, 1));
const checkChest = setTimeout(async () => {
try {
const chestBlock = bot.blockAt(bot.entity.position.offset(1, 0, 0));
const chest = await bot.openChest(chestBlock);
const food = chest.containerItems().find(item =>
item.name.includes('bread') || item.name.includes('apple')
);
if (food) {
await chest.withdraw(food.type, null, 1);
sayWithPersona("you snagged food from the chest. eating now...");
await bot.equip(food, 'hand');
await bot.consume();
} else {
sayWithPersona("you checked the food chest, but it's empty. awesome.");
}
chest.close();
clearTimeout(checkChest);
} catch (e) {
sayWithPersona("you fumbled the chest like a fool.");
console.error("eat-food chest error:", e);
}
}, 4000);
});
} catch (err) {
console.error("eat-food.js failed:", err);
sayWithPersona("you tried to eat but failed... somehow.");
}
};