Files

15 KiB
Raw Permalink Blame History

Minecraft бот (mineflayer)

Бот для Minecraft на JavaScript. Подключается к серверу, ходит, следует за игроком и отвечает на команды в чате. Есть автопереподключение.

Запуск

npm install
npm start

По умолчанию подключается к localhost:25565 с ником Bot в offline-режиме.

Настройка

Меняй параметры в config.js или через переменные окружения:

MC_HOST=play.example.com MC_PORT=25565 MC_USER=MyBot MC_AUTH=offline npm start
Переменная Значение по умолчанию Описание
MC_HOST localhost Адрес сервера
MC_PORT 25565 Порт
MC_USER Bot Ник бота
MC_AUTH offline offline или microsoft (лицензия)
MC_VERSION авто Версия игры (обычно не нужна)
MC_MASTER пусто Ник игрока, чьи команды слушать (пусто — всех)

Плагины

  • mineflayer-web-inventory — веб-просмотр инвентаря бота в реальном времени. Открывается на http://localhost:3000 (порт — webInventoryPort в config). Команда веб печатает ссылку. Стартует после захода на сервер, закрывается при отключении.
  • prismarine-viewer — 3D-обзор мира вокруг бота в браузере (вид от третьего лица). Открывается на http://localhost:3001 (порт — viewerPort в config, VIEWER_PORT=...). Команда обзор (или 3d) печатает ссылку. Стартует после захода на сервер и закрывается при отключении (освобождает порт к реконнекту). Server-side рендер атласа текстур тянет нативный canvas (как и панорама), поэтому 3D-обзор работает только через npm run start:pano (Node 20); под Node 26 он мягко отключается.
  • mineflayer-auto-auth — авто-вход на серверах с /login (AuthMe). Включается, если задан authPassword в config (или MC_PASSWORD=... npm start). Иначе выключен.
  • Панорама (панорама/фото) — своя реализация в src/panorama.js: рендерит 4 стороны света на уровне глаз (fov 90°) и склеивает в одну ленту 360° с ровным горизонтом, сохраняет JPG в panoramaDir. (Готовая сборка из mineflayer-panorama давала кубическую развёртку 3×2 с пустой гранью и заваленным горизонтом — заменено своим рендером.) Графика тянет нативный gl/canvas, которые не работают на Node 26 — они уже собраны под локальный Node 20, поэтому панорама доступна только через npm run start:pano.

Запуск

npm start          # обычный запуск (Node 26). Панорама и 3D-обзор отключены.
npm run start:pano # запуск под встроенным Node 20 — с панорамой и 3D-обзором мира.

Почему два режима

mineflayer-panorama зависит от нативного gl (headless-gl), который не собирается на Node 26 (системный GCC 16 ломает старый код ANGLE, нет prebuild-бинарей). Поэтому в проект положен локальный Node 20 (папка .node20/, в git не коммитится), под которым gl и canvas уже собраны и работают.

  • npm start — под системным Node 26: бот работает полностью, кроме панорамы и 3D-обзора (они мягко отключаются, бот пишет об этом в консоль).
  • npm run start:pano — под .node20/bin/node: панорама и 3D-обзор (prismarine-viewer) тоже работают — у обоих нативный canvas, собранный под Node 20.

mineflayer-panorama вынесен в optionalDependencies, поэтому обычный npm install на Node 26 не падает, даже если gl не соберётся.

Если папку .node20/ удалить — npm start продолжит работать (без панорамы). Чтобы снова собрать панораму, нужен Node 18/20 (через .nvmrc + fnm/nvm) и npm install.

Консоль управления (TUI)

Все команды ниже можно слать прямо из терминала, где запущен бот, не заходя в игру. При запуске появляется строка ввода бот»:

бот» добудь железо 5
бот» атакуй Steve
бот» стой
  • обычная строка — команда бота (тот же список, что и в игровом чате: иди, стой, помощь и т.д.). Из консоли бот действует от имени мастера (MC_MASTER), поэтому «иди»/«за мной»/«kit pvp» работают; если мастер не задан — берётся ближайший игрок.
  • строка с / — уходит на сервер как есть: /tp, /gamemode creative, /say привет.
  • выход или Ctrl-C — закрыть бота.

Ответы бота и весь чат печатаются над строкой ввода, не сбивая набор. Консоль переживает переподключения. При запуске не в терминале (вывод в файл/пайп) TUI не включается — бот работает как раньше.

Команды в чате

Напиши в игровом чате (или в консоли, см. выше):

  • помощь — список команд
  • иди — бот идёт к тебе
  • за мной — следует за тобой
  • стой — остановиться
  • прыгай — подпрыгнуть
  • координаты — назвать свои координаты
  • инвентарь — показать содержимое инвентаря
  • выкинуть <предмет> [N] — выбросить предмет из инвентаря. Без N выкидывает все этого вида. Имя — по minecraft-id (точное или частичное совпадение), напр. выкинуть cobblestone 32, выкинуть rotten_flesh
  • сортировка (или sort) — слить неполные стопки и отсортировать рюкзак по имени.
  • автосорт — вкл/выкл авто-сортировку (по умолчанию включено): бот сам сортирует инвентарь через пару секунд после подбора предметов (но не во время боя, другой задачи или когда открыт сундук/печь). Сортируется только рюкзак (слоты 9–35), хотбар/броня не трогаются.

Добыча и ферма

  • добудь еды [N] — бот охотится на ближайших животных (корова, свинья, курица, овца, кролик) и собирает мясо. N — сколько животных (по умолчанию 3, максимум 64). Пример: добудь еды 6

  • добудь <руду> [N] — находит, доходит и копает указанную руду нужной киркой. N — сколько блоков (по умолчанию 5, максимум 64). Пример: добудь алмаз 10 Поддерживает: уголь, железо, медь, золото, редстоун, лазурит, алмаз, изумруд, кварц (есть и английские названия). Учитывает deepslate-варианты.

  • следи (за огородом) — фоновый режим: бот ходит по грядкам, собирает спелые культуры (пшеница, морковь, картофель, свёкла) и пересаживает семена обратно.

  • приготовь (или пожарь/cook) — бот находит ближайшую печь/коптильню (или ставит свою, если печь есть в инвентаре), кладёт всё сырое мясо и топливо, ждёт прожарки и забирает готовое. Топливо выбирает само (уголь/уголёк → дерево → прочее).

  • автоеда — вкл/выкл авто-питание (по умолчанию включено): бот следит за сытостью. Приоритет: сначала готовая еда → если её нет, а есть сырьё — жарит в печи и ест → если еды совсем нет и он сильно голоден, идёт на охоту, жарит добычу и ест. Сырое мясо съедает только как фолбэк (если жарить негде/нечем). Не отвлекается на еду во время боя; не ест ценное (золотые яблоки/морковь) и вредное (гнильё, ядовитый картофель и т.п.).

  • броня — надеть лучшую броню из инвентаря прямо сейчас.

  • автоброня — вкл/выкл авто-броню (по умолчанию включено): бот сам надевает лучшую по материалу броню (незерит → алмаз → железо → кольчуга/панцирь → золото → кожа) при спавне и каждый раз, когда что-то поднимает. Не снимает уже надетую лучшую.

Прервать любую из этих задач: стой.

Бой (PvP/PvE)

  • атакуй <ник> — атаковать игрока по нику
  • мобы — атаковать ближайшего враждебного моба
  • охрана — вкл/выкл режим охраны (бот сам бьёт враждебных мобов рядом)
  • не — прекратить бой и выключить охрану
  • стой — тоже останавливает бой

Перед атакой бот сам надевает лучшее оружие (меч приоритетнее топора). При нападении поблизости бот огрызается и даёт сдачи.

  • кристалл <ник> [N] (или crystal) — Crystal PvP: бот подходит к игроку, ставит энд-кристалл на обсидиан/бедрок рядом с целью и тут же взрывает его, повторяя до N раз (по умолчанию 10). Нужны end_crystal в инвентаре (и obsidian, если рядом нет основы). В левую руку сам берёт тотем бессмертия, если есть. Прервать — стой.

  • булава <ник> [N] (или mace/элитра/мейс) — Elytra-Mace (техника 1.21): бот надевает элитры, взлетает на фейерверках над целью и пикирует с булавой. На подлёте (≈8 блоков до цели) бот сбрасывает элитры и надевает нагрудник — срывается в свободное падение и бьёт уже в броне, иначе элитры в полёте срезают смэш-урон булавы. Делает N заходов (по умолчанию 1, максимум 16). Нужны в инвентаре: elytra, mace, firework_rocket (взлёт/разгон) и металлический нагрудник (*_chestplate — для свапа и полного урона; без него бьёт прямо в элитрах ослабленно). Полёт считается локальной физикой, без pathfinder. Прервать — стой.

Kit PvP (дуэль) — нужны права OP у бота

  • kit pvp — сохраняет инвентари игрока и бота, очищает их и выдаёт обоим PvP-кит (бот сам надевает броню и берёт меч/щит). Кит настраивается в config.js → pvpKit.
  • kit end — возвращает сохранённые инвентари обоим.

Как это работает: бот не передаёт NBT-инвентаря через чат (там лимит 256 символов), а копирует его на стороне сервера в data-storage командой /data modify storage … set from entity …, и возвращает обратно тем же способом. Поэтому фича требует OP и сервер с поддержкой data-storage (Minecraft 1.16+).

(Английские варианты: come, follow, stop, jump, pos, inv, attack, mobs, guard, ceasefire, kit pvp, kit end.)

Как проверить без своего сервера

Поставь локальный сервер (например PaperMC) с online-mode=false в server.properties, запусти его, затем npm start.