Skip to content

About

Олег — ИИ-компаньон для Minecraft 1.21.1 и NeoForge. Общение, голос, добыча, крафт и совместное выживание.

Resources

Contributing

Security policy

Stars

80 stars

Watchers

1 watching

Forks

Repository files navigation

AI Companion — Олег

ИИ-компаньон для одиночной игры в Minecraft Java Edition 1.21.1 с NeoForge. Версия мода: 0.0.2. Номер меняется только по явному решению владельца.

Олег общается по-русски, следует за игроком, добывает ресурсы (в том числе песок, красный песок, гравий и кремень лопатой, стекло из песка, огниво из железа и кремня), создаёт предметы по настоящим рецептам, переносит вещи, работает с сундуками и печами, строит небольшой деревянный дом и помогает в бою. Возможности ограничены доступными материалами и маршрутами; произвольные большие постройки и полноценная самостоятельная игра ещё не реализованы.

Версия 0.0.2 от 28.10.2026

Олег помнит тебя между сессиями, подстраивает характер под твою манеру и сам заводит разговор, отзывается на важные события и доводит длинные заказы вроде полного набора брони до конца. Справа — полоска его настроения (клавиша 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.

Установка

  1. Подготовьте отдельный профиль Minecraft 1.21.1 с NeoForge 21.1.262 или совместимым более новым 21.1.x.
  2. Откройте Releases справа на странице и скачайте aicompanion-0.0.2.jar из Assets.
  3. Положите JAR в папку mods этого профиля и запустите игру. Для экспериментов используйте копию мира.
  4. Откройте настройки 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 build

Linux/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.

About

Олег — ИИ-компаньон для Minecraft 1.21.1 и NeoForge. Общение, голос, добыча, крафт и совместное выживание.

Resources

Contributing

Security policy

Stars

80 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages