Перейти к содержимому

Подготовка сборок

install собирает клиент под конкретную версию Minecraft и загрузчик и складывает его в папку профиля. Дальше эту папку можно править руками, а потом опубликовать. (Прежнее имя prepare работает как алиас.)

Окно терминала
laminara-server exec install <имя> <версия> [loader=...] [loaderVersion=...] [compat=...] [platform=...] [java=...]

Аргументы

имяобязательно

Имя сборки. Под ним профиль лежит в build.profilesDir и под ним же публикуется манифест.

версияобязательно

Версия Minecraft, например 1.21.1. Точную строку подскажет команда versions.

loaderпо умолчанию vanilla

Загрузчик: vanilla, fabric, quilt, forge, neoforge или cleanroom. Какие доступны для версии — покажет loaders.

loaderVersion

Версия загрузчика. Если не указать, берётся последняя, подходящая под версию Minecraft.

compat

Рецепт совместимости для старых версий, например lwjgl3ify или lwjgl3ify:3.0.33. Он подменяет манифест версии целиком, поэтому приносит свою версию загрузчика, свою Java и свои моды. Выбранная версия запоминается: повторный install соберёт её же, а compat=последняя возьмёт свежую. compat=нет собирает сборку без рецепта и убирает из неё файлы прошлого.

platformпо умолчанию windows-x64

Целевая платформа клиента: windows-x64, linux, mac-os-arm64 и т.д. От неё зависят нативные библиотеки и Java, которые попадут в сборку.

java

Версия Java для клиента. По умолчанию берётся та, что просит версия: у ванильной — указанная Mojang, у рецепта совместимости и у Cleanroom — их собственная, более новая. Указывайте вручную, только если нужна другая; рецепт на чужой Java может не запуститься.

Что происходит

Сервер запрашивает метаданные версии у Mojang, разрешает библиотеки и нативы под платформу, скачивает клиент, ассеты и Java. Для Forge, NeoForge и Cleanroom дополнительно прогоняется установщик загрузчика — подробности в разделе Загрузчики.

Загрузка идёт в несколько потоков с ограничением, чтобы не упереться в диск и сеть. Файл с уже совпадающим хешем повторно не качается, так что пересборка соседней версии проходит заметно быстрее первой.

Папка профиля

Итог — папка в build.profilesDir/<имя>: клиент, библиотеки, ассеты и всё, что игра получит. Файлы лежат россыпью специально. До публикации в них можно вмешаться: подменить библиотеку на свою сборку, добавить файлы, поправить аргументы. Публикация зафиксирует ровно то, что лежит в папке на этот момент.

Платформы отличаются мало, поэтому общее лежит один раз в корне сборки, а в platforms/ — только то, что действительно разное: рантайм Java и laminara.profile.json с classpath и аргументами запуска.

profiles/Survival/
laminara.settings.json
assets/ libraries/ versions/ ← общее для всех платформ
mods/ config/ ← ваши файлы, кладутся один раз
platforms/
windows-x64/ laminara.profile.json runtime/
linux/ laminara.profile.json runtime/

Моды и конфиги кладите в корень сборки — они уедут на все платформы. Если файл нужен только одной системе, положите его в platforms/<платформа>/ по тому же пути, каким он должен оказаться у игрока: platforms/windows-x64/mods/win-only.jar попадёт только в сборку для Windows и перекроет одноимённый общий файл, если он есть.

Платформы

Игрок получает сборку под свою систему автоматически — оператор готовит нужные платформы:

laminara-server exec "install Survival 1.21.1 loader=neoforge platform=windows-x64,linux"
laminara-server exec "install Survival 1.21.1 loader=neoforge platform=all"
laminara-server exec "publish Survival"

publish подписывает по манифесту на каждую подготовленную платформу: в манифест попадают общие файлы плюс файлы этой платформы, а библиотеки — только те, что нужны именно ей. Общие настройки (политики файлов, опциональные моды) лежат в laminara.settings.json в корне сборки и применяются ко всем платформам. Если сборка не подготовлена под систему игрока, лаунчер показывает её приглушённой с подписью «Нет для вашей ОС» и не даёт запустить.

install с platform= пересобирает только названные платформы, остальные остаются как были. Поэтому каждый install записывает свои параметры в поле install настроек сборки и в профиль каждой платформы, которую собрал. Если какая-то платформа собрана не последним install (вы перевели сборку на новую версию только для platform=linux, или одна из платформ не собралась), publish откажется её выкладывать и напишет готовую команду:

платформа windows-x64 собрана прошлым install и разошлась бы с остальной сборкой — пересоберите её: install Survival 1.21.4 loader=neoforge loaderVersion=21.4.80 platform=windows-x64, а если она больше не нужна, удалите её папку из /var/lib/laminara/profiles/Survival/platforms

Иначе игроки на разных системах получили бы разные сборки под одним именем. Если платформа больше не нужна или не собирается на новой версии, удалите её папку из platforms/: тогда publish выложит остальные.

Если последний install не собрал ни одной платформы, publish откажет всей сборке: общие файлы (например моды рецепта в mods/) он мог уже поменять, а профили платформ остались прежними. Повторите тот же install, когда причина сбоя устранена; команда для этого будет в тексте отказа.

Сборкам, собранным до того, как сервер стал записывать install, проверка не мешает, пока их не пересобрали. Если такую сборку пересобрать только для части платформ, остальные один раз придётся пересобрать тоже: сервер не знает, каким install они были сделаны. Поле install пишет сама команда, править его руками не нужно.