Архитектура
Структура модулей
Заголовок раздела «Структура модулей»nexira/├── client-config # Константы, AppConfig, BuildConfig├── client-core # Доменные модели, API-сервисы, интерфейсы├── client-launcher # DI, загрузка файлов, обновления, запуск└── client-ui # Compose Multiplatform UIclient-config
Заголовок раздела «client-config»Глобальные константы: URL серверов, таймауты, пути к файлам, конфиг прокси.
Генерирует BuildConfig с версией и временем сборки через gmazzo/buildconfig.
client-core
Заголовок раздела «client-core»Чистая бизнес-логика — без UI и DI-фреймворка.
AuthService— вход, расшифровка AES-токена, определение SSL-ошибокServerRepository— запрос дашборда, цикл обновления хэша лаунчераSkinRepository— загрузка скина/плащаHttpClientProvider— переключение между безопасным/небезопасным OkHttp клиентом в рантайме- Доменные модели:
SessionData,FileManifest,SettingsDataи др.
client-launcher
Заголовок раздела «client-launcher»Связывает всё вместе через Koin DI.
FileDownloadService— разворачивание манифеста, параллельная загрузка, MD5 верификация, распаковка extra.zipLauncherService+GameCommandBuilder— сборка JVM команды для 1.7.10 / 1.12.2 / 1.21.1UpdateService— GitHub Releases API, определение артефакта по ОС, SHA256 верификацияCredentialsManager— AES-256-GCM шифрование с PBKDF2 деривацией ключаProfileManager— профили экземпляров по серверам, избранное, последний серверJavaManagerService— загрузка бандлов Bellsoft JDK по версии Minecraft
client-ui
Заголовок раздела «client-ui»Compose Multiplatform UI.
AppLayout/AppRoot— корневая композиция, управление окном, авто-входDashboardScreen— сетка серверов, панель запускаRightPanel— панель входа/аккаунта, лента новостейTrayManager— обёртка dorkbox/SystemTrayLauncherController— машина состояний пайплайна запуска (Idle → Prepare → Downloading → GameRunning)
Ключевые архитектурные решения
Заголовок раздела «Ключевые архитектурные решения»HttpClientProvider вместо прямой инжекции HttpClient
Заголовок раздела «HttpClientProvider вместо прямой инжекции HttpClient»Репозитории получают провайдер, который определяет правильный клиент при каждом вызове. Это позволяет SSL-обходу вступить в силу немедленно без пересоздания синглтонов Koin.
Фиксация версии JNA
Заголовок раздела «Фиксация версии JNA»dorkbox/SystemTray 4.4 выполняет жёстко заданную проверку версии JNA. JetBrains Runtime 25 бандлит JNA 7.x, что не проходит эту проверку. Решение: resolutionStrategy.eachDependency форсирует JNA на 6.1.6 глобально, с 5.18.1 явно в client-ui для Windows.
Ручная сборка AppImage
Заголовок раздела «Ручная сборка AppImage»Встроенная упаковка Compose Multiplatform для Linux производит DEB/RPM. AppImage собирается вручную в CI через jlink для минимального JRE и appimagetool, с инжектированием .desktop и AppStream metainfo.
Конфиги версий GameCommandBuilder
Заголовок раздела «Конфиги версий GameCommandBuilder»Каждая поддерживаемая версия Minecraft имеет иммутабельный VersionConfig — главный класс, tweak-класс, JVM-флаги, директория нативных библиотек. NeoForge (1.21.1) требует разделения module path (-p) и дополнительных флагов --add-opens для Java 21+.
Платформенные директории данных
Заголовок раздела «Платформенные директории данных»Пользовательские данные (настройки, креды, скачанные клиенты, кэш скинов, логи, crash-репорты) живут в одной директории на ОС, которую резолвит PlatformPaths в client-launcher:
| ОС | Путь |
|---|---|
| Windows | %LOCALAPPDATA%\Nexira\ |
| macOS | ~/Library/Application Support/Nexira/ |
| Linux | $XDG_DATA_HOME/nexira/ (по умолчанию ~/.local/share/nexira/) |
Переменная окружения AURA_DATA_DIR перекрывает дефолт на любой ОС — пригодится чтобы перенести данные на другой диск (например D:\Nexira на Windows) без правки кода.
При первом запуске legacy-директория ~/.aura/ (использовалась в версиях ≤ 2.2.x) копируется в итоговую директорию данных, в неё пишется маркер .migrated. Старые данные не удаляются — пользователь может убрать их вручную, убедившись что миграция прошла.
Константы протокола (AppConfig.LEGACY_*)
Заголовок раздела «Константы протокола (AppConfig.LEGACY_*)»Соль аутентификации, дефолтный хэш лаунчера, ID сервера по умолчанию и дескриптор протокольного JAR в AppConfig восстановлены из декомпилированного исходника официального лаунчера SMARTYcraft: Kitty-Hivens/smrt-deco. Оригинал обфусцирован Proguard-ом (a.java, b.java, …) и заархивирован с апреля 2026, так что любое будущее изменение протокола придётся выуживать из свежего дампа.