PixelLauncher 2.1.0 — стабильная сборка
Офлайн-лаунчер Minecraft: аккаунты без Microsoft, установка версий и лоадеров (Fabric, Quilt, Forge, NeoForge), каталог модпаков Modrinth, поиск и обновление модов, разбор вылетов, системный трей, автозагрузка, плагины, прокси и зеркала.
This commit is contained in:
commit
ec6f13ddcc
33 files changed
+10445
No files matched your search
@@ -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` (апгрейд со старой версии мастер
|
||||
не показывает).
|
||||
Reference in new issue
Block a user