# ZernMC Launcher **ZernMC Launcher** — это полностью самописный Minecraft-лаунчер, созданный с нуля. Клиент написан на **Java**, серверная часть — на **Python (FastAPI)**. ## Основные особенности - Написан полностью с нуля, без использования готовых решений - Удобная загрузка и обновление сборок прямо с сервера ZernMC - Чистый и относительно читаемый код как клиента, так и сервера - Графический интерфейс на **JavaFX** (по умолчанию) + **TUI** (режим `--cli`) - Поддержка **прокси-режима** через свой сервер при проблемах с внешними ресурсами (Fabric/Forge Maven, Mojang и т.д.), обход блокировок через выбор домена и SNI - Поддержка загрузчиков **Fabric**, **Forge**, **NeoForge** и ванильных версий (установка через встроенный JRE) - Ротационные логи в стиле Minecraft: `latest.log` + архивы `.log.gz` - Инкрементальное обновление JavaFX и автообновление лаунчера - Подпись exe самоподписным сертификатом Zern.cc (jsign/Authenticode) - Полное отсутствие рекламы и телеметрии - Не собирает никаких данных о пользователе - Работает «из коробки»: достаточно распаковать архив и запустить `zernmc.exe` - Есть система аккаунтов и проходок ## Состав дистрибутива **Онлайн-установщик `ZernMC-Online-Setup.exe` (Go, ~5.7М, без Java):** - Спрашивает папку установки (default `C:\ZernMC`) + чекбокс `Ярлык ZernMC Launcher.lnk на рабочем столе` - Качает `JRE 47М` → `lib/jre21`, затем `meta/file` для `lib/javafx`, `bin/`, `assets/`, `zernmc.exe` - Пишет `build.version`, создаёт `uninstall.exe` (`C:\ZernMC\uninstall.exe`), ярлык - Локальные файлы `~/.zernmc` не трогает **Оффлайн `ZernMC-win-<версия>.zip` (или `ZernMC-Offline-Setup.exe` — тот же выбор папки + ярлык):** - `zernmc.exe` — GUI (JavaFX) - `zernmc-cli.exe` — TUI - `zernmc-cli-jfx.exe` — консоль + JavaFX - `lib/jre21` — JRE 21 (только оффлайн) - `lib/javafx` — JavaFX 23.0.1 Bootstrap встроен в `.exe`. ## Чего пока нет в лаунчере - Готовых пресетов оптимизации JVM (настраиваются Java и выделенная память) - Поддержки Quilt, LabyMod и других лоадеров - Кастомных модов (UI, спавнеры, DPI, карточки) - Сайта для лаунчера и сервера (текущий требует переделки) - Трекинга наигранного времени (обновление раз в час вместо минуты) ## Что планируется доработать в ближайшее время - **UI мод** — переписать мод на UI: красивое главное меню, анимации, анимированный задний фон, эмбиент звуки, интерактивность, урезание ванильных элементов до используемых - **GUI мод** — привести в единый стиль с главным меню - **Мод на спавнеры** — кастомные спавнеры с лимитами (5-15 спавнов), отслеживание спавнов вокруг, замена на базовый спавнер при достижении предела с эффектами и звуками, данжи «временного парадокса» с процедурной генерацией этажей, минибоссы, лут - **DPI мод** — отслеживание не-ZernMC лаунчеров, защита от форков с выпиленной проверкой, уведомления админу в Telegram с технической информацией - **Сайт** — полноценный сайт для лаунчера и сервера - **Система карточек** — дроп случайных карточек (обучена на датасете скинов CS2), просмотр, продажа, крафт, обмен между игроками, внутриигровая валюта «йоны», начисление йонов на баланс, обмен йонов на предметы, вывод йонов в отдельный предмет, анимации и эффекты - **Web API** — OpenAPI документация, уровни доступа к API (например, получение списка игроков требует проходку) - **Трекинг наигранного времени** — обновление каждую минуту вместо часа для нормальных графиков игроков - Генерацию команды запуска Minecraft - Стабильную работу автообновления лаунчера - Полноценные настройки - **Улучшенный античит / ClientChecker** — проверка подлинности клиента при подключении к серверу, без нужного клиента не пустит; поставляется вместе с лаунчером, не общедоступный. Хеш-проверка всех папок и файлов сборки при каждом запуске — при несовпадении одного хеша все моды переустанавливаются. Игнорируются только: логи, ресурспаки, шейдеры, сейвы, личные файлы. Защита от подмены libs и лоадеров (Meteor и аналоги), проверка целостности модов через хеши. В перспективе — защита от Mixin-атак (перехват логики других модов), сбор отчёта о текущей сборке и сравнение с базовой - **Баг-фиксы сервера:** подключить `admin_router` в `main.py`, исправить импорты ролей (`ROLE_USER` и др. не существуют в `roles.py`), добавить эндпоинт `/auth/pass/activate`, убрать дубли импортов (`TTLCache`, `Response`) - Улучшение прокси-режима - Стабильность и производительность серверной части - Общую надёжность загрузки файлов с сервера ## Важная информация перед использованием ### Управление в лаунчере (TUI) Консольные версии (`zernmc-cli.exe`, а также режим `--cli`) используют **текстовый интерфейс (TUI)**: - `W` / `S` (или `Ц` / `Ы`) или `↑` / `↓` — перемещение по меню - `ENTER` — выбор пункта - `ESC` или пункт «Назад» — возврат назад Если вы случайно кликнули мышкой в окне лаунчера и он «заморозился» — просто нажмите **любую клавишу** на клавиатуре. Основная версия `zernmc.exe` запускает графический интерфейс JavaFX. ### Расположение сборок Все установленные сборки хранятся в папке: - **Windows**: `%USERPROFILE%\.zernmc\instances` - **Linux**: `~/.zernmc\instances` Если сборка не удаляется корректно — удалите папку вручную. ### Логи Логи лаунчера пишутся в файл `latest.log` рядом с исполняемым файлом; старые логи архивируются в `.log.gz` (в стиле Minecraft). ## Как скачать и запустить **Скачать лаунчер (выбери один):** - **Онлайн-установщик (рекомендуется)** — `ZernMC-Online-Setup.exe` (~5.7М, Go, без Java): скачай → выбери папку установки (по умолчанию `C:\ZernMC`) → [x] Создать ярлык ZernMC Launcher на рабочем столе → Установить. Первый запуск докачает JRE 47М + файлы лаунчера 50М. Данные сборок `~/.zernmc` остаются в профиле пользователя. Деинсталляция — `C:\ZernMC\uninstall.exe` или удаление папки. - **Оффлайн ZIP** — `ZernMC-win-<версия>.zip` (98М, с JRE): скачай → выбери папку куда распаковать (диалог в `ZernMC-Offline-Setup.exe` или вручную) → [x] Ярлык → готово. Для air-gapped. **Зеркала (оба варианта):** - https://api.zern.cc/launcher/download/jre — JRE для онлайн - https://api.zernmc.ru/launcher/download/latest / https://api.zernmc.online/launcher/download/latest — ZIP **Инструкция (оба):** 1. Скачай online exe **или** offline zip 2. Запусти установщик → выбери папку (по умолчанию `C:\ZernMC`, можно `D:\Games\ZernMC`) → ярлык 3. Запусти `zernmc.exe` (или `zernmc-cli.exe`) из папки установки 4. Войди в аккаунт и нажми **«Начать игру»** ### Установка первой сборки Если у вас ещё нет сборок: 1. Выберите **«Установить новую сборку»** 2. Выберите тип сборки: - **ZernMC** — готовые сборки с нашего сервера - **Модовый загрузчик** — Fabric / Forge / NeoForge - **Ваниль** — чистая версия от Mojang **Рекомендация:** Не используйте кириллицу в названии сборки! (science 1.0.0-1.0.5) ## Возможные проблемы и решения ### «Error: Invalid or corrupt jarfile» при запуске exe Перекачайте архив целиком из https://api.zernmc.ru/launcher/download/latest и распакуйте заново — старые версии (до 1.0.16.17) были повреждены подписью и не запускаются. ### Проблемы с загрузкой ассетов Иногда лаунчер неправильно определяет Asset Index. **Решение:** 1. Запустите версию и посмотрите в логах, какой `.json` файл он пытается загрузить. 2. Скопируйте правильный файл из `assets/indexes/` и переименуйте его в нужное имя. ### Forge / NeoForge Работает через установщики лоадеров. Если у вас нет внешнего доступа к Maven-репозиториям — используйте прокси-режим. ### Прокси-режим Если нет доступа к Fabric/Forge Maven или серверам Mojang — лаунчер пытается использовать наш сервер как прокси. Если и к нему нет доступа — загрузка может не работать. ## Как сообщить об ошибке (Issue) 1. Скопируйте весь текст ошибки из логов (`latest.log`) 2. Укажите, что вы делали перед ошибкой 3. Укажите версию лаунчера 4. Создайте Issue на GitHub ## Разработка (для желающих помочь) ```bash git clone https://github.com/SashegDev/launcher ``` Откройте `launcher/launcher/pom.xml` отредактируйте пути для билда, так как сейчас - он рассчитан на разработку только на своём сервере ```bash mvn clean package ``` можете начинать! **Сборка exe на Linux требует:** `jsign` (`~/tools/jsign/jsign.jar`), файлы сертификата в `/root/cert/codesign/`, встроенный JRE в `~/launcher/jre/jre21`. ### Благодарность - Glitch135 — за бета-тест лаунчера и фидбеки Буду рад помощи в разработке! Особенно приветствуется помощь с: - Улучшением генерации команды запуска - Добавлением поддержки Quilt / LabyMod - Стабилизацией серверной части - Вообще улучшением клиента