Здравствуйте, уважаемые читатели Хабра! Продолжаем писать бота для Minecraft(1.8 - 1.18) с помощью библиотеки mineflayer. С прошлыми уроками можете ознакомиться ТУТ.
Часть 10 (Взаимодействие с коровами)
Создаём асинхронную функцию async function startMilking().
После чего нашему объекту присваиваем фильтр. С помощью фильтра, определяем является ли корова взрослой. Если будет детёнышем, то бот молоко собрать не сможет. А также ставим дистанцию с которой бот будет собирать молоко, ставим < 5 блоков: e.position.distanceTo(bot.entity.position) < 5
bot.on('spawn', async function () {
await startMilking()
async function startMilking() {
setTimeout(async function () {
let nearbyCows = Object.values(bot.entities).filter(e => e.name == 'cow' && e.position.distanceTo(bot.entity.position) < 5 && !e.metadata[16]);
let cow = nearbyCows[Math.floor(Math.random() * nearbyCows.length)];
await bot.lookAt(cow.position, false)
let empty_bucket = bot.inventory.items().filter(item => item.name == 'bucket')[0];
// Необязательный вывод в консоль
if (!empty_bucket) {
console.log('[Предупреждение] В моем инвентаре нет пустого ведра');
return startMilking();
await startMilking();
}, 2000)
}
});
Часть 11 (Значения еды, здоровья, опыта, уровня)
Введя в чат: Здоровье, Еда, Опыт, Уровень , будет выведено соответствующее сообщение.
bot.on('chat', function (username, message) {
if (message === "Здоровье") {
bot.chat('У меня ' + bot.health.toFixed(0) + ' здоровье')
}
if (message === "Еда") {
bot.chat(`У меня ` + bot.food + ` еды`)
}
if (message === "Опыт") {
bot.chat("У меня " + bot.experience.points.toFixed(0) + " опыта")
}
if (message === "Уровень") {
bot.chat('У меня ' + bot.experience.level.toFixed(0) + ' уровень')
}
});
Часть 12 (Автоматическая экипировка тотема)
Для начала необходимо установить плагин командой : npm i mineflayer-auto-totem --save.
Весь код:
bot.loadPlugin(autototem)
bot.on("physicsTick",async() =>{bot.autototem.equip()})
Возможно у вас возник вопрос, как данный плагин работает? Если у бота значение здоровья будет равняться 0 , то выполнится метод equip() и тотем автоматически появится в руке бота. Так будет до тех пор, пока все тотемы не закончатся.
Часть 13 (Радар)
Красным маркером отмечен бот, а зелёным игрок.
Напишем следующий код:
const radarPlugin = require('mineflayer-radar')(mineflayer);
radarPlugin(bot, options);
После чего нажимаем ПКМ на 'mineflayer-radar',
и выбираем первый пункт, чтобы установить плагин. Запустим нашего бота и в консоль будет выведен порт для подключения, запоминаем его. В моём случае это 22355.
Переходим в браузер и пишем localhost:22355. Радар успешно работает.
Часть 14 (Web-инвентарь)
Для начала скачаем плагин, впишем в терминал npm install mineflayer-web-inventory.
const inventoryViewer = require('mineflayer-web-inventory')
inventoryViewer(bot)
После запуска бота пишем в браузере localhost:3000 и наблюдаем за инвентарём. Также можно изменить параметры плагина, используя следующий код.
let options = { port: PORT,webPath: PATH,express: EXPRESS,app: APP, http: HTTP,io: IO,startOnLoad: BOOLEAN,windowUpdateDebounceTime: INT}
inventoryViewer(bot, options)