Files
kosta2014p ec6f13ddcc PixelLauncher 2.1.0 — стабильная сборка
Офлайн-лаунчер Minecraft: аккаунты без Microsoft, установка версий и лоадеров
(Fabric, Quilt, Forge, NeoForge), каталог модпаков Modrinth, поиск и обновление
модов, разбор вылетов, системный трей, автозагрузка, плагины, прокси и зеркала.
2026-10-18 22:44:19 +07:00

216 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` (апгрейд со старой версии мастер
не показывает).