StrangeCraft CMS PlaVER

Лаунчер и авторизация

Что такое лаунчер

StrangeCraft CMS включает собственный лаунчер — программу, через которую игроки заходят в ваш проект. Игрокам не нужен аккаунт Mojang: они входят по нику (или email) и паролю аккаунта вашего сайта. Пароль единый — тот же, что на сайте и в игре.

Что лаунчер делает сам:

  • скачивает и устанавливает нужную версию Minecraft, загрузчик модов (Forge, Fabric, NeoForge) и подходящую Java;
  • скачивает вашу сборку модов и держит её в актуальном состоянии (при обновлении докачивает только изменённое);
  • запускает игру и автоматически заводит игрока на сервер — без ввода /login;
  • показывает новости сайта (у новости есть галочка «показывать в лаунчере») и список серверов с онлайном;
  • сам обновляется: новые версии лаунчера раздаёт ваша же CMS, игрокам ничего скачивать вручную не надо.

Установщики бывают для Windows (.exe) и Linux (.AppImage). Публичная страница «Скачать лаунчер» появляется на сайте автоматически, как только опубликован хотя бы один релиз.

Аккаунты, созданные только через OAuth (VK/Discord и т.п.) и не имеющие пароля, войти в лаунчер по паролю не могут — сначала нужно задать пароль на сайте.

Всё управление — в админке, раздел Лаунчер (подразделы «Сборки» и «Релизы»), плюс настройки в Настройки → Лаунчер.

Сборки (builds)

Сборка — это клиентский модпак, который лаунчер скачивает игрокам: версия Minecraft, загрузчик модов и набор файлов.

Создание сборки вручную

  1. Админка → Лаунчер → Сборки → «Добавить сборку».
  2. Заполните: слаг (латиница, для URL), название, версию Minecraft, загрузчик (Vanilla / Forge / Fabric / NeoForge), при необходимости — версию загрузчика и мажорную версию Java.
  3. Сохраните. Пока сборка пустая — файлы нужно импортировать (см. ниже).
  4. Когда файлы импортированы, включите галочку «Сборка видна в лаунчере».

Импорт модпака из каталога (Modrinth и CurseForge)

Кнопка «Импорт из каталога» на странице сборок открывает поиск по двум каталогам модпаков:

  • Modrinth — работает сразу, ключей не требует.
  • CurseForge — нужен API-ключ. Он бесплатный: получите его на console.curseforge.com (раздел API Keys) и вставьте в Настройки → Лаунчер → «CurseForge API-ключ». Важно: нужен именно ключ каталожного API. Токен вида cfc_pat_… (Personal Access Token из «CF for Studios») для этого API не подходит — CMS покажет понятную ошибку с подсказкой, если вставить не тот ключ.

Порядок импорта:

  1. Выберите каталог, найдите модпак, откройте список его версий.
  2. Выберите версию (версии с неподдерживаемым загрузчиком, например Quilt, отмечаются как неподдерживаемые).
  3. Укажите слаг и название новой сборки, при желании — сервер авто-входа, и запустите импорт.
  4. Импорт идёт в фоне — нужен запущенный queue-воркер. Ход импорта виден в таблице сборок.

Особенность CurseForge: некоторые авторы запрещают раздачу своих модов через API. Такие моды CMS скачать не сможет — в таблице сборок появится список «Не скачано автоматически: N модов» со ссылками. Скачайте их вручную, сложите в zip и нажмите «Дозалить zip» — файлы добавятся к сборке, не стирая уже импортированное.

Импорт zip вручную

  • Кнопка «Загрузить zip» у сборки — для архивов примерно до 1 ГБ (архив грузится частями по 20 МБ, распаковка идёт в фоне, нужен queue-воркер).
  • Многогигабайтные паки: залейте zip или каталог на сервер по SFTP и выполните в консоли сервера:
php artisan launcher:import-build <слаг-сборки> <путь-к-архиву-или-каталогу>

Синхронизация файлов (что удаляется, а что нет)

У каждой сборки два списка путей (поля в форме сборки):

  • Строгая синхронизация (force) — по умолчанию mods, coremods, scripts, kubejs. Эти каталоги приводятся к сборке точь-в-точь: лишние файлы у игрока удаляются. Так игрок не пронесёт на сервер посторонние моды.
  • Пользовательские пути (user) — по умолчанию options.txt, servers.dat, config, saves, screenshots, resourcepacks, shaderpacks, logs. После первой установки они не перезаписываются: настройки, сохранения и скриншоты игрока не трогаются.

Всё остальное просто докачивается при отсутствии или несовпадении файла, без удаления. При импорте из каталога есть галочка «строгий config» — тогда каталог config переносится из пользовательских путей в строгие и будет принудительно совпадать со сборкой.

Привязка сборки к серверу

В форме сборки есть поле «Сервер авто-входа». Если он указан, кнопка «Играть» в лаунчере запустит игру сразу с подключением к этому серверу, а сайт создаст одноразовую сессию авто-входа — игрок попадёт на сервер без ввода /login (окно действия сессии настраивается: Настройки → Лаунчер → «Срок жизни join-сессии»).

Доступ к сборкам по ролям

В форме сборки можно выбрать роли, которым она видна (например «Тестировщик» и «Администрация» для тестовой сборки). Пустой выбор — сборка видна всем. Ограничение действует и на список сборок, и на скачивание файлов.

Релизы лаунчера

Релиз — это установщики самого лаунчера (.exe для Windows, .AppImage для Linux). Их хранит и раздаёт сама CMS. Раздел: Админка → Лаунчер → Релизы.

Собрать установщик прямо на сервере

  1. В блоке «Собрать установщик на сервере» выберите цель: Windows + Linux, только Windows или только Linux.
  2. При желании впишите версию в формате 1.2.3 (иначе возьмётся текущая из исходника) и поставьте галочку «опубликовать».
  3. Нажмите «Собрать». Сборка идёт в фоне — нужен запущенный queue-воркер; лог виден прямо на странице.

Что нужно на сервере: Node.js/npm (зависимости доустановятся сами при первой сборке), а для Windows-цели на Linux — Wine. Wine доустановится автоматически только если у воркера есть права root/sudo; иначе поставьте его заранее (флаг CMS_LAUNCHER_BUILD=1 в установщике КМС) или собирайте только Linux.

Одновременно может идти только одна сборка — вторая не запустится, пока не закончится первая.

Загрузить готовые установщики

Если вы собрали установщики где-то ещё, загрузите их формой «Загрузить релиз»: версия (например 0.1.5), файл .exe и/или .AppImage, заметки. Достаточно одного файла; второй можно догрузить позже повторной отправкой с той же версией.

Публикация и автообновления

У релиза два состояния: «черновик» и «опубликован» (кнопки «Опубликовать» / «Снять»). Опубликованный релиз:

  • раздаётся на публичной странице «Скачать лаунчер»;
  • становится актуальным для автообновлений: лаунчеры игроков сами проверяют и ставят новую версию (файлы обновления генерирует и раздаёт CMS).

В Настройки → Лаунчер есть «Минимальная версия лаунчера»: у игроков со старее указанной появится блокирующий баннер обновления.

Брендинг лаунчера

Внешний вид лаунчера меняется из CMS без пересборки установщиков — лаунчер читает настройки при каждом запуске.

  • Настройки → Лаунчер: «Название в лаунчере» (пусто — берётся название сайта), «Подпись под названием», ссылки на сайт и регистрацию подставляются автоматически. Настройка «Акцентный цвет» устарела, но работает как запасной вариант.
  • Тема лаунчера берётся из активной темы сайта (Темы → редактор, секция «Лаунчер»): палитра цветов, фоновая картинка (только https), затемнение фона, включение/выключение элементов (подпись, новости, серверы, ссылка на регистрацию), анимации. Если тема ничего не задала — используется стандартная тёмная палитра.

Главный экран, скины и прочее

  • Модульный главный экран — состав и порядок блоков (профиль игрока, серверы, новости, события) настраиваются в редакторе темы, вкладка «Лаунчер» (см. «Темы и внешний вид»).
  • Скины и плащи — игрок загружает их прямо из настроек лаунчера; работают на серверах с собственной авторизацией (session-режим).
  • Краш-репорты — если игра упала, лаунчер предложит отправить отчёт: в CMS создаётся тикет с логом в категории «Технические проблемы».
  • Discord Rich Presence — статус «Играет на …» в профиле Discord; включается указанием Application ID в Настройках → Лаунчер.

Режимы авторизации серверов

У каждого сервера в Админка → Серверы → карточка сервера есть поле «Режим авторизации» (в базе — servers.auth_mode). Три варианта:

offline — вход по паролю через auth-плагин

Классическая схема для нелицензионных проектов: сервер запущен с online-mode=false, вход контролирует серверный плагин StrangeCraftCore — игрок вводит /login <пароль> (пароль аккаунта сайта). Игроки из лаунчера проходят без /login благодаря сессии авто-входа.

session — вход через аккаунты сайта (authlib-injector)

Сервер работает с online-mode=true, но вход проверяется не у Mojang, а у вашего сайта — через технологию authlib-injector. Это работает на любом ядре, включая модовые (Forge/Fabric/NeoForge), потому что не требует плагина для самой проверки входа:

  • сервер запускается с параметром -javaagent:authlib-injector.jar=https://ваш-сайт/api/yggdrasil;
  • лаунчер запускает игру с тем же агентом автоматически;
  • баны применяются прямо на входе: забаненному на сайте игроку сервер откажет ещё до подключения;
  • скины, загруженные на сайте, видны в игре — сайт отдаёт их серверу вместе с профилем игрока, отдельный плагин скинов не нужен.

Серверы, созданные через панель CMS, получают агент и online-mode=true автоматически при выборе режима session.

mojang — обычная лицензия

Стандартная проверка через серверы Mojang (online-mode=true), как у любого лицензионного сервера. Сайт в проверку входа не вмешивается.

Гибридный вход на session-серверах

Если игрок пришёл на session-сервер со сторонним клиентом (не вашим лаунчером) или с истёкшим токеном лаунчера, его вход считается неподтверждённым. Такого игрока пустят только серверы, где установлен плагин StrangeCraftCore и он на связи — и плагин заморозит игрока до ввода /login <пароль>. Серверы без плагина неподтверждённых игроков не пускают вовсе. Баны действуют и на неподтверждённые входы.

Правила для сети из нескольких серверов

  • Не смешивайте в одной сети режимы mojang и session. Когда в сети есть session-серверы, лаунчер включает authlib-агент на весь запуск игры (кроме случая, когда игрок запускается прицельно на mojang-сервер) — попасть с таким запуском на mojang-сервер не получится. Держите лицензионные и «сайтовые» серверы в разных сетях/сборках.
  • Серверы за прокси Velocity: проверку входа делает сам прокси, поэтому бэкенды работают с online-mode=false и инжектор на них не ставится — для session-режима агент нужен на самом прокси. Обязательно держите порты бэкендов закрытыми: с открытым портом и выключенной проверкой на сервер зайдёт кто угодно под любым ником.

Откуда берётся jar authlib-injector

Файл authlib-injector.jar кладут в хранилище CMS скрипты установки/обновления (install.sh/update.sh) из ассетов релиза CMS. Если файла нет, скачайте его командой на сервере сайта:

php artisan launcher:fetch-authlib

Команда качает проверенную версию (1.2.8) и сверяет контрольную сумму. Серверы, созданные через панель, скачивают jar с вашего же сайта автоматически при установке.