40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
const memory = require('../lib/memory');
|
|
|
|
module.exports = async function rememberSigns(bot, db, sayWithPersona) {
|
|
try {
|
|
const signs = bot.findBlocks({
|
|
matching: block => block.name.includes('sign'),
|
|
maxDistance: 16,
|
|
count: 10
|
|
});
|
|
|
|
for (const pos of signs) {
|
|
const block = bot.blockAt(pos);
|
|
|
|
// In some Mineflayer versions, use .getSignText(), otherwise use .signText or .getBlockEntityData()
|
|
const signText = block.getSignText?.() || block.signText || null;
|
|
|
|
if (signText && signText.trim()) {
|
|
const label = signText.trim();
|
|
const data = {
|
|
x: pos.x,
|
|
y: pos.y,
|
|
z: pos.z
|
|
};
|
|
|
|
memory.saveMemory(db, label, data, (err) => {
|
|
if (!err) {
|
|
sayWithPersona(`you memorized a place labeled '${label}'.`);
|
|
} else {
|
|
console.error("Failed to remember sign label:", err);
|
|
sayWithPersona("you saw a sign but forgot it instantly. classic.");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
} catch (err) {
|
|
console.error("remember-signs.js failed:", err);
|
|
sayWithPersona("you tried to read signs and got confused.");
|
|
}
|
|
};
|