ИИ-компаньон для одиночной игры в Minecraft Java Edition 1.21.1 с NeoForge. Версия мода: 0.0.2. Номер меняется только по явному решению владельца.
Олег общается по-русски, следует за игроком, добывает ресурсы (в том числе песок, красный песок, гравий и кремень лопатой, стекло из песка, огниво из железа и кремня), создаёт предметы по настоящим рецептам, переносит вещи, работает с сундуками и печами, строит небольшой деревянный дом и помогает в бою. Возможности ограничены доступными материалами и маршрутами; произвольные большие постройки и полноценная самостоятельная игра ещё не реализованы.
Олег помнит тебя между сессиями, подстраивает характер под твою манеру и сам заводит разговор, отзывается на важные события и доводит длинные заказы вроде полного набора брони до конца. Справа — полоска его настроения (клавиша N). Вместо OpenRouter можно указать свой сервер модели (Ollama, LM Studio).
Изменения и проверки этой версии. Сборка 29.10.2026: свой поиск пути,
ходьба и бег как у игрока, лестницы, справка по Minecraft и плавка без простоя у печи —
подробнее. Вторая сборка 29.10.2026: долгие цели вроде «сделай себе
алмазную броню» и видимое «Олег думает…» — подробнее.
Сборка 30.10.2026: раскладка по сундукам, ответы на вопросы словами, настоящие причины неудач,
счёт на охоте и /companion summon между измерениями — подробнее.
Вторая сборка 30.10.2026: грядки и урожай, загон и разведение животных —
подробнее.
Сборка 31.10.2026: стрельба из лука, переход за игроком через порталы в Незер и Край, песок, гравий,
кремень, стекло и огниво — подробнее. Эту сборку автор ещё не проверял
в игре: будем рады отзывам в Issues.
Прошлая сборка: 27.10.2026.
- Подготовьте отдельный профиль Minecraft 1.21.1 с NeoForge 21.1.262 или совместимым более новым 21.1.x.
- Откройте Releases справа на странице и скачайте
aicompanion-0.0.2.jarиз Assets. - Положите JAR в папку
modsэтого профиля и запустите игру. Для экспериментов используйте копию мира. - Откройте настройки AI Companion и введите свой ключ OpenRouter и модель. Для голоса добавьте свой Inworld Basic credential и voice ID. В опубликованном проекте чужих ключей нет.
Вместо OpenRouter можно указать в поле «Адрес сервера модели» свой сервер с OpenAI-совместимым API, например локальную Ollama (
http://localhost:11434/v1) или LM Studio (http://localhost:1234/v1), и название загруженной в него модели. Локальному серверу ключ не нужен; модель должна уметь вызывать инструменты или отвечать JSON. Инструкция Олега длинная: в Ollama увеличьте длину контекста (переменнаяOLLAMA_CONTEXT_LENGTH), иначе её начало обрежется.
Code → Download ZIP скачивает исходники для разработки. Для игры нужен JAR из Releases или самостоятельная сборка.
- C — чат и доступ к настройкам.
- J — задачи, их состояние, приоритет и отмена.
- V — удерживать для записи голоса, отпустить для отправки.
- ПКМ по Олегу — его инвентарь.
- G — маркер компаньона.
- N — полоска настроения Олега справа: его настроение сейчас, связь с тобой и черты характера.
Клавиши можно изменить в настройках управления. Например: «следуй за мной», «стой здесь», «иди ко мне», «добудь 10 камня», «сделай себе каменную кирку», «сложи ресурсы в сундук». Некоторые прямые команды работают без OpenRouter; свободный диалог и сложные планы требуют настроенного провайдера. Голос требует Inworld. Условия и стоимость внешних сервисов определяются самими провайдерами.
Большой заказ на много игровых часов Олег ведёт сам, по этапам, и хранит цель в сохранении мира: она переживает перезапуск игры. Выбор закрытый, из трёх целей; Олег не придумывает свои. Какой этап выполнен, он проверяет по фактам игры, а не на слово.
- Снаряжение — полный набор: кирка, меч, шлем, нагрудник, поножи, ботинки. По умолчанию железный, можно попросить алмазный: «сделай себе железную броню», «собери себе алмазную броню».
- Подготовка к Незеру — алмазное снаряжение, запас готовой еды, булыжник, огниво: «подготовься к Незеру». Огниво Олег делает сам из железного слитка и кремня, который выкапывает из гравия.
- Победа над драконом Края: «иди убей дракона». Олег сделает ту часть, которую уже умеет, и назовёт, чего пока не умеет.
Цель ставится через модель, поэтому нужен настроенный провайдер. В ответе Олег говорит, что сделает и чего пока не умеет. Одновременно ведётся одна цель и может быть отложена ещё одна.
Управление целью работает и без провайдера:
- «как там цель» — рассказать, как идут дела.
- «отложи цель» — отложить; она ждёт, пока ты не скажешь вернуться.
- «продолжай», «вернись к цели» или «продолжай цель» — продолжить.
- «отмени цель» или «забудь про цель» — отменить насовсем.
Обычная просьба прерывает цель, и после неё Олег возвращается к цели сам. Режимы («следуй за мной», «стой здесь», «защищай меня») и «стоп» только останавливают текущее дело: цель ждёт, пока ты не скажешь вернуться к ней. Опасность (бой, огонь, лава) ставит цель на паузу; если она не отступает больше минуты, Олег останавливается и просит помощи. Если Олег погиб, он один раз пробует подобрать свои выпавшие вещи или говорит, где они остались.
На экране задач (J) цель стоит первой строкой, под ней этапы: ✔ сделано, ▶ сейчас, · дальше, ✖ не умею, ! помеха. Кнопки: «Продолжить», «Отложить», «Отменить цель». Состояние цели входит в игровой контекст для модели, поэтому на вопросы вроде «сколько осталось» Олег отвечает по нему.
Ключи вводятся локально и хранятся в config/aicompanion-client.toml папки Minecraft. Этот файл, его резервные копии, миры, журналы и прежняя локальная история Git не включены в публикацию.
При включённых функциях OpenRouter (или сервер из поля «Адрес сервера модели») получает текст диалога и игровой контекст (например, инвентарь и обстановку); ключ API тоже отправляется на этот адрес (только по https или на этот же компьютер; ключ OpenRouter — только в OpenRouter). Inworld получает аудио для распознавания и текст для озвучки. Не вводите секреты в игровой чат. Это обращения к выбранным провайдерам, а не отправка ключей автора мода другим игрокам.
Долговременная память хранится в сохранении мира (aicompanion_bonds): воспоминания о вас, несколько последних реплик (известные виды ключей и паролей маскируются как «[скрыто]», это не гарантия), журнал ещё не сжатых реплик (до 40, с той же маскировкой), ступень отношений, недавние события, время последней встречи, а также характер Олега, подстроенный под вас, его темы для разговора, придуманные по вашим беседам, и список уже поднятых тем. В журнал и в последние реплики попадают реплики игрока, ответы Олега на них, в том числе текст модели, который сопровождает план, и темы, которые Олег заводит сам. Не попадают реплики Олега о событиях и о его собственных делах, отчёты о работе, местные короткие подтверждения команд и команды памяти («что ты обо мне помнишь», «забудь всё»). Сам живой чат уходит в OpenRouter как есть, без маскировки; этот журнал (уже с маскировкой) уходит туда на сжатие в воспоминания каждые 12 реплик игрока и один раз в начале следующей сессии, чтобы сжать хвост прошлой; вместе с журналом уходят нынешние черты характера Олега и его темы, а в ответ он получает новые темы и сдвиг черт. Строки уходят из журнала, когда ответ модели на сжатие обработан, даже если воспоминаний из него извлечь не удалось; при ошибке сети, пустом или оборванном ответе строки остаются до следующей попытки. Переключатель «Память» в настройках останавливает запись реплик, журнала и воспоминаний, сжатие и подстановку памяти в запросы — без памяти Олег не заводит своих тем и говорит с обычным характером, — но события, ступень отношений и время последней встречи сервер продолжает записывать в мир. Реплики прошлой сессии, уже подставленные в текущий разговор, остаются в запросах до выхода из мира; «забудь всё» убирает их сразу. Фразой «забудь всё» стираются воспоминания, предпочтения, реплики, журнал ещё не сжатых реплик, характер и темы Олега — и при выключенной памяти; ступень отношений, недавние события, время последней встречи и общие дела остаются, а удаление мира стирает всё. Журналы диагностики и игры и окно чата «забудь всё» не очищает и не отзывает то, что уже ушло провайдерам: реплики и игровой контекст, отправленные в OpenRouter, голос и текст озвучки, отправленные в Inworld; запрос, отправленный до «забудь всё», при повторе после сбоя связи уходит ещё раз с прежним содержимым.
Локальная диагностика включена по умолчанию и может содержать разговоры, координаты и инвентарь. Чтобы отключить новые записи, задайте diagnosticLogging = false в локальных настройках. Не публикуйте эти журналы целиком. Подробности: SECURITY.md.
Нужны JDK 21 и интернет для первоначальной загрузки зависимостей. В проекте закреплены NeoForge 21.1.262 и Gradle Wrapper.
Windows:
.\gradlew.bat buildLinux/macOS:
./gradlew buildГотовый мод: build/libs/aicompanion-0.0.2.jar. Для тестового игрового клиента: runClient; для механических GameTest: runGameTestServer. Есть отдельные сценарии в scripts/verify*.ps1; они используют локальные временные каталоги и некоторые требуют уже загруженных зависимостей. Тестовые классы и тестовые структуры исключены из игрового JAR. Сборка и механические проверки не требуют ключей провайдеров.
Создайте Fork, измените свою копию и отправьте Pull Request. Владелец рассматривает предложение и решает, добавлять ли его. Ошибки и идеи можно описать в Issues, без ключей и личных данных.
Статус лицензии мода сохранён: All Rights Reserved. Публичность репозитория не означает смену лицензии. Для исходного шаблона NeoForge сохранён отдельный TEMPLATE_LICENSE.txt.