PixelLauncher 2.1.0 — стабильная сборка

Офлайн-лаунчер Minecraft: аккаунты без Microsoft, установка версий и лоадеров
(Fabric, Quilt, Forge, NeoForge), каталог модпаков Modrinth, поиск и обновление
модов, разбор вылетов, системный трей, автозагрузка, плагины, прокси и зеркала.
This commit is contained in:
kosta2014p committed 2026-10-18 22:44:19 +07:00
commit ec6f13ddcc
33 files changed
+10445

No files matched your search

+215
View File
@@ -0,0 +1,215 @@
# PixelLauncher
Компактный оффлайн-лаунчер Minecraft в стиле **LiteLauncher**: тёмное минималистичное окно, пиксельный пейзаж-баннер, большая зелёная кнопка «ИГРАТЬ» и пилюля с версией.
## Возможности
- **Оффлайн-режим** — ник + сгенерированный по правилам Mojang UUID
- **Менеджер аккаунтов** — несколько ников, клик по нику в шапке для быстрого
переключения, управление в «Аккаунты…»
- **Все версии** из официального манифеста Mojang (920+): релизы, снапшоты, старые версии
- **Лента новостей** — последние версии прямо на главном экране (клик выбирает версию)
- **Fabric и Quilt** — установка модлоадера одной кнопкой
(меню → «Установить Fabric/Quilt…»): скачивается JSON профиля, файлы
лоадера докачиваются при первом запуске
- **Автодокачка** client jar, библиотек, нативов и ассетов с проверкой SHA-1 (многопоточно)
- **Отмена загрузки** — кнопка «■ ОТМЕНА» под статусом во время докачки
- **Зеркала скачивания** — если официальные серверы Mojang плохо грузятся,
укажите зеркала в настройках (по одному в строке)
- **Автозагрузка Java** — если подходящей Java нет, лаунчер сам скачает JRE
с Eclipse Adoptium (~45 МБ) в `.launcher/runtime/` и запустит игру
- **Детектор вылетов** — при ненулевом коде завершения журнал открывается сам
и показывает хвост лога с ошибкой
- **Живой лог игры** — вывод игры течёт в окно «Журнал» в реальном времени
- **Очистка версий** — меню → «Очистка версий…»: размер каждой установленной
версии, удаление ненужных и подчистка неиспользуемых ассетов
- **Моды** — меню → «Моды…»: список установленных модов с включением/выключением
(переименование в `mods-disabled`), удалением и поиском в **Modrinth**
(нужен только стандартный HTTP) — установка одной кнопкой под текущую
версию и загрузчик
- **Импорт модпаков** `.mrpack` (CurseForge/Modrinth-пакеты): скачивание файлов
по индексу, раскладка оверрайдов, проверка путей
- **Обновления модов** — в «Моды…» кнопка «Проверить обновления»: включённые
моды сверяются с Modrinth по SHA-1 (батчи через `POST /version_files`),
свежие версии скачиваются, старый jar отключается в `.disabled`
- **Разбор вылетов** — после аварийного завершения журнал сам называет причину:
нехватка ОЗУ (с подсказкой `-Xmx`), проблема с Java, исключение (корневое
`Caused by`) и виновный мод — с вопросом «Отключить его?»
- **Профили запуска** — меню → «Профили…»: несколько профилей (ник, версия,
ОЗУ, полный экран и по желанию набор включённых модов), переключение
одной кнопкой, имя активного профиля в пилюле
- **Миры и копии** — меню → «Миры и копии…»: список миров с размером и датой,
ZIP-копия по одному миру с капом последних копий (настраивается),
удаление копий и миров, быстрый переход в папку копий
- **Избранные версии** — ★ в диалоге версий закрепляет версию сверху,
фильтр «только избранные», частые (по статистике запусков) поднимаются
вверх списка
- **Трей** — свёртывание в трей (иконка в области уведомлений), плашки о
статусе запуска/вылета, контекстное меню с командами лаунчера
- **История и статистика** — меню → «История…»: сколько раз запускалась каждая
версия, суммарное и последнее время игры, сводка вылетов
- **Прокси** — настройки → сеть: HTTP и SOCKS5 (с авторизацией), проверка
соединения кнопкой
- **Настройки запуска игры** — профиль: пресеты JVM (мало RAM / быстро /
безопасно / чисто / для Fabric), разрешение и полный экран, окно игры
- **Архив логов** — окно «Журнал» показывает сеанс и все прошлые
`game-*.log` с поиском по тексту (Ctrl+F, «только ошибки»)
- **Скин** — предпросмотр фронтального вида по нику (кэш mc-heads.net) или
своё фото (PNG 64×64), кнопка рядом с ником
- **Сцены баннера** — день / ночь / незер / пещера или случайная при каждом
открытии (меню → «Сцена баннера»)
- **Масштаб интерфейса** 100/125/150% (настройки), ярлык текущей версии на
рабочем столе, экспорт/импорт настроек в JSON
- **Быстрые повторные запуски** — см. раздел «Скорость»
- **Проверка целостности** — меню → «Проверить файлы игры…» (полный пересчёт SHA-1)
- **Наследование версий** (`inheritsFrom`), виртуальные ассеты для старых версий
- **Автоподбор Java** под конкретную версию игры (PATH, JAVA_HOME, Program Files, ~/.jdks, /usr/lib/jvm)
- **Профиль**: ник, ОЗУ (или «авто» по памяти системы), Java, JVM-аргументы
- **Резервная копия миров** в ZIP
- **Выбор версии** в отдельном диалоге: поиск-фильтр, даты релиза, отметка
снапшотов и локальных (Fabric/Quilt) версий
- **Язык интерфейса RU/EN** — переключается в настройках
- **Акцентный цвет** — пять вариантов в настройках
- **Окно можно менять по размеру** — захват за «◢» в правом нижнем углу
- **Быстрый доступ к папкам** — игры, миров и скриншотов прямо из меню
- **Журнал** с цветными сообщениями (успех/ошибка/предупреждение) и Ctrl+C для копирования
- **Лог запуска игры** — полный вывод пишется в `.launcher/logs/game-*.log`
- **Автообновление лаунчера** — меню → «Проверить обновление лаунчера…» и
тихая проверка при старте: манифест `/update.json`, скачивание установщика
с проверкой SHA-256, запуск обновления в один клик
- **Своё зеркало API** — запросы к Modrinth и манифесту Mojang идут через
прокси на VPS; при сбое зеркало отключается до конца сессии и запрос уходит
напрямую, на официальный путь
- Без сторонних библиотек — только tkinter
## Запуск
```
python main.py
```
Или двойной клик по `run.bat` (Windows).
Требуется Python 3.8+ с tkinter. Дополнительные библиотеки ставить **не нужно**.
### Сборка установщика
```
python make_installer.py
```
Собирает `PixelLauncherSetup<версия>.exe` прямо в папке проекта. Внутри —
embeddable Python той же версии + заимствованный tkinter/Tcl, приложение и
иконка; установка в `%LOCALAPPDATA%\PixelLauncher` без прав администратора
(скрипт `installer.iss`, нужен Inno Setup 6 с `ISCC.exe`). Версия в
`installer.iss` должна совпадать с `LAUNCHER_VERSION`; после новой сборки
обновите файл и `update.json` на сервере.
## Плагины и протокол
- **Плагины** — файлы Python в папке `plugins` рядом с `main.py`:
константы `PLUGIN_NAME/VERSION/AUTHOR/DESCRIPTION`, функция `on_load(api)`
(подписки `api.on(...)`, кнопки `api.add_action(...)`) и необязательный
`on_unload()`. События: `launcher_ready`, `before_launch`,
`after_launch`, `game_exit`, `profile_switched`, `account_switched`,
`launcher_closing`. Своё json-хранилище плагина — `plugins/storage/`.
Управление: меню ⚙ → «Плагины…» (пересканирование, удаление) и
«Магазин плагинов…» (каталог с сайта).
- **Протокол `pixellauncher://`** — ссылки с сайта: `plugin/<файл.py>`
ставит плагин из магазина, `mrpack/<url>` скачивает и импортирует
модпак. Ключи HKCU пишет установщик; если лаунчер уже открыт, ссылка
уходит в очередь и обрабатывается работающей копией.
- Формат плагинов совпадает с верстаком на сайте (`/constructor`);
каталог магазина — `/plugins/catalog.json`.
## Скорость
Повторные запуски не тратят время на лишнюю работу:
- **Манифест версий** (около 1.5 МБ) не перекачивается каждый раз: свежий кэш
(до 1 часа) читается с диска — загрузка списка занимает ~0.1 с вместо ~2 с.
«Обновить список версий» в диалоге принудительно ходит в сеть.
- **JSON версии** кэшируется на 6 часов и не качается заново при каждом запуске.
- **Проверка уже скачанных файлов** — по размеру (один `stat` на файл) вместо
полного чтения и пересчёта SHA-1. Для версии с 3000+ ассетов это секунды
на каждом старте. Полная проверка SHA-1 — по запросу:
меню → «Проверить файлы игры…».
- **Обнаружение Java** кэшируется (`.launcher/java_cache.json`): `java -version`
прогоняется по кандидатам один раз, повторные запуски берут версию из кэша.
- **Нативы** распаковываются один раз: повторная распаковка пропускается, пока
natives-jar'ы не изменились (сигнатура в `.stamp`).
- **Загрузка файлов** — до 32 параллельных потоков, прогресс обновляется по
мере готовности каждого файла.
## Интерфейс
- **Верхняя панель**: логотип, ник (клик — переключение аккаунтов),
шестерёнка — меню (профиль, профили запуска, аккаунты, версии, Fabric/Quilt,
копия, миры и копии, плагины, магазин плагинов, скачивание, очистка, папки,
журнал, настройки, о программе)
- **Баннер**: пиксельный пейзаж с заголовком PIXEL LAUNCHER, тянется на всю
ширину окна; сцена переключается в меню (день/ночь/незер/пещера/random)
- **ИГРАТЬ** — большая зелёная кнопка с анимацией нажатия
(цвет = акцентный цвет из настроек)
- **Пилюля** `Minecraft <версия>` — клик открывает список версий
- **Лента «Последние версии»** — 3 свежие версии из манифеста, клик выбирает версию
- Внизу — тонкая полоса прогресса и строка статуса; во время загрузки под
статусом появляется кнопка отмены
- Кнопка «—» сворачивает лаунчер в трей (кнопка «×» закрывает)
- Диалоги со списком версий идут в тёмном оформлении (Windows 10/11)
Все файлы игры хранятся в `.minecraft` рядом с лаунчером (меню → Настройки).
## Структура
```
main.py точка входа
launcher/
ui.py интерфейс: окно, баннер, диалоги
config.py настройки (settings.json), аккаунты, зеркала
i18n.py перевод интерфейса (RU/EN)
manifest.py манифест версий Mojang + кэш, локальные версии
version.py разбор JSON версии, classpath, аргументы
downloader.py докачка библиотек/ассетов, зеркала, отмена, нативы
java.py поиск и выбор Java
java_fetch.py автозагрузка JRE с Eclipse Adoptium
mods.py установщик Fabric/Quilt + менеджер модов, обновления
modrinth.py поиск и установка модов с Modrinth API (+ POST /version_files)
mrpack.py импорт модпаков .mrpack
crash.py разбор логов вылетов: причина и виновный мод
worlds.py список миров, ZIP-копии с капом, удаление
stats.py история запусков и статистика игры
tray.py иконка в трей, меню и плашки (Windows)
launch.py оффлайн-UUID, запуск, живой лог, код завершения
http.py HTTP-хелперы: повторы, SHA-1, прогресс, отмена, прокси,
зеркала API (одна попытка через зеркало, затем напрямую)
selfupdate.py автообновление: манифест /update.json, SHA-256, установщик
onboarding.py мастер первого запуска: язык, ник, ОЗУ
plugins.py плагины: загрузка .py, события, API, хранилище, магазин
protocol.py протокол pixellauncher:// и одна живая копия лаунчера
```
## Примечания
- Работает только оффлайн-режим Minecraft (серверы в offline-режиме).
- Java: 1.20.5+ → Java 21+, 1.16–1.20 → Java 17+, 1.12–1.16 → Java 8/11.
Лаунчер подберёт подходящую автоматически, а если Java не найдена —
скачает её с Eclipse Adoptium и положит в `.launcher/runtime/`.
- Лента новостей собирается из манифеста версий Mojang
(официальные RSS-эндпоинты minecraft.net закрыты).
- Зеркала скачивания задаются в настройках (по одному URL в строке);
SHA-1 у файлов одинаков на любых зеркалах, проверка не меняется.
- Прокси (HTTP/SOCKS5) применяется ко всем запросам лаунчера, включая
загрузку файлов игры, поиск модов и установку модпаков.
- Манифест автообновления и зеркала API живут на VPS и доступны по домену:
база обновлений — `https://pixellauncher.ru` (`UPDATE_BASE` в
`selfupdate.py`), зеркала — `https://pixellauncher.ru/proxy/…`. HTTPS
выпущен Let's Encrypt (certbot), автопродление — snap-таймер certbot.
- Установленный лаунчер не пишет в системные папки: файлы игры, `settings.json`
и сам лаунчер лежат в `%LOCALAPPDATA%\PixelLauncher`, деинсталлятор не
трогает `.minecraft` и журналы.
- При первом запуске показывается мастер первоначальной настройки (язык,
ник, ОЗУ) — `launcher/onboarding.py`. Он закрывается кнопкой
«Пропустить настройку», после чего не появляется снова: флаг
`onboarding_done` в `settings.json` (апгрейд со старой версии мастер
не показывает).