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

Опциональные моды

Оператор может дать игроку выбор опциональных модов в лаунчере — на стороне каждой сборки. Всё описывается в laminara.settings.json профиля, рядом с политиками файлов, и штампуется в подписанный манифест при publish.

Как это работает

Манифест несёт ВСЕ файлы (базовые и опциональные), каждый подписан и лежит в CAS. Файл считается опциональным, если он указан в files какой-либо опции; иначе он базовый и ставится всегда. Игрок выбирает опции в лаунчере — клиент ставит базу плюс выбранное и удаляет снятое. Подделать выбор нельзя: можно выбрать лишь подмножество уже подписанных файлов.

Авторинг

Положите все моды (базовые и опциональные) в mods/ профиля и опишите блок features:

{
"loader": "neoforge",
"userWritable": ["config/", "options.txt"],
"features": {
"groups": [
{
"id": "graphics",
"title": "Графика",
"selection": "single",
"options": [
{
"id": "sodium",
"title": "Sodium",
"defaultEnabled": true,
"files": ["mods/sodium.jar"],
"meta": { "badge": "Рекомендуется" },
"groups": [
{
"id": "extras",
"title": "Дополнения Sodium",
"selection": "multi",
"options": [
{ "id": "extra", "title": "Sodium Extra", "files": ["mods/sodium-extra.jar"] }
]
}
]
},
{ "id": "embeddium", "title": "Embeddium", "files": ["mods/embeddium.jar", "mods/oculus.jar"] }
]
},
{
"id": "utility",
"title": "Утилиты",
"selection": "multi",
"options": [
{ "id": "jei", "title": "JEI", "defaultEnabled": true, "files": ["mods/jei.jar"] }
]
}
]
}
}
  • selection: single — ровно один выбор (радио); multi — любое число (чекбоксы).
  • required: true в single-группе — выбор нельзя обнулить (всегда активна одна опция).
  • defaultEnabled — опция включена по умолчанию (в single-группе не больше одной).
  • files — массив путей относительно профиля; можно несколько на опцию.
  • groups внутри опции — вложенный подвыбор, видимый только пока опция активна.
  • meta.badge / meta.icon — украшения строки в лаунчере; размер опции считается сам.

Правила

Публикация отклонит сборку, если: id не уникальны среди соседей; selection не задан; файл опции отсутствует на диске; в single-группе больше одного дефолта; опциональный файл попадает под userWritable (снятый user-writable нельзя было бы удалить — опциональные моды должны быть неизменяемыми). Общие зависимости базовых модов НЕ указывайте ни в одной опции — иначе они станут условными; оставьте их вне features, и они будут базовыми.