Пишем себе подчиненного(пока только в Minecraft) (Часть 1)
При помощи Node JS и API mineflayer
Для Minecraft существует несколько API для создания ботов, я расскажу о самой популярной из них, mineflayer.
Я, к слову, далеко не специалист в js так что могу допускать кучу ошибок. В следующей части обещаю рассмотреть интересные плагины и более сложные методы
Mineflayer
Mineflayer — высокоуровневое API написанное на Node. js.
Разработчики постоянно его обновляют, тем не менее API всё ещё не поддерживает версию 1.19, посему «подчиненного» мы будем писать на версии 1.18.2.
У mineflayer есть собственный сайт Там указан подробный список фич и модулей апи, видео-туториалы, примеры и список сторонних плагинов дополняющих оригинальный API.
Это апи мы и будем использовать для создания бота.
Собственно начинаем создавать «подчиненного»
Скачиваем Node. js с официального сайта и прописывайте npm install mineflayer в консоль дабы установить API
Далее заходим в Minecraft, создаем новый мир и открываем его для локальной сети. Получаем порт
Теперь нам нужно создать. js файл где мы собственно и будем писать нашего бота. Для меня это dtf. js
Начинаем писать бота
Для начала стоит импортировать библиотеку и создать бота. У бота есть множество параметров. Основные — host, port, username. host отвечает за IP на которое бот будет заходить(в нашем случае — «localhost« или-же »127.0.0.1» поскольку машина должна подключаться к миру в локальной сети). port отвечает за порт на который будет заходить бот, нужно указать тот что вы получили при открытии мира для сети. username отвечает за никнейм бота на сервере. В моем случае это DTFBot, вы можете указать любой.
Уже на данном этапе вы можете запустить бота при помощи node ваш_файл. js, и он даже зайдет в мир! Правда не будет ничего делать.
Добавляем первые функции
Давайте научим нашего бота говорить хоть что-то. Например «Я родился» при появлении в мире
Результат:
Реакция на сообщения
Научим бота реагировать на слова начальника, а то какой-же тогда будет подчиненный?
Учим бота защищать начальника
Как каждый самурай должен быть готов отдать жизнь за своего господина, так каждый подчиненный должен быть готов биться за своего начальника. Поскольку у mineflayer довольно гибкая система взаимодействия с энтити мы можем легко это реализовать!
Защищать нас бот будет от глупых крестьян не имеющих даже пары миллионов наличными.
Теперь после появления в мире каждую секунду бот будет пытаться атаковать ближайшего крестьянина вооружившись мечём если таковой есть в инвентаре. Сначала бот ищет в инвентаре Item в названии которого есть «меч», а затем берет его в руку при помощи bot. equip. Вооружившись мечем бот ищет ближайшего крестьянина по фильтру villagerFilter и атакует его если видит.
Учим подчиненного ходить за начальником
А если начальник решит пройтись? Что бот будет делать? Да ничего, просто стоять на месте. Исправляем!
Тут нам понадобится плагин mineflayer-pathfinder что добавляет возможность пазфайндинга в бота
Устанавливаем его при помощи npm install mineflayer-pathfinder и начинаем работу.
Импортируем пазфайндер и основные его цели при помощи
и загружаем его после объявления бота при помощи
Так-же нам понадобится minecraft-data
Теперь нам остается только добавить комманды «За мной«, «Ко мне» и »Остановись».
После получения комманды бот получает игрока написавшего комманду по его никнейму и создает Goal на его основе. В данном случае это GoalFollow которая дает боту комманду следовать за определенным энтити и GoalNear дающая боту комманду подойти недалеко от указанных координат. Что-бы остановиться мы просто обнуляем Goal
Наблюдаем за работником
Никакой свободы сотрудникам, будем за ними следить!
Для этого нам понадобится prismarine-viewer
По привычной схеме устанавливаем prismarine-viewer и импортируем его в бота
Затем добавляем запуск вьювера на порте 3000 в код
Готово! Веб сервер запускается и достаточно перейти в браузере на localhost:3000 как вам откроется вид от первого лица бота
А если начальник покушать захочет?
У майнфлеера есть и довольно специфичные методы, давайте их используем!
Простой код что заставляет бота взять в руки удочку и воспользоваться ею. Как только бот увидит что рыба клюет он её подцепит.
Плагины
Для mineflayer есть множество интересных плагинов. Лично я рекомендую
Они наиболее хорошо расширяют возможности API
Обязательно посмотрите видео-туториалы по mineflayer
Удачи вам в создании эффективных сотрудников