v1.0.16.17 — re-embed bootstrap jar, switch exe signing to jsign

This commit is contained in:
SashegDev
2026-08-19 14:49:55 +00:00
parent ee7f3812b6
commit 53c00a6414
3 changed files with 107 additions and 81 deletions
+50 -33
View File
@@ -8,32 +8,44 @@
- Написан полностью с нуля, без использования готовых решений - Написан полностью с нуля, без использования готовых решений
- Удобная загрузка и обновление сборок прямо с сервера ZernMC - Удобная загрузка и обновление сборок прямо с сервера ZernMC
- Чистый и относительно читаемый код как клиента, так и сервера - Чистый и относительно читаемый код как клиента, так и сервера
- Поддержка **прокси-режима** через свой сервер при проблемах с внешними ресурсами (Fabric/Forge Maven, Mojang и т.д.) - Графический интерфейс на **JavaFX** (по умолчанию) + **TUI** (режим `--cli`)
- Возможность запуска клиента даже без графического интерфейса (TUI-режим) - Поддержка **прокси-режима** через свой сервер при проблемах с внешними ресурсами (Fabric/Forge Maven, Mojang и т.д.), обход блокировок через выбор домена и SNI
- Поддержка загрузчиков **Fabric**, **Forge**, **NeoForge** и ванильных версий (установка через встроенный JRE)
- Ротационные логи в стиле Minecraft: `latest.log` + архивы `.log.gz`
- Инкрементальное обновление JavaFX и автообновление лаунчера
- Подпись exe самоподписным сертификатом Zern.cc (jsign/Authenticode)
- Полное отсутствие рекламы и телеметрии - Полное отсутствие рекламы и телеметрии
- Не собирает никаких данных о пользователе - Не собирает никаких данных о пользователе
- Работает «из коробки»: достаточно распаковать архив и запустить `ZernMCLauncher.exe` - Работает «из коробки»: достаточно распаковать архив и запустить `zernmc.exe`
- Есть система аккаунтов и проходок - Есть система аккаунтов и проходок
## Состав дистрибутива
В архиве `ZernMC-win-<версия>.zip`:
- `zernmc.exe` — основная версия с GUI (JavaFX)
- `zernmc-cli.exe` — консольная версия (TUI)
- `zernmc-cli-jfx.exe` — консоль + JavaFX UI
- `lib/jre21` — встроенный JRE 21
- `lib/javafx` — модули JavaFX 23.0.1
Bootstrap-модуль встроен прямо в `.exe`, отдельный jar рядом не нужен.
## Чего пока нет в лаунчере ## Чего пока нет в лаунчере
- Графического интерфейса (GUI) — только TUI - Готовых пресетов оптимизации JVM (настраиваются Java и выделенная память)
- Нормальных настроек (пока доступна только настройка Java и выделенной оперативной памяти) - Поддержки Quilt, LabyMod и других лоадеров
- Поддержки **Forge** (в разработке)
- Поддержки Quilt, LabyMod, NeoForge и других лоадеров
- Раздела новостей об обновлениях Minecraft и лаунчера
- Выбора готовых пресетов оптимизации JVM
- Кастомных модов (UI, спавнеры, DPI, карточки) - Кастомных модов (UI, спавнеры, DPI, карточки)
- Сайта для лаунчера и сервера - Сайта для лаунчера и сервера (текущий требует переделки)
- Трекинга наигранного времени - Трекинга наигранного времени (обновление раз в час вместо минуты)
## Что планируется доработать в ближайшее время ## Что планируется доработать в ближайшее время
- **UI мод** — переписать мод на UI: красивое главное меню, анимации, анимированный задний фон, эмбиент звуки, интерактивность, урезание ванильных элементов до используемых - **UI мод** — переписать мод на UI: красивое главное меню, анимации, анимированный задний фон, эмбиент звуки, интерактивность, урезание ванильных элементов до используемых
- **GUI мод** — привести в единый стиль с главным меню - **GUI мод** — привести в единый стиль с главным меню
- **Мод на спавнеры** — кастомные спавнеры с лимитами (5-15 спавнов), отслеживание спавнов вокруг, замена на базовый спавнер при достижении предела с эффектами и звуками, данжи «временного парадокса» с процедурной генерацией этажей, минибоссы, лут - **Мод на спавнеры** — кастомные спавнеры с лимитами (5-15 спавнов), отслеживание спавнов вокруг, замена на базовый спавнер при достижении предела с эффектами и звуками, данжи «временного парадокса» с процедурной генерацией этажей, минибоссы, лут
- **DPI мод** — отслеживание не-ZernMC лаунчеров, защита от форков с выпеленной проверкой, уведомления админу в Telegram с технической информацией - **DPI мод** — отслеживание не-ZernMC лаунчеров, защита от форков с выпиленной проверкой, уведомления админу в Telegram с технической информацией
- **Сайт** — полноценный сайт для лаунчера и сервера (текущий «полу-живой» нуждается в полной переделке) - **Сайт** — полноценный сайт для лаунчера и сервера
- **Система карточек** — дроп случайных карточек (обучена на датасете скинов CS2), просмотр, продажа, крафт, обмен между игроками, внутриигровая валюта «йоны», начисление йонов на баланс, обмен йонов на предметы, вывод йонов в отдельный предмет, анимации и эффекты - **Система карточек** — дроп случайных карточек (обучена на датасете скинов CS2), просмотр, продажа, крафт, обмен между игроками, внутриигровая валюта «йоны», начисление йонов на баланс, обмен йонов на предметы, вывод йонов в отдельный предмет, анимации и эффекты
- **Web API** — OpenAPI документация, уровни доступа к API (например, получение списка игроков требует проходку) - **Web API** — OpenAPI документация, уровни доступа к API (например, получение списка игроков требует проходку)
- **Трекинг наигранного времени** — обновление каждую минуту вместо часа для нормальных графиков игроков - **Трекинг наигранного времени** — обновление каждую минуту вместо часа для нормальных графиков игроков
@@ -50,7 +62,7 @@
### Управление в лаунчере (TUI) ### Управление в лаунчере (TUI)
Лаунчер использует **текстовый интерфейс (TUI)**: Консольные версии (`zernmc-cli.exe`, а также режим `--cli`) используют **текстовый интерфейс (TUI)**:
- `W` / `S` (или `Ц` / `Ы`) или `↑` / `↓` — перемещение по меню - `W` / `S` (или `Ц` / `Ы`) или `↑` / `↓` — перемещение по меню
- `ENTER` — выбор пункта - `ENTER` — выбор пункта
@@ -58,17 +70,23 @@
Если вы случайно кликнули мышкой в окне лаунчера и он «заморозился» — просто нажмите **любую клавишу** на клавиатуре. Если вы случайно кликнули мышкой в окне лаунчера и он «заморозился» — просто нажмите **любую клавишу** на клавиатуре.
Основная версия `zernmc.exe` запускает графический интерфейс JavaFX.
### Расположение сборок ### Расположение сборок
Все установленные сборки хранятся в папке: Все установленные сборки хранятся в папке:
- **Windows**: `%USERPROFILE%\.zernmc\instances` - **Windows**: `%USERPROFILE%\.zernmc\instances`
- **Linux**: `~/.zernmc/instances` - **Linux**: `~/.zernmc\instances`
Если сборка не удаляется корректно — удалите папку вручную. Если сборка не удаляется корректно — удалите папку вручную.
### Логи
Логи лаунчера пишутся в файл `latest.log` рядом с исполняемым файлом; старые логи архивируются в `.log.gz` (в стиле Minecraft).
## Как скачать и запустить ## Как скачать и запустить
Пока автообновления и GitHub Releases не настроены, скачать последнюю версию можно по ссылкам: Скачать последнюю версию можно по ссылкам:
**Скачать лаунчер:** **Скачать лаунчер:**
- https://api.zernmc.ru/launcher/download/latest - https://api.zernmc.ru/launcher/download/latest
@@ -76,9 +94,9 @@
**Инструкция:** **Инструкция:**
1. Скачайте zip-архив 1. Скачайте zip-архив
2. Распакуйте в удобную папку 2. Распакуйте в удобную папку (например `C:\ZernMC`)
3. Запустите `ZernMCLauncher.exe` 3. Запустите `zernmc.exe` (или `zernmc-cli.exe` для консольного режима)
4. Нажмите **«Начать игру»** 4. Войдите в аккаунт и нажмите **«Начать игру»**
### Установка первой сборки ### Установка первой сборки
@@ -86,28 +104,31 @@
1. Выберите **«Установить новую сборку»** 1. Выберите **«Установить новую сборку»**
2. Выберите тип сборки: 2. Выберите тип сборки:
- **ZernMC** — готовые сборки с нашего сервера - **ZernMC** — готовые сборки с нашего сервера
- **Модовый загрузчик** — Fabric / Forge / Quilt и т.д. - **Модовый загрузчик** — Fabric / Forge / NeoForge
- **Ваниль** — чистая версия от Mojang - **Ваниль** — чистая версия от Mojang
**Рекомендация:** Не используйте кириллицу в названии сборки! (science 1.0.0-1.0.5) **Рекомендация:** Не используйте кириллицу в названии сборки! (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. Иногда лаунчер неправильно определяет Asset Index.
**Решение:** **Решение:**
1. Запустите версию и посмотрите в логах, какой `.json` файл он пытается загрузить. 1. Запустите версию и посмотрите в логах, какой `.json` файл он пытается загрузить.
2. Скопируйте правильный файл из `assets/indexes/` и переименуйте его в нужное имя. 2. Скопируйте правильный файл из `assets/indexes/` и переименуйте его в нужное имя.
### Forge версии ### Forge / NeoForge
Запуск Forge пока работает нестабильно. Рекомендуется дождаться исправления генерации команды запуска. Работает через установщики лоадеров. Если у вас нет внешнего доступа к Maven-репозиториям — используйте прокси-режим.
### Прокси-режим ### Прокси-режим
Если нет доступа к Fabric/Forge Maven или серверам Mojang — лаунчер пытается использовать наш сервер как прокси. Если и к нему нет доступа — загрузка может не работать. Если нет доступа к Fabric/Forge Maven или серверам Mojang — лаунчер пытается использовать наш сервер как прокси. Если и к нему нет доступа — загрузка может не работать.
## Как сообщить об ошибке (Issue) ## Как сообщить об ошибке (Issue)
1. Скопируйте весь текст ошибки из логов (лаунчер не очищает экран, поэтому просто скролльте вверх) 1. Скопируйте весь текст ошибки из логов (`latest.log`)
2. Укажите, что вы делали перед ошибкой 2. Укажите, что вы делали перед ошибкой
3. Укажите версию лаунчера 3. Укажите версию лаунчера
4. Создайте Issue на GitHub 4. Создайте Issue на GitHub
@@ -118,25 +139,21 @@
git clone https://github.com/SashegDev/launcher git clone https://github.com/SashegDev/launcher
``` ```
Откройте `launcher/launcher/pom.xml` Откройте `launcher/launcher/pom.xml`
отредактируете пути для билда, так как сейчас - он расчитан на разработку только на моём сервере отредактируйте пути для билда, так как сейчас - он рассчитан на разработку только на своём сервере
```bash ```bash
mvn clean package mvn clean package
``` ```
можете начинать! можете начинать!
**Сборка exe на Linux требует:** `jsign` (`~/tools/jsign/jsign.jar`), файлы сертификата в `/root/cert/codesign/`, встроенный JRE в `~/launcher/jre/jre21`.
### Благодарность ### Благодарность
Glitch135 - За бета-тест лаунчера и фидбеки - Glitch135 — за бета-тест лаунчера и фидбеки
### помощь
Я был бы рад если нашлись люди кто мог бы помочь в разработке лаунчера и добавления к нему хотя бы базового UI чтоб было намногл удобнее работать с ним
Буду рад помощи в разработке! Буду рад помощи в разработке!
Особенно приветствуется помощь с: Особенно приветствуется помощь с:
- Переходом на нормальный графический интерфейс (GUI)
- Улучшением генерации команды запуска - Улучшением генерации команды запуска
- Добавлением поддержки Forge / NeoForge / Quilt - Добавлением поддержки Quilt / LabyMod
- Стабилизацией серверной части - Стабилизацией серверной части
- вообще улучшением клиента - Вообще улучшением клиента
+51 -42
View File
@@ -159,7 +159,10 @@
<icon>${project.basedir}/src/main/icons/zernmc.ico</icon> <icon>${project.basedir}/src/main/icons/zernmc.ico</icon>
<headerType>gui</headerType> <headerType>gui</headerType>
<dontWrapJar>false</dontWrapJar> <dontWrapJar>false</dontWrapJar>
<mainClass>me.sashegdev.zernmc.launcher.Bootstrap</mainClass> <classPath>
<mainClass>me.sashegdev.zernmc.launcher.Bootstrap</mainClass>
<addDependencies>false</addDependencies>
</classPath>
<cmdLine>--jfx</cmdLine> <cmdLine>--jfx</cmdLine>
<jre> <jre>
<path>lib/jre21</path> <path>lib/jre21</path>
@@ -191,7 +194,10 @@
<jar>../../server/builds/zernmc-bootstrap.jar</jar> <jar>../../server/builds/zernmc-bootstrap.jar</jar>
<headerType>console</headerType> <headerType>console</headerType>
<dontWrapJar>false</dontWrapJar> <dontWrapJar>false</dontWrapJar>
<mainClass>me.sashegdev.zernmc.launcher.Bootstrap</mainClass> <classPath>
<mainClass>me.sashegdev.zernmc.launcher.Bootstrap</mainClass>
<addDependencies>false</addDependencies>
</classPath>
<cmdLine>--cli</cmdLine> <cmdLine>--cli</cmdLine>
<jre> <jre>
<path>lib/jre21</path> <path>lib/jre21</path>
@@ -223,7 +229,10 @@
<jar>../../server/builds/zernmc-bootstrap.jar</jar> <jar>../../server/builds/zernmc-bootstrap.jar</jar>
<headerType>console</headerType> <headerType>console</headerType>
<dontWrapJar>false</dontWrapJar> <dontWrapJar>false</dontWrapJar>
<mainClass>me.sashegdev.zernmc.launcher.Bootstrap</mainClass> <classPath>
<mainClass>me.sashegdev.zernmc.launcher.Bootstrap</mainClass>
<addDependencies>false</addDependencies>
</classPath>
<cmdLine>--jfx</cmdLine> <cmdLine>--jfx</cmdLine>
<jre> <jre>
<path>lib/jre21</path> <path>lib/jre21</path>
@@ -315,59 +324,59 @@
<!-- Подпись экзешников самоподписным сертификатом Zern.cc (publisher: ZernMC Launcher) --> <!-- Подпись экзешников самоподписным сертификатом Zern.cc (publisher: ZernMC Launcher) -->
<exec executable="osslsigncode" failonerror="true"> <loadfile property="pfxpass" srcFile="/root/cert/codesign/.pfxpass">
<arg value="sign"/> <filterchain>
<arg value="-pkcs12"/> <striplinebreaks/>
</filterchain>
</loadfile>
<exec executable="java" failonerror="true">
<arg value="-jar"/>
<arg value="${user.home}/tools/jsign/jsign.jar"/>
<arg value="--keystore"/>
<arg value="/root/cert/codesign/zerncc.pfx"/> <arg value="/root/cert/codesign/zerncc.pfx"/>
<arg value="-readpass"/> <arg value="--storepass"/>
<arg value="/root/cert/codesign/.pfxpass"/> <arg value="${pfxpass}"/>
<arg value="-h"/> <arg value="--alias"/>
<arg value="sha256"/> <arg value="1"/>
<arg value="-ts"/> <arg value="--tsaurl"/>
<arg value="http://timestamp.digicert.com"/> <arg value="http://timestamp.digicert.com"/>
<arg value="-in"/> <arg value="--alg"/>
<arg value="SHA-256"/>
<arg value="../../server/builds/zernmc.exe"/> <arg value="../../server/builds/zernmc.exe"/>
<arg value="-out"/>
<arg value="../../server/builds/zernmc.signed.exe"/>
</exec> </exec>
<move file="../../server/builds/zernmc.signed.exe"
tofile="../../server/builds/zernmc.exe" overwrite="true"/>
<exec executable="osslsigncode" failonerror="true"> <exec executable="java" failonerror="true">
<arg value="sign"/> <arg value="-jar"/>
<arg value="-pkcs12"/> <arg value="${user.home}/tools/jsign/jsign.jar"/>
<arg value="--keystore"/>
<arg value="/root/cert/codesign/zerncc.pfx"/> <arg value="/root/cert/codesign/zerncc.pfx"/>
<arg value="-readpass"/> <arg value="--storepass"/>
<arg value="/root/cert/codesign/.pfxpass"/> <arg value="${pfxpass}"/>
<arg value="-h"/> <arg value="--alias"/>
<arg value="sha256"/> <arg value="1"/>
<arg value="-ts"/> <arg value="--tsaurl"/>
<arg value="http://timestamp.digicert.com"/> <arg value="http://timestamp.digicert.com"/>
<arg value="-in"/> <arg value="--alg"/>
<arg value="SHA-256"/>
<arg value="../../server/builds/zernmc-cli.exe"/> <arg value="../../server/builds/zernmc-cli.exe"/>
<arg value="-out"/>
<arg value="../../server/builds/zernmc-cli.signed.exe"/>
</exec> </exec>
<move file="../../server/builds/zernmc-cli.signed.exe"
tofile="../../server/builds/zernmc-cli.exe" overwrite="true"/>
<exec executable="osslsigncode" failonerror="true"> <exec executable="java" failonerror="true">
<arg value="sign"/> <arg value="-jar"/>
<arg value="-pkcs12"/> <arg value="${user.home}/tools/jsign/jsign.jar"/>
<arg value="--keystore"/>
<arg value="/root/cert/codesign/zerncc.pfx"/> <arg value="/root/cert/codesign/zerncc.pfx"/>
<arg value="-readpass"/> <arg value="--storepass"/>
<arg value="/root/cert/codesign/.pfxpass"/> <arg value="${pfxpass}"/>
<arg value="-h"/> <arg value="--alias"/>
<arg value="sha256"/> <arg value="1"/>
<arg value="-ts"/> <arg value="--tsaurl"/>
<arg value="http://timestamp.digicert.com"/> <arg value="http://timestamp.digicert.com"/>
<arg value="-in"/> <arg value="--alg"/>
<arg value="SHA-256"/>
<arg value="../../server/builds/zernmc-cli-jfx.exe"/> <arg value="../../server/builds/zernmc-cli-jfx.exe"/>
<arg value="-out"/>
<arg value="../../server/builds/zernmc-cli-jfx.signed.exe"/>
</exec> </exec>
<move file="../../server/builds/zernmc-cli-jfx.signed.exe"
tofile="../../server/builds/zernmc-cli-jfx.exe" overwrite="true"/>
<!-- Создаём README --> <!-- Создаём README -->
<echo file="../../server/builds/README.txt"> <echo file="../../server/builds/README.txt">
+1 -1
View File
@@ -20,7 +20,7 @@
<properties> <properties>
<revision>1.0.16</revision> <revision>1.0.16</revision>
<hotfix>16</hotfix> <hotfix>17</hotfix>
<maven.compiler.source>21</maven.compiler.source> <maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target> <maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>