Cryndel · Вики

Большая практическая вики проекта

Вики Cryndel
Launcher

Не короткая памятка, а подробный путеводитель по Cryndel Launcher: каждый основной экран, сценарии использования, игровые профили, моды, все разделы настроек и создание расширения с примерами. Про формат .mpcryn здесь описан только импорт.

Minecraft · Electron Сборки · моды · Modrinth Плагины · API v4 Подробные инструкции
От первого запуска до починкиМаршруты по главным разделам приложения
Плагины без магииПримеры кода, ограничения API и проверка ошибок
Только импорт MPCRYNЭкспорт и публикация не разбираются

Совпадений нет. Попробуй другое слово.
01

Возможности

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

Cryndel Launcher объединяет управление игровыми профилями и настройку самого лаунчера. Доступные разделы собраны здесь, чтобы быстро понять, куда идти за нужной функцией.

▶

Главная и запуск

Выбор активной сборки и ника игрока, быстрый запуск Minecraft, виджеты главной страницы, игровые показатели и элементы быстрого доступа.

▦

Сборки и версии

Создание, выбор, редактирование и удаление игровых профилей. В профиле видны версия Minecraft, загрузчик, выделенная память, заметки и Quick Play.

◈

Modrinth

Поиск контента с фильтрами по типу, версии и загрузчику. Можно устанавливать совместимые проекты в выбранную сборку; модпаки доступны как сборки.

⚙

Моды и целостность

Просмотр модов конкретной сборки, поиск, включение или отключение модов, удаление, проверка целостности, эвристическое сканирование и метаданные Lockfile.

⌁

Починка и резервные копии

Сводка о состоянии сборки, анализ доступных логов запуска, история событий, рекомендации, отключение подозрительных модов, создание снимка и откат.

▧

Плагины

Установка плагинов из ZIP, включение и отключение, перезагрузка, просмотр предупреждений и настройка полей или JSON-конфига.

▣

Скриншоты

Галерея снимков с фильтром по сборке. Снимок можно открыть или скопировать; F2 в игре сохраняет кадр в привычное место Minecraft.

◎

Кабинет и браузер

Встроенная страница My Cryndel с настройкой масштаба и опцией не выгружать страницу в фоне. Есть отдельный встроенный браузер лаунчера.

✳

Персонализация

Темы, акцентный цвет, CSS, фон, шрифты, позиция навигации, музыка и интерфейсные звуки. Есть русская и английская локализации.

i
Важно о доступности

Некоторые действия зависят от выбранной сборки, сетевого доступа и текущих версий Minecraft/модов. Функции сервера, магазина или стороннего сервиса не следует считать гарантированными возможностями лаунчера.

02

Игровые профили

Создание сборки и работа с ней

Сборка — отдельный игровой профиль со своей папкой, модами и настройками. Профили можно держать раздельно, например для чистой игры, модов и тестов.

Открой «Сборки»В списке можно выбрать существующий профиль или начать новый.
Нажми «Новая сборка»Откроется мастер создания отдельного профиля.
Выбери параметрыНазвание, версию Minecraft и загрузчик; при необходимости — RAM и дополнительные опции.
Создай и запустиВыбери созданный профиль и нажми «Играть».

Загрузчики

Vanilla

Обычная игра без модового загрузчика.

Fabric

Популярная платформа для модов; в мастере сборки доступны дополнительные Fabric-моды.

Forge

Загрузчик для совместимых Forge-модов.

NeoForge

Отдельный загрузчик семейства Forge, используемый современными модами.

Quilt

Загрузчик на базе экосистемы Fabric; проверяй требования конкретного мода.

Настройки мастера

  • Версия Minecraft выбирается из доступного списка версий.
  • Память можно определить автоматически или указать вручную.
  • Расширенные настройки включают адрес сервера и Discord-отображение.
  • Для Fabric предусмотрены дополнительные моды и настройки Sodium.
  • Quick Play может сразу подключать к указанному серверу.

После создания в списке сборок можно переименовать профиль, изменить версию, загрузчик и объём RAM, открыть его папку или удалить запись профиля.

Что именно выставляет мастер

Начальные значения мастера — название «Моя сборка», Fabric, автоматический подбор памяти, Quick Play включён и адрес cryndel.ru:25565. Дополнительная версия Minecraft подгружается из доступного списка релизов; если список не загрузился, форма сохраняет рекомендуемую начальную версию.

В расширенных настройках можно изменить адрес/порт сервера и Discord RPC. При создании мастер также записывает выбранную версию языка интерфейса игры (сейчас стартовое значение ru), guiScale 3 и toggle-sprint/sneak keybinds как расширенные параметры. Добавление записи сервера включено по умолчанию.

Для Fabric форма предлагает дополнительные пункты: Sodium + Fabric API, настройку Sodium, Fadeless, Simple Voice Chat, Emotecraft, Xaero's Minimap, Xaero's World Map, Iris, Mod Menu, Litematica, Replay Mod и Cryem. В текущем мастере большинство пунктов отмечено изначально; Litematica и Replay Mod — выключены. Список модов применяется после создания профиля, а установка отдельных рекомендованных элементов может не удаться при сетевой ошибке.

!
Не все хранимые свойства видны в мастере

Профиль способен содержать больше параметров, чем форма создания показывает как элементы управления. Например, это не означает, что любой параметр профиля можно поменять именно в мастере.

!
Совместимость важнее количества модов

Перед установкой проверь версию Minecraft и загрузчик, которые требует мод. Один и тот же мод не обязан работать одновременно на Fabric и Forge.

Другие способы получить сборку

Официальные готовые паки

Если в каталоге доступны готовые сборки Cryndel, выбери нужную и нажми «Создать из пака».

Modrinth-пак .mrpack

Кнопка импорта в разделе сборок предназначена для совместимых Modrinth-паков. Это отдельный формат и отдельный сценарий, не MPCRYN.

03

Перенос сборки

Импорт файла .mpcryn

Ниже описан только импорт. MPCRYN — контейнер сборки Cryndel: внутри находится описание профиля и файлы игры, например моды, конфиги, миры, ресурспаки и игровые настройки.

Как импортировать сборку на этом компьютере

Для импорта нужен полученный от автора файл .mpcryn (также принимаются .cryn и .mcpack). Двойной щелчок по файлу открывает Cryndel, если лаунчер назначен приложением по умолчанию. Импорт создаёт отдельный новый профиль и не требует вручную раскладывать содержимое архива.

Открой «Сборки»Найди кнопку импорта MPCRYN, а не импорт Modrinth.
Выбери файлУкажи нужный файл с расширением .mpcryn.
Проверь карточкуЛаунчер читает манифест и показывает имя, версию Minecraft и загрузчик.
Задай имя и импортируйПодтверди импорт; ход распаковки отображается в интерфейсе.
  1. Открой страницу «Сборки». В панели действий нажми «Импорт .mpcryn (Publsborka)».
  2. Выбери файл сборки. Диалог выбора принимает контейнеры Cryndel с расширением .mpcryn. Файлы .plcryn ставят пакет Plugin API, а не сборку.
  3. Посмотри сведения перед импортом. Лаунчер проверяет, что в архиве есть build.mpcryn.json с типом mpcryn, и показывает краткую информацию.
  4. Укажи название нового профиля. Можно оставить предложенное имя или задать своё.
  5. Нажми «Импортировать». Создаётся новый профиль с параметрами из манифеста, после чего игровые файлы распаковываются в его папку.
  6. Дождись завершения и проверь профиль. После успешного импорта откроется страница новой сборки. Проверь её версию и нажми «Играть», когда будешь готов.
✓

Что переносится

Из файлов сборки переносятся содержимое игрового каталога и папки, в которых находятся моды, конфиги, миры, ресурспаки и options.txt. Параметры профиля берутся из манифеста.

↗

Что будет после импорта

Появится отдельная сборка в группе «Импорт». Она станет выбранной, а лаунчер откроет её страницу. Сам запуск игры выполняется отдельно кнопкой «Играть».

!
Откуда брать файл

Импортируй контейнер только от человека или источника, которому доверяешь. Внутри могут быть игровые файлы и моды от сторонних авторов; перед запуском незнакомой сборки разумно проверить её состав.

×
Если импорт не начинается

Проверь расширение файла, повторно получи его от отправителя и убедись, что файл не повреждён. Формат должен содержать манифест build.mpcryn.json с поддерживаемым типом контейнера.

Это руководство намеренно ограничено импортом MPCRYN: создание/публикация контейнера и внутреннее устройство его полной логики здесь не разбираются.

04

Расширения

Как создать свой плагин

Плагин — папка с manifest.json и JavaScript-файлом. Лаунчер запускает точку входа при активации плагина и передаёт ей ограниченный объект api.

Минимальная структура проекта

Структура папкиcryndel-greeting/
cryndel-greeting/
├── manifest.json
└── index.js

Если плагину нужны собственные файлы данных, можно добавить их отдельно. Настройки из интерфейса хранятся в конфигурации плагина; API storage читает и записывает данные в папке именно этого плагина.

Манифест manifest.json

JSON · примерmanifest.json
{
  "id": "cryndel-greeting",
  "name": "Приветствие",
  "version": "1.0.0",
  "description": "Пример плагина",
  "author": "Ваше имя",
  "main": "index.js",
  "api": 4,
  "permissions": [],
  "settings": [
    {
      "key": "message",
      "label": "Текст приветствия",
      "type": "text",
      "default": "Привет!"
    }
  ]
}

Что означает каждое поле

  • idУникальный ID папки плагина. Используй короткие латинские символы, цифры, точку, дефис или подчёркивание.
  • nameЧитаемое имя в карточке плагина.
  • versionВерсия самого расширения, например 1.0.0.
  • descriptionКраткое описание для пользователя.
  • authorАвтор или команда.
  • mainПуть к точке входа относительно папки плагина; по умолчанию index.js.
  • apiВерсия API лаунчера, с которой рассчитан плагин. Новые безопасные пространства имён доступны при api: 4; плагины API v2 сохраняют совместимость со старыми методами.
  • permissionsСписок запрашиваемых возможностей. Пользователь выдаёт их при установке или отдельно в карточке. API v4 поддерживает ограниченные разрешения для UI, настроек, сборок и их файлов, сети, загрузок, логов, игры, модов, архивов, криптографии, расписания, событий и диагностики. Shell, произвольные процессы, секреты и неограниченный доступ к ОС не поддерживаются.
  • settingsСхема полей настроек, которую интерфейс может показать в карточке плагина.

Точка входа index.js

JavaScript · минимальный работающий примерindex.js
module.exports = {
  async activate(api) {
    const message = await api.config.get('message', 'Привет!');

    api.log('Плагин активирован');
    api.ui.toast(message, 'ok');
  },

  async deactivate(api) {
    api.log('Плагин выключен');
  }
};

Точка входа должна экспортировать функцию или объект с функцией activate(api). Для аккуратного выключения можно экспортировать deactivate(api). Ошибки плагина выводятся как предупреждения и не должны ломать загрузку остальных расширений.

Добавление настроек в карточку плагина

Поле схемы описывает ключ, подпись, тип и начальное значение. Пользователь меняет значения прямо на странице «Плагины»; после изменения они сохраняются в конфиге этого плагина.

ТипПоля схемыКак отображается
text (по умолчанию)key, label, default, placeholderТекстовое поле.
bool, toggle, checkboxkey, label, defaultПереключатель.
numberkey, label, default, min, maxПоле числа.
rangekey, label, default, min, maxПолзунок.
selectkey, label, default, optionsСписок вариантов-строк или объектов { value, label }.
i
Настройки и данные — не одно и то же

Для пользовательских параметров используй api.config/api.settings. Для собственных файлов плагина предназначен api.storage. Не записывай их в произвольные системные пути.

Упаковка и установка

  1. Проверь локально. Положи папку с манифестом и точкой входа в каталог плагинов через кнопку «Папка».
  2. Подготовь ZIP-архив. Предпочтительно положить manifest.json и файлы плагина в корень. Обычная папка-обёртка тоже поддерживается: лаунчер распаковывает содержимое каталога с манифестом.
  3. Установи через страницу «Плагины». Нажми «Установить .zip», выбери архив и дождись результата.
  4. Проверь статус и настройки. Включи плагин, посмотри предупреждения, открой его настройки и проверь нужное поведение.
ZIP должен содержать manifest.jsonОдин id — одна папкаТестируй до передачи другим
05

Интерфейс расширений

Plugin API: что доступно плагину

Лаунчер передаёт API в activate(api). Пользуйся только документированными точками входа и не рассчитывай на доступ к внутренним модулям приложения.

api.apiVersion

Текущая версия Plugin API — 4. Новые пространства имён включаются, когда манифест указывает "api": 4.

api.manifest

Данные манифеста плагина, переданные лаунчеру.

api.log(...args)

Записывает информационное сообщение в журнал лаунчера.

api.warn(...args)

Показывает предупреждение плагина в интерфейсе управления.

api.config.get(key, fallback)

Читает параметр из JSON-конфига; поддерживаются вложенные ключи через точку.

api.config.set(key, value)

Сохраняет конфигурацию самого плагина. В API v4 api.settings — отдельная поверхность настроек лаунчера с разрешениями settings.read и settings.write.

api.storage.read/write

Читает или записывает текстовый файл в каталоге своего плагина.

api.storage.json/writeJson

Читает и сохраняет JSON в каталоге плагина.

api.ui.toast(text, kind)

Показывает уведомление в интерфейсе лаунчера и одновременно передаёт событие зарегистрированным обработчикам плагинов. Поддерживаемые типы: ok, bad, info.

api.ui.registerSettings(fields)

Регистрирует схему настроек для отображения в карточке расширения.

api.ui.registerPage({ id, title, icon, html, css })

Создаёт отдельную страницу плагина и пункт навигации. HTML и JavaScript страницы работают в sandboxed iframe без доступа к DOM лаунчера и Node.js.

homeButton, iconSvg

Страница может запросить кнопку на главной через homeButton: true и передать SVG-иконку в iconSvg. SVG проходит геометрический allowlist, а неподдерживаемая иконка заменяется стандартной.

wallpaper.set(file)

HTML-мост принимает относительный путь на SVG внутри папки плагина. Требуется разрешение wallpaper и подтверждение действия; файл копируется в пользовательские данные лаунчера, а активный фон переключается на него.

providedMods

Манифест может объявить локальные JAR-файлы для общего каталога плагинных модов. Установка требует разрешение install и подтверждение; JAR копируется в mods выбранной сборки и добавляется в lockfile.

api.ui.setTheme(css)

Применяет CSS ко всему интерфейсу. Требует отдельное разрешение ui.theme; внешние URL, @import и выражения запрещены.

api.ui.openModal({ title, html, css })

Открывает модальное HTML-окно; доступно расширению с разрешением ui.

api.instances.list/get

Получает список сборок или конкретную сборку. Доступ к этой поверхности запрашивается разрешением instances.read.

api.events.on/off/once/emit

Современный интерфейс для hooks. once снимает только собственный одноразовый обработчик; совместимые короткие методы api.on/off/emit сохранены.

api.permissions.list()

Возвращает список разрешений, объявленных самим плагином в манифесте. Метод не выдаёт новых разрешений.

api.launcher

Предоставляет версию Plugin API, ID и версию текущего плагина.

api.modrinth.search/project/versions/version

Ограниченные методы чтения каталога Modrinth. Требуют разрешение net; поиск ограничен 50 результатами за запрос. Установка проектов через этот API не выполняется.

api.extensions

Дополнительные именованные псевдонимы API из активного .PLcryn-пакета. Встроенные функции доступны и без пакета.

api.fs, api.archive

API v4 ограничивает файловые операции папкой плагина, ограничивает размер файлов и не следует внешним симлинкам. Распаковка ZIP также проверяет пути и общий размер.

api.instances.files, api.mc

Доступ к файлам выбранной сборки отдельно разрешается через instances.files; пути проверяются на выход за каталог сборки. API Minecraft читает и меняет только options.txt и servers.dat.

api.game, api.mods, api.backups

Операции с игрой, модами и резервными копиями требуют разрешений и подтверждения пользователя для изменений или запуска/остановки. api.game.sessions читает список сессий, api.mods.installFile копирует JAR из папки плагина в mods сборки.

api.instances.current / select

Чтение выбранной сборки требует instances.read. Переключение через select требует instances.write и подтверждение пользователя.

api.pack, api.versions

Классификация и импорт файлов из папки плагина требуют pack.import. Список локальных версий Minecraft — versions.read. Абсолютные пути с диска пользователя недоступны.

api.time, api.json, api.path

Вспомогательные методы без разрешений: текущее время, пауза до 30 с, разбор JSON и относительные posix-пути без ...

api.clipboard.write

Запись текста в буфер обмена (до 4000 символов) требует clipboard.write и подтверждение. Чтение буфера недоступно.

api.ui.go / prompt

Переход по внутреннему маршруту лаунчера и запрос подтверждения. Оба метода требуют разрешение ui; произвольные URL запрещены.

api.crypto, api.scheduler, api.telemetry

Криптографические примитивы, ограниченные задания по расписанию и счётчики в памяти плагина. Они не дают доступ к системным секретам.

api.introspect, api.logs

Диагностика ограничена метаданными сетевых вызовов API, действиями и данными самого плагина, а журналы маскируют распространённые токены и cookie.

api.fetch(url, opts)

API v4 разрешает только HTTP(S), GET/POST, публичные адреса и ограниченный размер ответа; локальные адреса блокируются, перенаправления не выполняются, каждый запрос подтверждается.

window.cryndel.call(method, ...args)

Мост HTML-страницы к разрешённым методам лаунчера: settings.get/set, instances.list/get, modrinth.search/project/versions, net.fetch, downloads.save, install.modrinth, install.localMod и wallpaper.set.

!
API — это ограниченный набор вызовов, а не полный доступ к приложению

Плагин не получает объект require, DOM-объект окна или произвольные методы IPC как стандартные глобальные объекты своей точки входа. Пользуйся переданным api. При этом VM-контекст не следует считать надёжной границей безопасности для запуска кода из неизвестного источника.

!
Не запускай неизвестный код

ZIP-плагин содержит исполняемый JavaScript. Установка плагина означает доверие его автору. Ограниченный контекст API не заменяет аудит стороннего кода: проверяй источник и содержимое файлов.

✓
Пользователь управляет разрешениями

При установке можно выдать все запрошенные возможности или поставить плагин без них. На странице «Плагины» разрешения можно снова выдать или отозвать. Изменение настроек, загрузка файлов, применение обоев и установка модов дополнительно подтверждаются пользователем.

Локальные моды, обои и примеры

Чтобы добавить локальный JAR в общий экран «Моды от плагинов», объяви его в манифесте. Имя файла задаётся относительным путём, а каталог показывает только метаданные — сам файл остаётся в каталоге плагина до явного нажатия «Установить».

{
  "permissions": ["ui", "install"],
  "providedMods": [{
    "id": "example_mod",
    "name": "Example Mod",
    "version": "1.0.0",
    "description": "Описание, загрузчик и поддерживаемая версия игры",
    "file": "mods/example.jar",
    "iconSvg": "<svg viewBox=\"0 0 24 24\">...безопасная геометрия...</svg>"
  }]
}

providedMods не доказывает совместимость или безопасность JAR. При установке проверяется путь внутри папки плагина, ограничивается размер, вычисляется SHA-512 и создаётся запись lockfile. Это не автоматическая проверка того, что файл действительно запускается на указанном загрузчике.

Разрешение wallpaper открывает HTML-мост window.cryndel.call('wallpaper.set', 'wallpapers/name.svg'). Файл должен лежать в папке плагина, быть SVG не больше 256 КБ и содержать только простую геометрию, базовые фигуры и градиенты. Скрипты, ссылки, стили, фильтры и внешние ресурсы запрещены. Для изменения глобальной цветовой темы дополнительно запрашивается ui.theme. Атрибут homeButton: true добавляет страницу плагина в ряд действий главного экрана; SVG в iconSvg проходит фильтрацию перед показом.

В разделе «Плагины» есть кнопка «Примеры плагинов». Она устанавливает три демонстрационных ZIP: «Обои и стили», «Каталог плагинных модов» и «Локальный test.jar». Тестовый JAR содержит корректные Fabric-метаданные для проверки каталога и копирования, но намеренно не содержит игровой код и не добавляет функций в Minecraft.

Обновление каталога Plugin API через .PLcryn

Файл .PLcryn — ZIP-контейнер с двумя JSON-файлами в корне. Он не принимает и не исполняет JavaScript, исполняемые файлы или команды. Реализации API входят в лаунчер; пакет API v4 задаёт совместимую версию, описание поддерживаемых возможностей и именованные псевдонимы. Он не может добавить исполняемый код или выдать плагину новое разрешение.

manifest.json

{
  "type": "cryndel-plugin-api",
  "version": "4.0.0",
  "apiVersion": 4,
  "name": "Cryndel Plugin API v4"
}

api.json

{
  "aliases": {
    "quickSearch": "modrinth.search",
    "notifyUser": "toast",
    "readPluginConfig": "config.get"
  }
}

Допустимые цели включают существующие API v2, безопасные методы API v4 (например, fs.read, settings.get, crypto.hash, net.fetch и mc.servers.read) и только перечисленные в реализации функции. Максимум — 100 псевдонимов и 1 МБ распакованных данных. Плагин обращается к псевдониму через api.extensions.quickSearch(...); разрешения всё равно проверяются самим методом.

Перед заменой текущая версия переносится в резервную. Кнопка отката меняет активную и предыдущую версии местами. Сброс сначала восстанавливает предыдущую версию; повторный сброс удаляет обе пользовательские версии и возвращает встроенный каталог. Настройки плагинов при этом не удаляются.

06

Для авторов расширений

Плагины: полный практический разбор

Разберём путь расширения по шагам: от идеи и папки на диске до загрузки, конфигурации, выключения и диагностики. Ниже отдельно отмечены ограничения, которые легко принять за готовые возможности API.

1. Сначала реши, что должен делать плагин

Хороший первый проект

Небольшое действие с одной понятной целью: хранить пользовательский список, читать конфиг, проверять доступность собственного сервиса по кнопке разработчика, выводить диагностическую запись, либо демонстрировать настройки. Такой плагин позволяет проверить манифест и жизненный цикл без сложной логики.

Можно расширять интерфейс, не подменяя ядро

Плагин может добавить собственные HTML-страницы, меню, модальные окна, опросы и оформление. Действия с настройками, сетью, файлами и установкой выполняются только через API-мост и выданные пользователем разрешения. Прямой доступ к DOM и системным командам не предоставляется.

2. Подготовь ID и папку

Выбери уникальное постоянное имя, например my-weather-tool. Именно из поля id формируется имя каталога установленного плагина и идентификатор его конфигурации. Не используй один и тот же ID для разных расширений и не меняй его между обновлениями без причины: иначе лаунчер увидит другое расширение с отдельными настройками.

Рекомендуемая структура простого расширенияmy-weather-tool/
my-weather-tool/
├── manifest.json     # обязательные сведения о плагине
├── index.js          # основной JavaScript-модуль
└── data/             # необязательно: собственные данные
    └── state.json

Папка data/ в примере — обычная подпапка в каталоге расширения; создавай или читай её через api.storage. Не путай эту папку с автоматически создаваемым config.json, предназначенным для пользовательских параметров.

3. Сделай манифест осмысленным

ПолеОбязательность и назначениеПрактический совет
idФактически обязательно: без непустого ID ZIP отклоняется.Используй стабильный lowercase ID: author-feature.
nameНазвание карточки; если не указано, вместо него будет использовано имя папки.Пиши понятное пользователю название, не версию API.
versionИнформационная версия плагина, отображается в списке.Увеличивай при изменениях, чтобы пользователь мог сверить релиз.
descriptionКороткое описание назначения.Укажи, что именно делает расширение и когда оно обращается в сеть.
authorИмя автора, показывается рядом с версией.Не маскируй автора под администрацию проекта.
mainПуть до скрипта от корня каталога плагина; по умолчанию index.js.Имя и регистр файла должны совпадать на Linux.
apiТекущая реализация отказывает в загрузке, если указанная версия больше API лаунчера (сейчас 4).Указывай версию API, под которую действительно написан код; меньшее число не доказывает совместимость.
permissionsAPI v4 поддерживает явные права для UI, настроек, сборок, файлов, сети, загрузок, игры, модов, резервных копий, архивов, событий и диагностики. Неизвестные и опасные системные права отклоняются.При установке ZIP пользователь выбирает, какие из запрошенных разрешений выдать. Плагин, добавленный вручную, по умолчанию не получает эти права — их нужно выдать в карточке.
settingsМассив полей настроек для UI.Делай уникальные ключи и осмысленные значения по умолчанию.

4. Настройки: ключи, вложенность и сохранение

Настройки в манифесте создают элементы управления на карточке расширения. Рабочие алиасы полей: ключ берётся из key, затем id, затем name; подпись — из label, затем title, затем ключа. Поэтому предпочтительны явные key и label.

Несколько полей разных типовфрагмент manifest.json
"settings": [
  {
    "key": "message",
    "label": "Текст приветствия",
    "type": "text",
    "default": "Привет!",
    "placeholder": "Напиши свой текст"
  },
  {
    "key": "enabled",
    "label": "Включить функцию",
    "type": "toggle",
    "default": true
  },
  {
    "key": "refreshSeconds",
    "label": "Интервал обновления",
    "type": "number",
    "min": 10,
    "max": 300,
    "default": 60
  },
  {
    "key": "mode",
    "label": "Режим",
    "type": "select",
    "options": [
      { "value": "quiet", "label": "Тихий" },
      { "value": "normal", "label": "Обычный" }
    ],
    "default": "normal"
  }
]

Ключи и вложенные свойства

Для ключа appearance.color компонент интерфейса читает вложенное значение config.appearance.color, а config.set обновляет этот путь и сохраняет JSON. Для простого плагина используй плоские ключи и избегай конфликтов вроде одного ключа одновременно как строки и объекта.

Значения по умолчанию

Схема подставляет default, если соответствующего значения ещё нет. Не рассчитывай, что default уже записан в файле до первого изменения: при чтении используй fallback, как в примере api.config.get('message', 'Привет!').

Поддерживаемые типы формы: строка по умолчанию, булевы bool/toggle/checkbox, number, range и select с массивом options. Для number/range интерфейс передаёт числовое значение. Не полагайся на сложные поля, описанные только в интернете: массивы, многострочный текст, вложенные объекты и валидация схемой как отдельные контроли здесь не реализованы.

5. Полный пример жизненного цикла и своего JSON

JavaScript · конфиг + собственное хранилище + выключениеindex.js
module.exports = {
  async activate(api) {
    const config = await api.config.get('message', 'Добро пожаловать!');
    api.log('Активирован:', api.pluginId, 'API', api.apiVersion);

    // storage.json читает JSON-файл из каталога этого плагина.
    let state = await api.storage.json('data/state.json');
    if (!state) {
      state = { activations: 0 };
    }
    state.activations += 1;
    await api.storage.writeJson('data/state.json', state);

    api.ui.registerSettings([
      {
        key: 'message',
        label: 'Текст сообщения',
        type: 'text',
        default: 'Добро пожаловать!'
      }
    ]);

    api.log(config, 'Запусков плагина:', state.activations);
  },

  async deactivate(api) {
    // Очисти таймеры/ресурсы, которые создал сам плагин.
    api.log('Деактивирован');
  }
};

В этом примере показаны только безопасные локальные операции с настройкой и JSON. Если добавишь таймер через доступный setInterval, сохрани его ID и останови в deactivate; исключение в фоне может попасть в журнал не так очевидно, как ошибка при старте.

6. Как плагин проходит загрузку

Поиск каталогаМенеджер перебирает папки в user-каталоге плагинов.
Чтение манифестаПапка без читаемого manifest.json не становится корректным элементом.
Проверка API и mainСлишком новая версия API или отсутствующий файл входа дают отказ и предупреждение.
Выполнение activateКод запускается с переданным api; результат показывается как статус или предупреждение.

Скрипт исполняется в VM-контексте с переданными глобалами module, exports, console, api, setTimeout/clearTimeout и setInterval/clearInterval. Поддерживаются два варианта экспорта: module.exports = { activate(api) {} } и module.exports = function (api) {}. Если экспорт не содержит activate-функцию, плагин может быть помечен загруженным, но предупреждение сообщит, что он фактически ничего не активировал. Если в манифесте указано API выше 2, загрузка отклоняется; более низкое значение само по себе не гарантирует совместимость.

Начальное выполнение скрипта ограничено таймаутом VM. Асинхронный activate ожидается менеджером, но таймаут выполнения исходного скрипта не является общим таймаутом для любой дальнейшей работы плагина. Не создавай бесконечные циклы, не блокируй event loop и не оставляй бесконечные таймеры.

7. Хранилище данных и границы путей

ВызовРезультатПрименение
await api.config.get()Весь объект пользовательского конфига.Прочитать несколько настроек одним запросом.
await api.config.get('a.b', fallback)Вложенное значение либо fallback.Читать необязательную настройку без ошибки при первом старте.
await api.config.set('a.b', value)Запись обновлённого JSON.Сохранить значение настройки. UI тоже пишет настройки туда.
await api.storage.read(file)Строка UTF-8 или null, если файла нет.Текстовые собственные данные.
await api.storage.write(file, text){ ok: true }.Создать/перезаписать текстовый файл в папке своего плагина.
await api.storage.json(file)Разобранный JSON или null.Загрузить структурированные собственные данные.
await api.storage.writeJson(file, object){ ok: true }.Сохранить объект как форматированный JSON.

Пути хранилища вычисляются относительно папки текущего плагина. Путь, который после разрешения выходит за пределы каталога плагина, отклоняется. Сохраняй в JSON только сериализуемые значения; хранилище не предназначено для больших бинарных файлов или сетевых секретов.

8. Hooks: реальное поведение и важное ограничение

Минимальный hook внутри plugin managerindex.js
module.exports = {
  activate(api) {
    api.on('my-plugin-event', (payload) => {
      api.log('Получено событие:', payload);
      return { received: true };
    });

    // Вызывает обработчики с этим именем, зарегистрированные в менеджере.
    const results = api.emit('my-plugin-event', { source: 'self' });
    api.log('Результаты:', results);
  },

  deactivate(api) {
    api.off('my-plugin-event');
  }
};

Hooks — именованные функции в менеджере плагинов. on регистрирует обработчик; off(hook) удаляет все подписки данного плагина на это имя; emit синхронно вызывает зарегистрированные обработчики и собирает возвращённые ими значения. Ошибка одного синхронного обработчика записывается как предупреждение, остальные обработчики продолжают выполняться. Если обработчик асинхронный, emit не ожидает его Promise: результатом будет Promise-объект внутри массива результатов.

!
Не выдумывай список системных событий

В текущем коде основной программы не найдено вызовов plugin manager для игровых событий. Поэтому api.on('game:launch', ...) не означает, что лаунчер автоматически вызовет такой handler. Используй hooks для согласованного взаимодействия с другим кодом, который сам вызывает соответствующий emit; считай встроенные события неподдержанными, пока проект не опубликует их контракт.

9. Сеть и разрешение net

При выданном разрешении net методы api.fetch(url, opts) (совместимость) и api.net.fetch(url, opts) (API v4) отправляют только HTTP(S)-запросы на публичные адреса, без перенаправлений, с ограничением метода, размера тела и ответа. Локальные адреса и нестандартные порты отклоняются; перед каждым запросом показывается подтверждение, а метаданные записываются в аудит. Для совместимого api.fetch отказ возвращается как { ok: false, error }; API v4 сообщает об отказе исключением. Успешный ответ имеет форму { ok, status, data }; тип data зависит от сервера.

Обработка сетевого результатаindex.js
module.exports = {
  async activate(api) {
    const result = await api.fetch('https://example.org/status', {
      method: 'GET'
    });

    if (!result.ok) {
      api.warn('Не удалось получить статус:', result.error);
      return;
    }

    api.log('HTTP:', result.status);
    api.log('Ответ:', JSON.stringify(result.data));
  }
};

Не помещай токены и пароли в URL, публичные логи или сообщение об ошибке. Не делай запросы циклически и без необходимости. Указывай сетевое разрешение только если функциональность действительно требует запросов.

10. Страница плагина, модальное окно и оформление

Запроси разрешения ui и при необходимости ui.theme. Страница регистрируется из activate(api). Вставляемый HTML — фрагмент для body; собственный JavaScript страницы использует window.cryndel. Каждый экран плагина работает в отдельном iframe с sandbox: у него нет прямого доступа к интерфейсу приложения, Electron, Node.js или IPC. При выключении плагина его страницы и оформление удаляются.

index.js · страница с кнопкой и модальным окномпример UI API
module.exports = {
  activate(api) {
    api.ui.registerPage({
      id: 'tools',
      title: 'Мои инструменты',
      icon: 'page',
      html: \`<h1>Инструменты</h1>
        <button id="open">Опрос</button>
        <button id="mods">Найти моды</button>
        <script>
          document.querySelector('#open').onclick = () =>
            window.cryndel.modal({
              title: 'Опрос',
              html: '<h2>Какую функцию добавить?</h2><button id="vote">Голосовать</button><script>document.querySelector("#vote").onclick=async()=>{await window.cryndel.call("net.fetch","https://example.org/vote",{method:"POST",data:{answer:"new-feature"}});window.cryndel.closeModal()}</script>'
            });
          document.querySelector('#mods').onclick = async () => {
            const result = await window.cryndel.call('modrinth.search', { query: 'sodium', type: 'mod' });
            document.body.insertAdjacentText('beforeend', ' Найдено: ' + result.hits.length);
          };
        </script>\`,
      css: 'button { padding: 10px 14px; border-radius: 10px; }'
    });
    api.ui.setTheme(':root { --accent: #62d6bf; --radius: 20px; }');
  },
  deactivate(api) {
    api.ui.clearTheme();
  }
};

Для небольшой страницы достаточно api.ui.addNav({ id, label, icon, html, css }); для оформления всего лаунчера передай CSS через api.ui.setTheme(css). Глобальный стиль применяется только если выдано ui.theme. HTML-страница может открыть modal через window.cryndel.modal({ title, html, css }), закрыть через window.cryndel.closeModal() и отправить POST через window.cryndel.call('net.fetch', url, { method: 'POST', data }).

Модальные страницы, кнопки опросов и формы — это обычный HTML/JavaScript внутри sandboxed iframe. Для отправки голосов нужен ваш сервер опросов и разрешение net; сам лаунчер не хранит и не подсчитывает голоса. Не включай пользовательский HTML в общую страницу лаунчера: держи его внутри plugin iframe.

11. Настройки лаунчера, загрузки и установка модов

РазрешениеМетоды страницыЗащита
settings.readsettings.get('ui.theme'), settings.get('ui')Чтение ограничено разделами UI и параметрами лаунчера.
settings.writesettings.set('ui.theme', 'ocean')Пользователь подтверждает каждую запись; менять можно только настройки лаунчера, не пути и не ядро.
downloadsdownloads.save(url, filename)Только HTTP/HTTPS; размер файла ограничен 50 МБ, перед сохранением показывается подтверждение.
install + netinstall.modrinth(instanceId, projectId, versionId?)Только проекты-моды, версия проверяется на совместимость; перед установкой требуется подтверждение.
installprovidedMods и install.localMod(instanceId, modId)Файл должен быть объявлен в манифесте и находиться внутри плагина; размер JAR — до 50 МБ, проверяется совместимость, SHA-512 записывается в lockfile, перед копированием показывается подтверждение.
wallpaperwallpaper.set(relativeSvgPath)Только SVG из папки плагина, максимум 256 КБ; фильтруются элементы/атрибуты, затем фон сохраняется в пользовательских данных.
netnet.fetch(url, { method: 'GET'|'POST', data })Таймаут, размер запроса и ответа ограничены; подходит, например, для отправки ответа на внешний опрос.

Методы HTML-моста вызываются как await window.cryndel.call('settings.set', 'ui.theme', 'ocean'). Ответ или ошибка возвращаются Promise. Конфигурация самого плагина доступна через plugin.config.get(key, fallback) и plugin.config.set(key, value) без доступа к чужим файлам. Попытка вызвать метод без разрешения завершится понятной ошибкой. Для установки используй ID сборки и проекта Modrinth; API не даёт плагину запускать произвольные файлы или команды.

12. Настройки плагина и публикация опросов

Параметры самого расширения по-прежнему описываются через manifest.settings или хранятся в api.config. HTML-страницы могут рисовать любые формы, но сохранение конфигурации плагина из UI должно проходить через зарегистрированный API плагина, а не писать в файлы напрямую. Для публичного опроса используй собственный HTTPS endpoint: iframe не имеет прямого сетевого доступа, запрос отправляется через ограниченный net.fetch.

Настройки

Кнопка «Настройки плагина» на карточке раскрывает поля из manifest.settings либо запасной редактор JSON-конфига. Значения сохраняются отдельно для каждого расширения.

Пункт навигации

api.ui.registerPage создаёт работающий экран и пункт меню; у каждой страницы собственные HTML, CSS и JavaScript.

Уведомления и модалки

api.ui.toast показывает уведомление; api.ui.openModal и window.cryndel.modal создают модальные HTML-окна.

Установка и настройки

HTML-мост предоставляет разрешённые методы чтения настроек, записи с подтверждением, загрузки файлов, поиска и установки модов Modrinth.

11. Установка, обновление и выключение

  1. Для проверки открой реальную папку плагинов. Кнопка «Папка» открывает общий каталог плагинов пользователя. Каждый каталог расширения должен содержать манифест непосредственно на ожидаемом уровне.
  2. Для распространения создай ZIP. Лучше положить manifest.json в корень архива. Также поддерживается обычная папка-обёртка вида my-plugin/manifest.json: лаунчер использует содержимое каталога, где лежит манифест.
  3. Установи или переустанови. Перед установкой ZIP лаунчер показывает запрошенные разрешения; можно выдать их все или установить без них. Файлы распаковываются в папку по ID. Повторная установка записывает файлы поверх совпадающих, но не удаляет старые лишние файлы автоматически.
  4. Включай конкретный плагин. Переключатель карточки вызывает загрузку или выгрузку этого расширения. Список отключённых ID хранится отдельно в .disabled.json.
  5. Перезагружай после ручных изменений. Кнопка «Перезагрузить» очищает текущие записи менеджера о загруженных плагинах и hooks и затем загружает их повторно. Не полагайся на неё как на гарантированный вызов deactivate перед очисткой — свои таймеры и ресурсы проектируй с явным жизненным циклом.
  6. Удаляй только если данные не нужны. Удаление вызывает выгрузку плагина и удаляет его каталог, включая конфиг и собственные файлы этого расширения.
!
Глобальное отключение

Переключатель «Включить плагины» немедленно вызывает выгрузку всех загруженных расширений, удаляет их UI-вкладки и hooks и не позволяет загрузить их снова до включения настройки. Индивидуальные переключатели карточек остаются независимыми: выключение конкретного плагина сохраняется и после повторного включения глобального переключателя.

12. Диагностика ошибок плагина

СимптомПроверьИсправление
Плагина нет в спискеЕсть ли папка и корректный manifest.json непосредственно внутри неё?Исправь структуру папки; для ZIP перенеси файлы плагина в корень архива.
«Нет манифеста»Совпадает ли имя ровно с manifest.json, не повреждён ли JSON?Проверь кавычки, запятые и кодировку; JSON не принимает комментарии.
«Нет main-файла»Указан ли верный путь в main, существует ли файл?Исправь main либо назови точку входа index.js.
API слишком новыйЧисло в api больше текущего API 2?Найди совместимый релиз или обнови лаунчер; не занижай номер без проверки API-вызовов.
Загружен, но не работаетЭкспортируется ли функция activate или сама функция?Проверь module.exports, журнал и предупреждения карточки.
Схема не показывает формуЭто массив в settings? Есть у полей key/label?Используй поддерживаемый тип поля. Если схемы нет, редактируй JSON в карточке.
Сеть возвращает отказЕсть ли net в манифесте и выдано ли это разрешение в карточке плагина?Добавь net в манифест, затем открой «Разрешения» и выдай доступ; после установки ZIP выбор разрешений делается в системном диалоге.
Изменения не видныБыл ли плагин перезагружен после изменения исходников?Используй кнопку «Перезагрузить» и проверь новую запись предупреждения.

13. Чек-лист перед тем, как отдать ZIP другому игроку

  • У плагина уникальный стабильный id, заполнены имя, версия, описание и автор.
  • JSON манифеста валиден; main действительно существует.
  • ZIP открыт и проверен: manifest.json лежит на верхнем уровне, нет внешней папки-обёртки.
  • Расширение работает после чистой установки, а не только в старом каталоге с забытыми файлами.
  • Изменение и чтение параметров проверены после перезапуска; данные не записываются за пределы каталога плагина.
  • Сетевое разрешение присутствует лишь при необходимости; URL, передаваемые данные и ошибки проверены.
  • Пользователю честно описано, какие файлы, данные и сетевые сервисы использует расширение.
07

Игровое содержимое

Моды, Modrinth и совместимость

Каталог Modrinth помогает найти проекты, а экран модов показывает то, что установлено в выбранной сборке.

Установка через Modrinth

  1. Выбери сборку, в которую нужно поставить контент.
  2. Открой Modrinth и выбери тип проекта или поисковый запрос.
  3. Уточни версию Minecraft, загрузчик и сортировку.
  4. Открой карточку и нажми установку.
  5. Для модпака используй действие установки как отдельной сборки.

Управление установленными модами

Страница «Моды» относится к выбранному профилю: можно найти мод по имени, посмотреть состав, включить или отключить отдельный элемент и удалить мод. Отдельные кнопки проверяют целостность и запускают эвристический сканер.

МодыМодпакиШейдерыЗависимости
✓
Правило совместимости

Проверь три вещи: версия Minecraft, загрузчик, требования самого проекта. Если мод требует библиотеку или API, установи соответствующую зависимость для этой же сборки.

08

Внешний вид

Настройки и персонализация

В разделе настроек есть отдельные блоки для оформления, звука, главной страницы и поведения игры. Большинство интерфейсных параметров можно поменять без редактирования файлов вручную.

Тема и CSS

Предустановленные темы: «Ночь», «День», «Фурри», «Роза», «Сталь», «Лёд», «Эмбер», «Лес», «Океан», «Лаванда», «Мята», «Закат», «Сакура» и «Песок». Шесть последних тем отличаются не только цветом: у них свои контрастные поверхности, акцентная подача карточек, скругления и подсветка навигации. Можно задать собственный акцент, радиус и положение навигации; для точечной стилизации есть редактор CSS.

В настройках производительности отдельно включаются реакции интерфейса, уведомления, фоновые эффекты и короткие SVG-анимации иконок. Анимация иконок срабатывает только при наведении и подчиняется системному режиму уменьшения движения.

Главная и фон

Настраиваются визуальные параметры главной страницы, фон и представление интерфейса. Размер и расположение элементов лаунчер подстраивает под окно.

Звук и музыка

Можно управлять интерфейсными звуками и фоновой музыкой, громкостью и воспроизведением. Музыкальные файлы проекта размещены в каталоге muzick/fon; стандартные звуки — в muzick/_defaults.

Игра и Java

Настройки включают управление памятью и параметрами отображения, определение Java и параметры рендеринга. Рекомендацию по RAM используй как отправную точку и учитывай объём памяти компьютера.

Ник и язык

Ник игрока доступен в нижней панели. Интерфейс локализован на русский и английский языки.

Кабинет

Встроенная страница My Cryndel запоминает масштаб. Для неё можно включить сохранение в фоне; не очищай хранилище сайта, если хочешь сохранить авторизацию.

!
Важные значения по умолчанию

3D-скины и Discord RPC предусмотрены в коде, но намеренно выключены по умолчанию. Не включай их без осознанного изменения настройки.

09

Большой CSS-практикум

Как оформлять Cryndel Launcher собственным CSS

Этот раздел не про абстрактную страницу: здесь используются реальные переменные, классы и состояния интерфейса Cryndel. Изменения делаются через «Настройки → Свой CSS» и сохраняются отдельно от файлов проекта.

i
CSS меняет внешний вид, а не поведение

Стилями можно менять цвета, размеры, отступы, рамки, шрифты, тени и расположение элементов. CSS не добавляет действия кнопкам, не меняет настройки Minecraft и не создаёт новые страницы. Не скрывай важные кнопки запуска, закрытия модальных окон, удаления и подтверждения: это может сделать интерфейс непригодным.

1. Куда вводить стили, как сохранить и восстановить

  1. Открой настройки лаунчера и найди секцию «Свой CSS».
  2. Вставь обычный CSS в большое текстовое поле. Это именно CSS: без тегов <style>, HTML и JavaScript.
  3. Нажми «Применить CSS». Лаунчер сохраняет текст и применяет стили сразу.
  4. Чтобы использовать готовый файл, нажми «Из файла…» и выбери файл с расширением CSS. Чтобы вернуть штатный вид, нажми «Очистить».

Файл хранится в пользовательском каталоге данных лаунчера, в подпапке themes/custom.css. Он переживает перезапуск и обновление приложения, потому что это пользовательские данные, а не исходный CSS-файл в каталоге проекта. Размер ограничен примерно 400 000 символами. Загрузчик сохраняет текст CSS; это не проверка дизайна и не гарантия, что каждое свойство поддерживается Chromium.

Изменяй по одной группе правил и проверяй результат после каждого применения. Если интерфейс стал нечитаемым, вернись в настройки и очисти пользовательский CSS. Если изменились лишь отдельные элементы, вероятнее всего, правило не совпало с селектором, проиграло более специфичному правилу или содержит неподдерживаемое свойство.

2. Из чего состоит правило CSS

селектор {
  свойство: значение;
  другое-свойство: другое-значение;
}

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

СинтаксисЗначениеПример применения
.cardЭлемент с классом card..card { border-radius: 20px; }
.stage .cardКарточка внутри центральной области экрана.Меняет карточки контента, не затрагивая все элементы с таким классом вне основной области.
#stageЭлемент с уникальным ID stage.#stage { padding: 20px; } — применять только если нужно изменить весь stage.
.btn:hoverКнопка, пока курсор находится над ней.Добавляет подсветку при наведении.
.field:focus-visibleПоле ввода, выбранное клавиатурой или с видимым фокусом.Позволяет сохранять понятную клавиатурную навигацию.
[data-anim="off"]Элемент или потомок с указанным атрибутом и значением.Можно учитывать состояние, выставляемое самим интерфейсом.

Точка перед именем означает класс; решётка — ID. Два селектора подряд, например .nav-item.active, означают, что один элемент должен одновременно иметь оба класса. Пробел в .nav-item .label означает вложенность: элемент .label внутри .nav-item. Не добавляй пробел, если хочешь выбрать именно один элемент с двумя классами.

3. Каскад, порядок и специфичность: почему правило «не сработало»

У элемента могут быть правила из базового оформления, темы, CSS конкретного экрана и пользовательского CSS. Браузер сначала учитывает важность и специфичность, а при равенстве обычно выигрывает правило, объявленное позже. Пользовательский файл подключается как слой пользовательского оформления, поэтому часто может переопределить стандарт, если выбран сопоставимый или более точный селектор.

  • .btn точнее, чем просто button: класс обычно выигрывает у селектора по тегу.
  • .stage .btn точнее, чем .btn, потому что дополнительно ограничивает область.
  • #stage .btn обычно уже слишком точен для общего переоформления кнопок и усложняет дальнейшие изменения.
  • !important принудительно поднимает объявление в приоритете. Не добавляй его «на всякий случай»: он затрудняет отладку и может сломать состояния наведения, фокуса или отключённой кнопки.
/* Начинай с простого правила. */
.stage .card {
  border-color: var(--line);
  border-radius: var(--card-radius);
}

/* Если стиль нужен только на наведении, добавь состояние,
   а не отдельное правило с !important. */
.stage .card:hover {
  border-color: var(--accent);
}

4. Переменные Cryndel: меняй всю тему согласованно

Основные переменные заданы в таблице дизайн-токенов и используются повторно по всем экранам. Переопределяя токен, ты меняешь много компонентов сразу — кнопки, карточки, рамки, текст или прозрачность. Это предпочтительнее десятков разрозненных правил с одинаковыми цветами.

ПеременнаяДля чего используетсяТипичное значение
--bg, --bg-2Основной фон и дополнительный/контрастный фон темы.Цвет, например #10131b.
--panel-raw, --panel-2-rawИсходные цвета поверхностей; из них вычисляются панели и вторичные панели с заданной прозрачностью.rgba(24, 29, 42, .92).
--panel, --panel-2Готовые цвета основных и вторичных карточек/панелей.Подставляй через var(--panel), а исходные значения для темы меняй через --panel-raw.
--panel-pctПроцент прозрачности панелей, связанный с настройкой «Прозрачность панелей».Процент, например 92%.
--text, --muted, --fogОсновной текст и менее заметные пояснения/подписи.Контрастные цвета с достаточной разницей от панели.
--accent, --accent-2Главный цвет темы и второй оттенок градиента. С акцентом связаны выделения, обводки, прогресс и основные кнопки.HEX-цвет вроде #77a7ff.
--play, --play-2Цвета игрового действия и связанной с запуском графики.Два близких или контрастных цвета градиента.
--ok, --bad, --goldСемантические цвета статусов: успех, ошибка и отдельные акценты/награды.Не меняй их на похожие цвета, если пользователю важно мгновенно различать статус.
--lineЦвет рамок, разделителей и границ.Сдержанный цвет, заметный на панелях.
--radius, --card-radiusОбщие и карточные радиусы скругления.CSS-длина: 14px, 20px.
--shadowТень карточек, всплывающих панелей и модальных окон.0 12px 32px rgba(0, 0, 0, .28).
--font, --mono, --home-fontОсновная типографика, моноширинный текст и заголовок главной страницы.Список с резервными шрифтами, например "Segoe UI", sans-serif.
--nav-user, --nav, --nav-iconЗаданная пользователем ширина навигации, итоговая адаптивная ширина и размер значка.CSS-длины. Для корректной адаптивности предпочтительнее --nav-user, а не фиксировать --nav.
--foot, --pad, --gapВысота нижней панели, внутренние отступы и базовые расстояния компоновки.CSS-длины, например 64px и 16px.
--glass-blur, --glass, --bg-blur, --veil-opРазмытие стеклянных поверхностей, готовый эффект стекла, размытие обоев и непрозрачность вуали фона.Размытие — длина с px; --veil-op — число от 0 до 1.
--anim-durПродолжительность анимации появления, используемая несколькими экранами.450ms, то есть единица времени обязательна.

Значение переменной должно соответствовать её типу. Например, цвет нельзя присвоить переменной размытия, а 16 для свойства border-radius не задаёт длину — нужно 16px. Некоторые токены являются вычисляемыми: для полупрозрачной темы меняй исходные --panel-raw/--panel-2-raw и процент, а не пытайся превратить конечную переменную в неподходящий формат.

:root {
  --bg: #10131b;
  --bg-2: #171c28;
  --panel-raw: rgba(25, 31, 45, .94);
  --panel-2-raw: rgba(31, 39, 56, .97);
  --text: #edf2ff;
  --muted: #a8b2c8;
  --line: rgba(183, 199, 232, .18);
  --accent: #8caeff;
  --accent-2: #6f8ff0;
  --radius: 16px;
  --card-radius: 20px;
  --shadow: 0 14px 36px rgba(0, 0, 0, .32);
}

5. Стили по темам, состояниям и элементам интерфейса

У темы есть атрибут data-theme на корневом элементе. Если нужен общий дизайн, используй :root. Если конкретная корректировка нужна только одной теме — ограничь правило атрибутом. Так, например, светлая тема может сохранить собственный текст, даже если ты меняешь фон остальных тем.

/* Общее правило для всех тем. */
:root {
  --accent: #8d7bff;
}

/* Только для темы forest. */
:root[data-theme="forest"] {
  --accent: #78c98c;
  --accent-2: #4e9c69;
}

/* Взаимодействие мышью и клавиатурой. */
.btn:hover {
  filter: brightness(1.08);
}
.btn:focus-visible,
.field:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.btn:disabled {
  opacity: .55;
  cursor: not-allowed;
}

Имена атрибутов и состояний должны совпадать буквально. Cryndel использует, в частности, data-anim, data-background-animation, data-compact, data-density, data-dock, data-glow, data-header, data-homebuttons, data-interaction-animation, data-motion-reduced, data-nav-labels, data-notification-animation, data-statusbar и data-toast. Это динамические состояния: для общей кастомизации сначала проверь селектор на экране и не считай каждый атрибут отдельной пользовательской настройкой.

6. Реальные классы: кнопки, карточки, поля, навигация

Базовые элементы

В проекте есть .btn, .btn-sky, .btn-ghost, .btn-danger, .field, .row, .hint, .card, .grid-cards и .progress. Это наиболее стабильная отправная точка для общего переоформления.

Окно и навигация

Внешнюю компоновку образуют .shell, .titlebar, .nav, .nav-item, .stage и .foot. Кнопка игрового действия использует .play-btn, панель инструментов — .page-tools.

Главная

Для отдельных областей главной применяются .hero, .hero-card, .home-title, .home-sub, .home-actions, .home-carousel, .home-slide и .music-card.

Всплывающие элементы

Основные классы: .modal-veil, .modal, .toast-host, .toast, .dl-dock, .inbox-panel и .ui-menu. Помни, что изменение position, z-index или overflow может перекрыть кнопки и лишить панель прокрутки.

/* Оформить кнопки и поля в общем стиле. */
.btn {
  border-radius: 12px;
  font-size: 13px;
  transition: filter .18s ease, transform .18s ease;
}
.btn:hover {
  transform: translateY(-1px);
}
.field {
  border-radius: 12px;
  color: var(--text);
}
.field:focus {
  border-color: var(--accent);
}

/* Карточки экранов остаются гибкими и получают мягкую рамку. */
.stage .card {
  border-color: color-mix(in srgb, var(--accent) 22%, var(--line));
  border-radius: var(--card-radius, 18px);
  box-shadow: var(--shadow);
}

7. Типографика, размеры, отступы и фоны

Для цвета используй HEX, RGB/RGBA, HSL или поддерживаемый Chromium color-mix(). Для размеров — px, rem, проценты, vw/vh и ограничители вроде min()/clamp(). Не убирай min-width: 0 у элементов в flex/grid без проверки: оно помогает длинному тексту не раздвигать весь экран.

.home-title {
  color: var(--text);
  font-size: clamp(30px, 4.6vw, 56px);
  line-height: 1;
  letter-spacing: -.035em;
}

.stage .card {
  padding: clamp(12px, 2vw, 20px);
  background:
    linear-gradient(145deg,
      color-mix(in srgb, var(--panel) 94%, var(--accent)),
      var(--panel-2));
  border: 1px solid var(--line);
}

Для фонового изображения лучше сначала выбрать его штатной кнопкой в настройках. Тогда лаунчер сам управляет хранением, подложкой и применением. CSS-фильтры filter на всём контейнере способны размыть текст и кнопки вместе с обоями; если надо изменить только задний план, меняй фон штатно или применяй эффект к конкретному фоновому слою после проверки структуры.

8. Адаптивность: не ломай узкое окно

Сетка окна и CSS экранов содержат media queries на нескольких ширинах: около 1240, 1100, 900, 860, 820, 640, 620 и 560 px, а для компактной высоты — около 620 и 560 px. Внутреннее окно также может изменяться по размеру. Не создавай дизайн, который работает только на одной ширине, и не заменяй адаптивную навигацию фиксированным абсолютным блоком.

/* Сетка из двух колонок на широком окне,
   одна колонка на узком. */
.stage .custom-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}

@media (max-width: 700px) {
  .stage .custom-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .stage .custom-grid .card {
    padding: 12px;
  }
}

@media (max-height: 620px) {
  .stage .hero {
    padding-top: 16px;
  }
}

Важно: .custom-grid в этом примере — пример собственного класса, а не обязательный класс приложения. Его можно применять к элементам плагина или к собственному классу существующего элемента, если DOM действительно позволяет это сделать; для уже существующих областей используй подтверждённый класс вроде .hero или .grid-cards.

Проверяй минимум четыре ситуации: обычную ширину окна, узкую ширину, короткую высоту и длинный текст/переводы. Для сеток используй minmax(0, 1fr); для размеров — min() и clamp(); для строк — overflow-wrap: anywhere, если длинное имя может выходить за границу. Мобильная адаптация не сводится к уменьшению шрифта: иногда колонку надо перестроить в одну, а горизонтальную панель — разрешить прокручивать.

9. Уважай отключение анимаций и доступность

В приложении есть пользовательское выключение анимаций и правило для системного предпочтения уменьшенного движения. Не добавляй бесконечные вращения, вспышки и принудительные переходы поверх этого поведения. Используй умеренную длительность, сохраняй чёткую рамку фокуса и контраст текста относительно фона.

.custom-indicator {
  transition: opacity .18s ease, transform .18s ease;
}

@media (prefers-reduced-motion: reduce) {
  .custom-indicator {
    transition: none;
  }
}

.btn:focus-visible,
.nav-item:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

Встроенные анимации завязаны на --anim-dur и выключаются глобальным состоянием. CSS-переопределение с animation: ... !important может намеренно или случайно отменить это поведение, поэтому не используй его без веской причины.

10. Практические рецепты

Сделать интерфейс более строгим, с небольшим скруглением
:root {
  --radius: 8px;
  --card-radius: 10px;
}
.card,
.modal,
.music-card {
  border-radius: var(--card-radius);
}
Сделать карточки стеклянными, но оставить текст читаемым
:root {
  --panel-raw: rgba(20, 25, 37, .88);
  --panel-2-raw: rgba(25, 31, 46, .94);
  --glass-blur: 12px;
  --panel-pct: 92%;
}
.card,
.modal,
.dl-dock {
  backdrop-filter: var(--glass);
}

Сильная прозрачность и blur ухудшают читаемость, увеличивают графическую нагрузку и могут давать разный результат на разных GPU. Если текст теряется, сначала увеличь непрозрачность панели, а не blur.

Выделить только игровую кнопку на главной
.play-btn {
  border-radius: 16px;
  box-shadow: 0 10px 28px
    color-mix(in srgb, var(--play) 28%, transparent);
}
.play-btn:hover {
  filter: brightness(1.07);
}
Сделать навигацию чуть уже, не ломая адаптивные пределы
:root {
  --nav-user: 84px;
}
.nav-item {
  border-radius: 12px;
}

Не фиксируй --nav большим постоянным числом: итоговая ширина ограничивается адаптивной компоновкой. В настройках также доступен ползунок ширины навигации, который сохраняет исходное пользовательское значение.

Усилить контраст подсказок и рамок
:root {
  --muted: #c1cbe0;
  --line: rgba(195, 210, 240, .28);
}
.hint {
  line-height: 1.6;
}

После изменения цветов проверь и светлую, и тёмную темы, если правило глобальное.

11. Частые ошибки и порядок диагностики

СимптомВероятная причинаЧто попробовать
Ничего не изменилосьCSS не применён, селектор не существует на текущем экране или в имени класса пропущена точка.Нажми «Применить CSS», проверь класс по исходному CSS проекта и временно задай заметный тестовый цвет.
Изменился не тот элементСлишком общий селектор вроде button или div.Ограничь селектор, например .stage .btn или .home-carousel.
Панель перекрыла интерфейсИзменены position, z-index, размеры или overflow.Удали эти свойства и меняй только фон, рамку, тень и отступы.
На узком окне элементы выпадаютЗадана фиксированная ширина или одна колонка не адаптируется.Добавь media query, min-width: 0 и гибкую ширину через min()/clamp().
Цвета стали неправильными в светлой темеГлобальные значения не учитывают семантику темы.Используй токены, затем добавь ограниченное правило :root[data-theme="..."] только для нужной темы.
Переходы больше не выключаютсяПользовательское правило перебивает data-anim или media query reduce-motion.Удали принудительную анимацию/transition и проверь через настройку отключения анимаций.
После правок интерфейс нечитаемНизкий контраст, чрезмерное стекло или скрытый функциональный элемент.Используй кнопку «Очистить», затем верни изменения небольшими шагами.
!
Не редактируй штатные файлы CSS для обычной персонализации

Файлы проекта служат источником правды для классов и адаптивности, а пользовательское оформление предназначено для переопределений. Ручное изменение штатных файлов может пропасть при обновлении и затруднить диагностику. Не очищай пользовательское хранилище веб-сессии ради исправления CSS: там находятся логины и cookies кабинета.

10

Диагностика

Починка и полезные проверки

Если игра не запускается или сборка ведёт себя нестабильно, сначала проверь выбранный профиль и используй встроенную страницу «Починка».

Сборка не запускается

  • Убедись, что выбрана нужная сборка.
  • Проверь версию Minecraft и загрузчик.
  • Проверь доступное место на диске и выбранный путь Java.
  • Открой «Починка» и посмотри состояние и найденные сведения из логов.

После установки мода ошибка

  • Убедись, что мод подходит к загрузчику и версии игры.
  • Проверь требуемые зависимости.
  • Используй поиск в списке модов и отключи подозрительный мод.
  • При наличии бэкапа сделай откат перед экспериментами.

Нет скриншота в галерее

  • Снимок делается клавишей F2 в игре.
  • Проверь правильную сборку в фильтре галереи.
  • Попробуй открыть папку сборки и убедись, что игра сохранила файл.

Плагин не работает

  • В карточке проверь статус и сообщение ошибки.
  • Проверь синтаксис JSON манифеста и совпадение main с именем файла.
  • Убедись, что экспортируется activate и ZIP не содержит внешнюю папку-обёртку.
  • При изменении файлов нажми «Перезагрузить».
i
Безопасный порядок восстановления

Сначала сохрани важные миры и конфиги, затем создавай бэкап и только после этого пробуй отключать моды или выполнять откат.

Что именно проверяет автоматическая диагностика

Анализ читает хвост текущего logs/latest.log и самый новый текстовый crash-report, если они существуют, и ищет известные сигнатуры: отсутствующий класс, отсутствующую зависимость, сообщение о несовместимых модах, нехватку памяти и некоторые ошибки загрузки мода. Это поиск по шаблонам, а не универсальный разбор причин.

Кнопка «Исправить» может попытаться поставить Fabric API при некоторых совпадениях, отключить до пяти включённых локальных модов (не загруженных из Modrinth) при отдельных типах ошибок либо сообщить, что RAM надо увеличить вручную. Если лог не соответствует правилам распознавания, экран посоветует изучить latest.log самостоятельно.

Что входит в снимок резервной копии

Полный снимок включает доступные папки mods, config, resourcepacks, shaderpacks, saves, screenshots, defaultconfigs, kubejs, scripts, cryndel-skins, а также файлы вроде options.txt, servers.dat и заметок Cryndel. К снимку прилагаются запись профиля и Lockfile. Менеджер поддерживает быстрый режим, который включает прежде всего mods и config; видимая кнопка «Бэкап сейчас» использует полный режим.

Кэш и скачанные Java runtime не включаются. Восстановление сначала пытается создать защитный снимок текущего состояния, затем распаковывает выбранный архив в папку сборки. Кнопка «Откат» на экране починки применяет самый поздний снимок; убедись, что нужный мир находится в выбранной резервной копии.

11

Путеводитель по приложению

Каждый основной экран подробно

Короткая карта интерфейса: что находится в каждом разделе, что на него влияет и в каком порядке выполнять частые задачи.

01

Первый запуск

В приветственном сценарии лаунчер просит задать игровой ник. Проверка принимает от 3 до 20 символов: латинские буквы, цифры и подчёркивание. После сохранения ник можно изменить позднее кнопкой в нижней панели. Это профиль лаунчера; не вводи сюда пароль от Microsoft или другого аккаунта.

02

Первый игровой профиль

Если список сборок пуст, создай новый профиль мастером, выбери готовый доступный пак или импортируй поддерживаемый формат. Для первого запуска проверь, что профиль действительно выбран в нижней панели.

Что происходит после кнопки «Играть»

  1. Проверяется выбранный профиль и игрок. Для запуска необходима существующая сборка и текущий профиль пользователя.
  2. Определяется среда выполнения. Лаунчер использует Java, подходящую версии Minecraft; при необходимости Java может быть обнаружена или установлена.
  3. Подготавливаются файлы. Если игровые файлы/библиотеки отсутствуют, лаунчер скачивает необходимые компоненты и сообщает ход подготовки.
  4. Показывается прогресс. В интерфейсе виден статус подготовки; если это загрузка, доступна её отмена.
  5. Стартует процесс игры. При ошибке сообщение показывается в интерфейсе; информацию о причинах можно искать в «Починке» и игровых логах.
  6. Учитывается время игры. После завершения процесса лаунчер завершает сессию счётчика времени и может вернуть своё окно согласно настройкам.
i
Отмена относится к этапу подготовки

Кнопка отмены останавливает подготовку/загрузку. Управление уже запущенным процессом — отдельное состояние; не считай отмену скачивания командой закрытия игры.

Главное окно: постоянные элементы

Верхняя панель

Название приложения и системные кнопки управления окном.

Боковая навигация

Переход к главной, Modrinth, модам, скриншотам, My Cryndel, сборкам, плагинам, настройкам и починке. На узких экранах адаптация меняет компоновку.

Нижняя игровая панель

Кнопка ника открывает его изменение; селектор сборки переключает профиль; кнопка модов ведёт к списку активной сборки; «ИГРАТЬ» начинает запуск выбранной сборки.

Индикатор загрузки

Во время подготовки игры/файлов показывает этап и прогресс. Подготовку можно отменить через интерфейс загрузки.

Входящие загрузки

Кнопка загрузок открывает список файлов, скачанных через браузерные сессии лаунчера. Для файлов доступны действия по типу: мод — перенести в выбранную сборку; архив — попробовать импортировать как сборку или разместить как ресурспак.

Главная страница

Выбор сборки и запуск

Главная показывает выбранный профиль. При отсутствии сборки создай её через мастер. Если уже есть несколько профилей, переключайся через селектор внизу. Проверяй название и версию перед нажатием «Играть».

Статус игрового сервера

При посещении главной лаунчер запрашивает состояние cryndel.ru:25565: может показать онлайн, доступный онлайн-статус игроков/пинг или техническое обслуживание. Проверка выполняется при открытии экрана, а не непрерывно в фоне.

Ник, приветствие и статистика

Ник игрока отображается в нижней части окна. Главная может показывать приветствие и игровое время из локальной статистики профиля; отображение приветствия и карточек статистики настраивается.

Карусель обучения и музыкальная карточка

Карусель показывает несколько подсказок и меняет слайды по таймеру; её можно скрыть. Музыкальная карточка, если найдены аудиофайлы, управляет воспроизведением, громкостью, предыдущим/следующим треком и открытием музыкальной папки.

Фон и визуальные эффекты

Можно выбрать собственный фон, видео заставки и связанные параметры затемнения/размытия. В разделе «Производительность» отдельно включаются видеофон, движущиеся свечения, размытие и тени, частицы, а также четыре категории анимации: появление экранов, лёгкие реакции элементов, уведомления и декор фона. Появление экранов и движущийся декор выключены по умолчанию; лёгкие короткие реакции кнопок и уведомлений остаются включены. Настройки применяются сразу и сохраняются независимо: можно убрать только те эффекты, которые мешают, не сбрасывая дизайн. Для тематического оформления доступны также пользовательская картинка и три собственных звука фурри-темы.

3D-скин

Есть ветка отображения 3D-модели скина. Функция управляется отдельным параметром showSkin3d и намеренно выключена по умолчанию; при выключенной 3D-модели может показываться карусель обучения.

Экран «Сборки» и страница профиля

Список профилей

  • Сборки сгруппированы по полю группы, например «Мои», «Cryndel» или «Импорт».
  • В карточке указаны имя, версия Minecraft, загрузчик, объём памяти и, если есть, дата последнего запуска.
  • Кнопка выбора открывает подробную страницу, карандаш редактирует параметры профиля, папка открывает игровые файлы.
  • Удаление убирает профиль из списка; диалог предупреждает, что файлы сборки не удаляются без отдельного подтверждения в папке.
  • Если личных сборок пока нет, интерфейс может показать доступные каталожные паки.

Страница отдельной сборки

  • В заголовке показаны группа, имя, версия Minecraft, загрузчик и RAM.
  • Кнопки позволяют запустить или изменить текущий профиль.
  • Quick Play хранит флаг быстрого входа и адрес сервера; адрес можно поменять на странице профиля.
  • Заметки привязаны к ID сборки и сохраняются отдельно.
  • Lockfile показывает версию формата, загрузчик, версию игры и количество записей установленных модов.
  • Вкладки/переходы ведут к обзору, модам текущего профиля и починке.
i
Где искать версию Minecraft

Пункт «Версии Minecraft» в списке сборок сейчас перенаправляет обратно к управлению сборками: версия имеет смысл как часть конкретного профиля. Список доступных release-версий используется мастером при создании новой сборки.

Каталог Modrinth — путь от поиска до установки

  1. Сначала выбери целевую сборку. Фильтры каталога берут выбранные загрузчик и версию Minecraft как исходные значения. Без выбранного профиля установку мода выполнить некуда.
  2. Введи поисковый запрос и настрой тип. Ищутся моды, ресурспаки, шейдеры и модпаки; также доступны фильтры загрузчика, версии игры и сортировки.
  3. Посмотри список результатов. Карточки показывают название, автора, число загрузок, описание и действие перехода на страницу.
  4. Открой подробности проекта. Страница может содержать категории, галерею, описание и список версий, соответствующих выбранным фильтрам.
  5. Установи совместимую версию. Установка добавляет проект в выбранную сборку и обрабатывает зависимости через менеджер зависимостей.

Если выбрана категория модпаков, действие означает создание отдельной сборки, а не добавление набора JAR в уже существующую папку модов. Если проект уже найден в сборке, страница может показать это и предложить переустановку.

Настройки каталога

В подстраницах Modrinth есть настройка количества результатов на странице (в пределах 8–50), полноэкранного режима страницы проекта, отображения текстовых кнопок вместо одних SVG-иконок, цвета акцента и скругления. Основные фильтры каталога сохраняют контекст выбранной сборки.

Экран модов: конкретные операции

ДействиеЧто делаетНа что обратить внимание
Поиск и фильтрФильтруют локальный список по имени/ID/имени файла и состоянию: все, включённые или отключённые.Сначала проверь, что активна нужная сборка.
Переключатель модаПереименовывает JAR в состояние с суффиксом .disabled или обратно, затем обновляет список.Отключение не удаляет сам файл; изменения проявятся при следующем запуске игры.
УдалениеУбирает файл мода из каталога и связанную запись Lockfile.Перед удалением модпака или важного мода сделай резервную копию.
Добавление из файлаПозволяет выбрать JAR-файл(ы), копирует их в папку mods и индексирует метаданные/хеш.Локально выбранный JAR может получить предупреждение сканера; предупреждение не является карантином.
Проверка целостностиСверяет зарегистрированные хеши установленных файлов и сообщает, есть ли проблемы.Для локальных файлов без ожидаемого эталонного хеша результат может быть ограничен.
СканированиеПроверяет признаки вроде запуска процессов, загрузки кода из сети и обфускации.Это эвристическое предупреждение, не полноценный антивирус и не автоматическая блокировка.
Рекомендуемые проектыПоказывает подходящие подсказки каталога под загрузчик; установка ведёт в активный профиль.Совместимость всё равно проверяй по требованиям проекта.
Экспорт Modrinth-пакаДействие «Экспорт» на экране модов строит .mrpack из включённых записей Lockfile.Это формат Modrinth, а не MPCRYN. Он описывает список модов и ссылки/хеши, а не обещает копию каждого локального файла.

Скриншоты, встроенный браузер и кабинет

Скриншоты

Экран показывает снимки из игровых папок (до 200 элементов в текущем запросе), фильтрует по сборке, открывает крупный просмотр, оригинал и папку либо копирует изображение в буфер обмена.

Браузер

Встроенный просмотрщик поддерживает вкладки, заголовок страницы, создание вкладки Google, ввод HTTP/HTTPS-адреса, закрытие вкладок и масштаб. Неактивная вкладка, простаивающая достаточно долго, может быть выгружена и перезагружена при возврате.

Загрузки браузера

Загруженные файлы показываются во входящих загрузках. Для ZIP интерфейс предлагает импорт модпака либо установку как ресурспака в активный профиль; для JAR — действие переноса как мода.

My Cryndel

Кабинет открывается внутри лаунчера с отдельным постоянным разделом Chromium-сессии. Его масштаб настраивается; есть опция не выгружать страницу из памяти при переходе.

Сетевые данные

Браузер и каталог получают содержимое из интернета. При проблеме соединения пустой результат Modrinth или отсутствие пинга не обязательно означают поломку локальных файлов.

О лаунчере

Экран «О лаунчере» показывает версию установленного приложения, краткую информацию о проекте, лицензию и переходы в кабинет/настройки.

!
Постоянная сессия браузера

Не очищай постоянное хранилище persist:cryndel ради косметической настройки: там могут находиться авторизации и cookies My Cryndel и встроенного браузера.

12

Полный справочник

Все разделы настроек

Настройки разделены на тематические блоки. Часть параметров сохраняется сразу и применяется на лету, часть используется при создании профиля или следующем запуске игры.

Тема и внешний вид

НастройкаЧто меняетКогда полезно
Готовая тема14 тем: «Ночь», «День», «Фурри», «Роза», «Сталь», «Лёд», «Эмбер», «Лес», «Океан», «Лаванда», «Мята», «Закат», «Сакура», «Песок».Выбрать готовую палитру и её характер поверхностей, карточек, акцентов и форм элементов.
Акцентный цветПереопределяет основной акцент темы.Подобрать цвет кнопок/выделения к фону.
Скругление рамок / карточекМеняет радиус элементов интерфейса.Сделать оформление более строгим или мягким.
Положение навигацииПеремещает навигацию влево, вправо, вверх или вниз.Подстроить интерфейс под ориентацию окна.
Шрифт главнойВыбирает один из предусмотренных стилей главного заголовка.Настроить визуальный характер главной страницы.
Масштаб интерфейсаМеняет общий масштаб окна лаунчера.Удобство чтения и экран высокой плотности.
Ширина панели и размер иконокМеняет ширину навигации и размеры её значков.Подписанные или более компактные пункты меню.
Иконки действийМожно выбрать значки настроек, удаления, Modrinth, модов и плагинов из встроенного набора или загрузить собственный SVG.Настройка применяется сразу и сохраняется. Импорт ограничен безопасными геометрическими SVG-элементами; внешние ресурсы и скрипты не разрешены.
Прозрачность панелей, стекло, размытиеНастраивает прозрачность панелей, размытие стекла и фона.Видимость текста на сложных обоях; отключение blur снижает эффекты.
Плотность и компактностьМеняет расстояния/размер компоновки; отдельно есть режим компактного интерфейса.Уместить больше контента в небольшом окне.
Положение панели действий и уведомленийВыбирает расположение панели инструментов и уведомлений.Чтобы системные подсказки не перекрывали нужные кнопки.
Длительность уведомленияОпределяет, сколько времени toast остаётся видимым.Увеличить время чтения сообщений.
Свой CSSПрименяет пользовательский CSS, который можно вставить, загрузить из файла, применить или очистить.Тонкая настройка цвета/отступов. Ошибочный CSS способен ухудшить читаемость.

Главная, фон и поведение анимаций

Фоновое видео

Фоновое видео может зацикливаться. Можно выбрать свой фон и затемнение; сброс возвращает штатную конфигурацию фона.

Заставка

Можно выбрать видео заставки, управлять её длительностью и включить повтор показа анимации первого открытия.

Анимации

Общий переключатель анимаций и длительность перехода (ползунок в миллисекундах).

Карусель

Можно включить/скрыть подсказки и настроить интервал смены слайдов.

Главные карточки

Переключатели статистики, действий на главной, приветствия, виджетов и музыкальной карточки.

Свечение

Можно включить плавное свечение акцентного цвета.

Фоновые частицы

Отдельно управляются декоративные частицы.

Строка статуса

Отображение индикатора состояния сервера/пинга на главной.

Поведение карточек

Можно убрать эффект подъёма карточек при наведении.

Подписи навигации

Включает/выключает текстовые подписи под значками бокового меню.

Звуки и фоновая музыка

Интерфейсные события

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

клик мышикнопкавыбор спискаползунокнабор текстаокноуспехошибкапредупреждениезаставка

Пользовательские звуковые файлы выбираются через диалог. Поддерживаются MP3/OGG/WAV/M4A. Если для события нет собственного файла, лаунчер использует штатный звук или генерирует WAV-запасной вариант. Доступно восстановление одного звука или всех встроенных звуков.

Музыка

Файлы MP3/OGG/WAV/M4A из muzick/fon попадают в музыкальный список. В установленной версии добавляй пользовательские треки через кнопку «Открыть папку» в настройках: откроется доступная для записи папка данных лаунчера, а не каталог установки. Настройки позволяют задать громкость, режим плейлиста: повтор списка, повтор одного трека, однократное воспроизведение или выключено; автозапуск и видимость карточки на главной управляются отдельно.

Список пуст? Проверь расширение аудиофайла и каталог. Карточка на главной содержит кнопки предыдущего/следующего трека, play/pause и ползунок громкости.

Minecraft, память, Java и картинка

ПараметрПодробноПодсказка
Режим RAMАвтоматически под систему или ручной выбор; глобальное значение памяти при сохранении также обновляет выбранную сборку.Оставляй память ОС и другим приложениям; выделение всей RAM не ускоряет игру.
Окно игрыЗадаются ширина, высота и режим полного экрана по умолчанию.Для устранения проблем запуска попробуй стандартное разрешение окна.
JavaМожно задать полный путь команды Java или оставить автоматический выбор. Менеджер находит Java в bundled runtime, JAVA_HOME, PATH и стандартных каталогах ОС.Требуемая версия зависит от Minecraft; менеджер автоматически выбирает требуемый major или предлагает/скачивает Temurin.
Java на дискеНастройки показывают обнаруженные установки и позволяют загрузить Java 21.Если игра не находит Java, проверь путь и перезапусти подготовку.
Дополнительные JVM аргументыТекст дополнительных параметров виртуальной машины Java.Меняй только если знаешь назначение каждого флага.
ВидеокартаМожно выбрать авто или одну из обнаруженных системой видеокарт.Если дискретная карта не используется, проверь профиль приложения в ОС/драйвере.
Режим графикиDefault, Fabulous, Fancy или Fast.Fast снижает часть визуальных эффектов; Fabulous может быть тяжелее.
3D-предпросмотр скинаГлавная может отобразить 3D-модель, если для профиля доступен скин и включён соответствующий флаг интерфейса.Флаг showSkin3d по умолчанию выключен; он не является отдельной кнопкой мастера сборки.

Язык, Discord, поведение окна и сброс

Русский / English

Переключатель языка меняет язык интерфейса и сохраняет глобальное игровое языковое предпочтение. У вновь создаваемой сборки также есть собственные параметры языка.

Discord RPC

Настройка включает/отключает rich presence и показывает статус подключения. Она намеренно выключена по умолчанию; без настроенного App ID функция может быть недоступна.

Свернуть/закрыть при запуске

Доступны параметры сворачивания лаунчера в трей/из панели задач, закрытия при запуске и возврата окна после закрытия игры. Их взаимодействие определяет, где останется окно во время игры.

Сброс

«Сброс настроек» сбрасывает настройки лаунчера к значениям по умолчанию. Не считай его сбросом Java, файлов игры или авторизации; важные данные профилей всё равно лучше заранее сохранить.

Приветствие по нику

Приветствие на главной можно отключить независимо от локали. Если для ника нет специальной фразы, используется обычное приветствие.

Обучение заново

В настройках доступен повтор onboarding-подсказок для новых пользователей.

Точная карта пользовательских настроек

В таблицах ниже приведены реальные поля формы настроек и соответствующие ключи. Диапазон у ползунка — это границы контролла в интерфейсе. Если для сохранённого значения не показан ползунок, это не означает, что лаунчер автоматически проверит или исправит его при ручном редактировании файла настроек.

Внешний вид и интерфейс

Что нажать / изменитьКлючВарианты или пределыЧто происходит
Темаui.themedark, light, furry, girly, professional, glass, ember, forest.Выбор готовой палитры; при выборе темы поле ui.accent очищается, чтобы вернуть её собственный акцент.
Цвет интерфейсаui.accentЦветовое поле; пустое значение использует акцент темы.Сразу меняет базовый --accent. Это главный акцент, не отдельный фон каждого элемента.
Скругление рамокui.radius4–28 px.Задаёт общее скругление. Для карточек ниже существует отдельный параметр.
Положение навигацииui.navPosСлева, справа, сверху, снизу.Перестраивает раскладку оболочки лаунчера; узкие окна дополнительно используют адаптивные правила.
Шрифт главнойui.homeFontdefault — обычный; minecraft — пиксельный; title — выразительный; classic — с засечками.Меняет типографику главного заголовка, а не весь текст приложения.
Язык лаунчера и Minecraftui.language, game.languageru или en.Переключает локаль интерфейса и синхронно сохраняет глобальное языковое предпочтение Minecraft.
Масштаб интерфейсаui.uiScale80–130%, шаг 5.Меняет zoom окна лаунчера. Если слишком мал, используй штатный ползунок, а не компенсируй всё CSS-размерами.
Ширина и высота окнаui.windowWidth, ui.windowHeightПо умолчанию 900×600; минимум 700×460, размеры также ограничиваются доступной рабочей областью экрана.В разделе «Настройки → Лаунчер» выбери ширину и высоту, затем нажми «Применить размер окна». Настройка сохраняется для следующего запуска.
Ширина панели навигацииui.navWidth64–132 px, шаг 4.Это желаемая ширина; CSS дополнительно ограничивает её на адаптивных ширинах.
Скругление карточекui.cardRadius0–30 px.Задаёт --card-radius; карточки используют его как отдельный радиус.
Прозрачность панелейui.panelOpacity30–100%, шаг 5.Определяет непрозрачность поверхностей. На 100% текст обычно наиболее читаем.
Размытие стеклаui.glassBlur0–40 px, шаг 2; ноль — оставить оформление темы.Размывает фон за стеклянными панелями. Не путай с размытием обоев.
Размер иконок навигацииui.navIconSize14–28 px, шаг 1.Меняет размеры значков навигационных пунктов.
Переопределения SVGui.iconOverridesОбъект с вариантами значков для gear, trash, mr, mods, plug.Настраивается в разделе «Иконки». Можно выбрать встроенный вариант, импортировать безопасный SVG или сбросить значок к стандартному.
Плотность интерфейсаui.densitycozy, normal, dense.Меняет предусмотренные проектом отступы отдельных элементов; это не равно масштабу zoom.
Компактный интерфейсui.compactВкл. / выкл.Включает отдельный режим compact наряду с настройкой плотности.
Позиция уведомленийui.toastPosСверху справа или снизу справа.Перемещает toast-уведомления по вертикали.
Длительность уведомленияui.toastDuration1200–12000 мс, шаг 200.Время показа всплывающего уведомления.
Позиция панели загрузокui.dockPosСнизу справа или снизу слева.Перемещает dock загрузок и соответствующую область уведомлений по горизонтали.
Позиция панели действийui.toolsPosauto — как в теме; сверху; снизу.Меняет размещение строки быстрых действий, а не основную навигацию.
Подписи навигацииui.navLabelsПоказывать / скрыть.Переключает подписи рядом/под значками в зависимости от текущего расположения навигации.
Строка состоянияui.showStatusBarПоказывать / скрыть.Управляет строкой состояния с пингом и онлайн-информацией.
Подъём карточек при наведенииui.hoverLiftВкл. / выкл.Отключает/включает эффект при наведении на карточку.
Свечение акцентаui.accentGlowВкл. / выкл.Выключает некоторые акцентные тени и свечение, не убирая сам цвет выделения.

Главная, заставка и фон

Что нажать / изменитьКлючВарианты или пределыЧто происходит
Видео-обои зациклитьui.bgLoopВкл. / выкл.Управляет циклическим воспроизведением видеофона.
Яркость обоев / затемнение фонаui.bgDim20–90%; значение по умолчанию 0.72 (72% яркости).Меньшее число сильнее затемняет обои. Тема «Ночь» теперь показывает фон светлее; персональное значение ползунка сохраняется.
Загрузить / сбросить фонui.backgroundFile, ui.backgroundKindВыбор файла или возврат штатного видеофона.Выбранный фон применяется сразу; сброс очищает выбранный файл и устанавливает тип фона video.
Размытие обоевui.bgBlur0–24 px, шаг 1.Размывает фон отдельно от стекла панелей.
Видео заставкиui.splashFileВыбирается через диалог файла.Заменяет видеоматериал заставки; выбор сохраняется отдельно от фоновых обоев.
Длительность заставкиui.splashDurationЧисловое поле от 0 до 30000 мс; 0 — длительность как в видео.Определяет время заставки, когда задано ненулевое значение.
Всегда показывать анимацию первого открытияui.alwaysSplashВкл. / выкл.Повторно показывает начальную анимацию при последующих открытиях.
Лёгкая анимация открытия страницui.animationsВкл. / выкл.; по умолчанию вкл.Однократное короткое появление содержимого страницы только по прозрачности; применяется к экрану целиком, не анимирует отдельно заголовки, карточки и каждую строку.
Лёгкие реакции кнопок и карточекui.animationInteractionsВкл. / выкл.; по умолчанию вкл.Короткие переходы элементов управления и небольшие реакции карточек при наведении.
Плавное появление уведомленийui.animationNotificationsВкл. / выкл.; по умолчанию вкл.Короткое появление toast-уведомлений и панели загрузки.
Движение декоративного фона и курсора заставкиui.animationBackgroundВкл. / выкл.; по умолчанию выкл.Разрешает медленное движение фоновых свечений и мигающий курсор заставки.
Видео на фонеui.backgroundVideoВкл. / выкл.Останавливает тяжёлое видео и показывает статичный фон, когда он доступен. Не меняет выбранные фоновые файлы.
Движущиеся фоновые свеченияui.ambientEffectsВкл. / выкл.Включает или скрывает декоративные размытые световые пятна вокруг окна.
Размытие и тени стеклянных панелейui.blurEffectsВкл. / выкл.Отключает backdrop blur, тени панелей и размытие обоев. Значения ползунков размытия сохраняются.
Длительность появления страницui.animationDuration100–300 мс, шаг 20; по умолчанию 140 мс.Меняет длительность лёгкого появления страницы, если оно включено. Небольшое значение делает переход быстрым и сохраняет отзывчивость.
Смена слайда обученияui.carouselSeconds3–30 секунд.Интервал показа слайдов/подсказок карусели.
Карусель обученияui.hideCarouselПоказать / скрыть.В настройке переключатель положительный; внутренний ключ обратный: true означает скрыть.
Статистика главнойui.statCardsПоказывать / скрыть.Скрывает или возвращает статистические карточки.
Кнопки действий на главнойui.homeActionsПоказывать / скрыть.Управляет главной группой быстрых действий.
Приветствие по нику на главнойui.homeGreetingПоказывать / скрыть.Отдельная настройка строки приветствия возле ника.
Приветствие в секции «Приветствие»ui.greetingEnabledПоказывать / скрыть.Это ещё один переключатель приветствия, отдельный от homeGreeting; если поведение кажется похожим, проверяй оба состояния.
Виджетыui.showWidgetsВкл. / выкл.Разрешает плавающие виджеты на поддерживаемых экранах. Сами виджеты не показываются поверх главной страницы.
Частицы на фонеui.particlesВкл. / выкл.Включает декоративные частицы на отдельном canvas-слое; при выключении анимация canvas останавливается.
Количество частицui.particleCount8–60, шаг 4; по умолчанию 28.Меняет число частиц и перезапускает только canvas-анимацию. Ползунок доступен при включённом переключателе частиц.
Картинка фурри и три своих звукаui.furryImage, ui.furrySoundsФайлы выбираются диалогом.Настраивают материалы соответствующей темы/виджета, но не включают виджет на главной.

Звуки и музыка

Что нажать / изменитьКлючВариантыЧто происходит
Звуки интерфейса и заставкиui.soundsВкл. / выкл.Общий переключатель интерфейсных звуков.
Громкость звуковui.soundVolume0–100%; в хранилище от 0 до 1.Общий коэффициент громкости звуков.
Клики со звуком / звук набора текстаui.clickSounds, ui.typingSoundsКаждый параметр отдельно вкл. / выкл.Отключают соответствующие категории взаимодействий.
Громкость для каждого событияui.soundVolumes.<event>0–100%, отдельно по строке.Независимый уровень для klick, knopka, sew, posluzunok, zvukprinapisanii, interfeyse, ura, eror, warn и zastavka.
Выключить отдельный звукui.soundMuted.<event>Отдельный mute для каждой строки.Отключает одно событие, не выключая остальные звуки интерфейса.
Свой файл звукаui.soundFiles.<event>Файл выбирается отдельно для события.Можно прослушать, заменить или вернуть встроенный звук; есть восстановление всех звуков.
Громкость музыкиui.musicVolume0–100%; в хранилище от 0 до 1.Меняет уровень фоновой музыки и доступна также на карточке проигрывателя.
Режим музыкиui.musicModeplaylist, single, once, off.Цикл всего списка, повтор одного трека, проиграть один раз или выключить.
Автозапуск музыкиui.musicAutoplayВыкл. по умолчанию; включается вручную.Если выключено, музыка сама не начинает играть при запуске приложения или первом клике. Запустить её всё ещё можно кнопкой play; это предпочтение сохраняется.
Музыкальная карточка главнойui.showMusicCardПоказывать / скрыть.Меняет видимость плеера на главной; не удаляет файлы и не отключает сам каталог музыки.

В исходниках файлы музыки кладутся в muzick/fon. В установленном лаунчере используй кнопку «Открыть папку» в настройках: папка находится в доступном для записи каталоге данных пользователя. Не путай индивидуальную громкость события с общей громкостью звука и громкостью музыки: это три самостоятельных слоя управления.

Память, разрешение и Java

Что нажать / изменитьКлючВарианты или пределыЧто происходит
Режим RAMgame.memoryModeauto или manual.Автоматический расчёт под систему или ручной объём. При сохранении выбранный профиль тоже обновляется.
RAM для игрыgame.defaultMemoryMbОт 2048 МБ с шагом 256; динамический максимум обычно не ниже 4096 и рассчитывается как минимум 1024 МБ меньше системной RAM.Глобальная стартовая рекомендация/значение. Оставляй ОС и другим программам достаточную память.
Разрешение окнаgame.defaultResolution.width, game.defaultResolution.heightЧисловые значения, при пустом/нулевом вводе применяется запасное значение 1280×720.Сохраняет ширину и высоту окна игры.
Полный экранgame.defaultFullscreenВкл. / выкл.Настройка режима запуска Minecraft по умолчанию.
Своя команда Javagame.javaCommandПусто — автоматический подбор; иначе полный путь к Java.Учитывай требуемую версией Minecraft версию Java. Некорректный путь может остановить запуск.
Дополнительные аргументы JVMgame.customJvmArgsСтрока аргументов.Передаётся виртуальной машине Java; добавляй только знакомые параметры.
Видеокартаgame.gpuauto или идентификатор обнаруженного GPU.Список формируется по оборудованию, доступному системе.
Рендер игрыgame.graphicsdefault, fabulous, fancy, fast.Выбор уровня графики, применяемого к игре.
Java на дискеНе отдельный текстовый ключ мастераКнопка «Скачать Java 21».Показывает найденные Java и позволяет скачать Java 21; в зависимости от версии Minecraft лаунчер может выбрать другой нужный major.

Поведение лаунчера и кабинет

Что нажать / изменитьКлючВарианты / значение по умолчаниюКомментарий
Discord RPClauncher.discordRpcВкл. / выкл.; текущая схема хранения задаёт true.Показывает статус; без настроенного App ID или работающего Discord подключение может быть недоступно. В проектных правилах функция обозначена как выключенная по умолчанию, но значение схемы и форма сейчас расходятся с этим намерением. Не считай текущее сохранённое значение подтверждением подключения.
Сворачивать в трей при запуске игрыlauncher.minimizeToTrayВкл. по умолчанию.Выбирает поведение окна при запуске игры.
Закрывать лаунчер при запуске игрыlauncher.closeOnLaunchВыкл. по умолчанию.Не включай одновременно с ожиданием, что окно останется открытым; учитывай взаимодействие настроек окна.
Возвращать лаунчер после закрытия игрыlauncher.showOnGameExitВкл. по умолчанию.Управляет показом лаунчера после завершения Minecraft.
Пройти обучение зановоДействие onboardingКнопка запускает обучение повторно.Это действие, а не постоянный параметр внешнего вида.
Сброс настроекВсе настройкиВозврат к default settings.Меняет именно настройки лаунчера; это не кнопка удаления игровых каталогов. После сброса не очищай webview storage ради проверки.
Масштаб My Cryndelcabinet.zoomЧисловое поле, в форме 50–150%, исходное значение 100%.Открой страницу кабинета, вызови её контекстную команду «Настройки страницы», измени размер. Значение влияет на отображение сайта.
Страница в фоне (не выгружать)cabinet.keepAliveВкл. по умолчанию.Находится в настройках страницы My Cryndel и отвечает за сохранение активности веб-страницы.

Секция «Настройки» также содержит кнопки перехода в «Плагины» и «О лаунчере». Это навигация, а не переключатели конфигурации.

Поля из схемы хранения, у которых нет контролла в этой форме

Ниже перечислены дополнительные ключи, существующие в текущих значениях по умолчанию проекта. Их присутствие в schemas.js означает, что хранилище знает такое поле, но не означает, что в обычном экране настроек есть для него переключатель. Не редактируй JSON напрямую без резервной копии: структура может меняться при миграции версии лаунчера.

Группа и ключиЗначение по умолчанию схемыОговорка
ui.backgroundVideo, ui.backgroundKindtrue, videoБазовые признаки фонового видео; выбор фона в форме использует также backgroundFile.
ui.reducedMotion, ui.bgVeilfalse, 0.8Состояние уменьшенного движения учитывается рендерингом; bgVeil задаёт прозрачность слоя затемнения, и по умолчанию он стал легче. Отдельного контролла в этой форме для них нет.
ui.showSkin3d, ui.skinSpinfalse, true3D-скин намеренно выключен по умолчанию. Не следует считать эти поля доступным переключателем в секции настроек.
ui.furryWidget, ui.furryScale, ui.shotsWidgettrue, 1, trueУправляют частью виджетов/их размером. Размер меняется через событие виджета «Размер виджета» в диапазоне 50–180%; общего переключателя этих полей в показанной форме нет.
ui.musicCardPosbottom-leftСохранённое позиционное поле; пользовательский экран переключает видимость карточки, а не это поле.
ui.splash, ui.uiSoundstrue, trueДополнительные/унаследованные флаги в схеме. На форме есть актуальные переключатели заставки/звуков по другим ключам; эти поля не следует считать отдельными контроллами.
ui.headerAutoHide, ui.homeButtons, ui.homeActionstrue, true, trueЗаголовок автоматически адаптируется; homeButtons — отдельное состояние от отображения homeActions. В форме есть отдельный видимый переключатель только для действий главной.
ui.greetingEnabled, ui.homeGreetingtrue, trueЭто два ключа, не один: экран показывает контролы для обоих, поэтому проверяй оба, если персонализация приветствия ведёт себя неожиданно.
ui.pluginsEnabled, ui.homeButtonstrue, truepluginsEnabled — рабочий глобальный переключатель расширений на экране плагинов; homeButtons относится к главному экрану.
launcher.hideToTrayOnLaunch, launcher.showConsoleOnLaunch, launcher.hideOnLaunch, launcher.confirmExit, launcher.restoreWindowAfterGamefalse, false, false, true, trueПоля жизненного цикла окна из схемы; все они не представлены отдельными контролами в текущей форме настроек.
versions.showReleases, showSnapshots, showBetas, showOldtrue, false, false, falseФильтры типов версий; не путай их с селектором версии при установке Minecraft.
modrinth.enabled, autoCheckUpdates, checkIntervalHours, autoInstallDependencies, scanMalware, skipDuplicates, listLimit, fullscreen, svgOnlytrue, true, 24, true, true, true, 20, true, trueВнутренние предпочтения экрана Modrinth/загрузчика; не все имеют отдельный переключатель в общей форме. Проверяй актуальные настройки конкретного экрана.
browser.zoom, browser.openLinksInside100, trueНастройки встроенного браузера; не представлены в общей форме настроек.
advanced.apiUrl, advanced.devMode, advanced.verboseLogging, advanced.liveNick, advanced.discordAppIdhttps://api.cryndel.ru, false, false, { enabled: true, wsPort: 21999 }, пустая строкаСлужебные и расширенные значения. Не меняй API URL или порт без понимания последствий; RPC также требует корректной конфигурации приложения Discord.
extras.customCss, extras.splashtrue, trueФлаги доступности дополнительных возможностей; текст CSS фактически хранится отдельно в themes/custom.css.

У игровой схемы есть и другие значения Minecraft — например лимит FPS, дальность прорисовки и симуляции, FOV, VSync, чувствительность мыши, громкость, сложность, чат и параметры HUD. Это не контролы глобального раздела «Память и картинка» в текущем settings.js. Настройки, относящиеся к отдельной сборке, следует искать в настройках/конфигурации выбранного профиля и самой игры, а не предполагать наличие скрытого переключателя в этом экране.

Остальные поля gameЗначение по умолчанию схемыВажно
defaultGameDir, javaPath, jvmPreset, envVarsПустой каталог; auto; cryndel-recommended; пустая строка.Путь к каталогу игры, режим выбора Java, пресет JVM и переменные среды. Не являются контролами общей формы «Память и картинка».
toggleSprint, toggleSneak, rawMouseInput, vsynctrue, false, true, true.Игровые предпочтения управления и синхронизации кадров.
maxFps, renderDistance, simulationDistance, guiScale, fov0, 12, 12, 0, 70.Игровые графические параметры; 0 имеет специальный смысл, заданный Minecraft/лаунчером, и не означает автоматически «выключить».
autoJump, particlesSettingfalse, all.Автопрыжок и качество частиц.
masterVolume, musicVolume, difficulty, chatVisibility1, 1, normal, full.Громкость Minecraft и игровые правила/предпочтения. Не смешивай их с громкостью музыки самого лаунчера.
showFps, fullscreenOnLaunchfalse, false.Дополнительные параметры отображения/запуска Minecraft; в форме присутствует только defaultFullscreen.
capeFile, capeEnabled, skinModelПустой файл; false; default.Данные плаща и модели скина; наличие ключа не гарантирует активный отдельный контрол в общей форме.
serverHost, serverPort, autoAddServercryndel.ru, 25565, true.Значения сервера и автоматического добавления сервера; не редактируй без понимания назначения выбранной сборки.
smoothLighting, clouds, entityShadows, bobView, viewBobbingtrue, default, true, true, true.Игровые настройки графики и камеры.
pauseOnLostFocus, invertYMouse, mouseSensitivityPcttrue, false, 100.Фокус окна и параметры мыши.
gammaPct, chatOpacityPct, hudHidden, narrator50, 100, false, 0.Яркость, прозрачность чата, HUD и диктор; поля схемы, а не элементы текущей общей формы.

В ключах Minecraft есть похожие по смыслу поля — например defaultFullscreen и fullscreenOnLaunch, а также два ключа showOnGameExit в группах game и launcher. Это разные пространства настроек, и не следует подменять одно другим без проверки места, где значение читается.

13

Короткие ответы

FAQ и словарь

Основные понятия, которые встречаются в интерфейсе и инструкциях.

Что такое сборка?

Отдельный профиль Minecraft со своими файлами, настройками, модами и выбранным загрузчиком.

Чем отличаются MPCRYN и MRPACK?

Это разные форматы. MPCRYN — контейнер сборки Cryndel; MRPACK используется Modrinth. Для каждого есть свой пункт импорта.

Нужно ли запускать игру сразу после импорта?

Нет. Импорт создаёт профиль и распаковывает его файлы; запуск выполняется отдельно кнопкой «Играть».

Зачем плагину manifest.json?

В нём объявляются ID, имя, версия, точка входа, версия Plugin API, разрешения и схема настроек.

Где меняются настройки плагина?

На странице «Плагины», внутри карточки установленного расширения. Если схема настроек отсутствует, доступен JSON-конфиг.

Что делать, если плагин просит API выше 2?

Установленная версия лаунчера не поддерживает заявленную версию плагина. Найди совместимую версию расширения; не меняй значение API только для обхода предупреждения.

Можно ли доверять любому ZIP-плагину?

Нет. Плагин содержит исполняемый код; устанавливай только проверенные архивы от доверенных авторов.

Где хранятся файлы игры?

У каждой сборки свой игровой каталог. Внутри страницы сборок можно открыть папку нужного профиля.