BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Моды с Modrinth и CurseForge в один клик, сборки по коду, сервера игроков, скины в 3D. Для лицензии Minecraft: Java Edition.
Translation pending
GamesPython · Inno SetupGitHub @clinyaaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Лёгкий лаунчер Minecraft: Java Edition на Python — вход через Microsoft, все версии, автоподбор Java, скины, моды, автообновление с цифровой подписью
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Лёгкий лаунчер Minecraft: Java Edition на Python
Вход через Microsoft · все версии и загрузчики · автоподбор Java · скины с 3D-редактором · моды · автообновление с цифровой подписью
Скачать · Как собрать · Обновления
Лёгкий лаунчер Minecraft: Java Edition на Python. Не требует сторонних библиотек — нужен только Python 3.8+ (с tkinter, он ставится по умолчанию).
Тёмный минималистичный дизайн с собственной пиксельной графикой:
Все картинки лежат в launcher\assets.zip и сгенерированы скриптом tools\make_assets.py (нужен Pillow, только если захотите их перерисовать).
Вкладка «Скин» (для лицензионного аккаунта):
Изменения сохраняются через официальный API Minecraft, и их видят все игроки (в игре — после перезахода). Без входа в аккаунт Microsoft показывается сгенерированный персонаж.
Кнопка «Создать скин» или «Редактировать текущий» на вкладке «Скин». Двойной клик по скину в «Моих скинах» открывает его в редакторе.
Знак — кнопка «Играть», собранная из объёмных блоков. Надпись набрана собственным пиксельным шрифтом. Файлы лежат в папке branding\: значки для приложения, горизонтальная версия для тёмного и светлого фона, лист с правилами (logo_sheet.png). ZeleesLauncher.ico используется как иконка exe. Перерисовать логотип можно скриптом tools\logo.py.
Вкладка «Моды» в боковой панели.
resourcepacks и shaderpacks сборки. Если у пака нет версии под ваш Minecraft, ставится последняя (игра может предупредить о версии). Для шейдеров на Fabric/Quilt нужен мод Iris, лаунчер напомнит об этом.fabric.mod.json, quilt.mod.json, mods.toml, neoforge.mods.toml, mcmod.info): мод не для того загрузчика, не та версия Minecraft;.jar.disabled) и удалять.У каждой сборки своя папка: data\minecraft\instances\<сборка>\ (моды, миры, настройки), поэтому моды разных версий не смешиваются.
CurseForge: их API работает только с личным ключом. Получите бесплатный ключ на console.curseforge.com и вставьте его в «Опции → CurseForge API-ключ». После этого в каталоге появится переключатель CurseForge. Некоторые авторы запрещают скачивание своих модов из сторонних лаунчеров. В этом случае лаунчер предложит открыть страницу мода.
Импорт. Кнопка «Импорт модпака» на вкладке «Моды» ставит модпак Modrinth из файла: создаёт отдельную сборку со своей папкой, при необходимости ставит загрузчик (Fabric, Quilt, Forge, NeoForge), скачивает файлы с проверкой SHA1 и копирует настройки из overrides и client-overrides. Перед установкой видно, что в модпаке. Файлы только для сервера пропускаются. Файлы качаются только с доменов, разрешённых форматом (Modrinth CDN, GitHub, GitLab), остальные лаунчер перечислит как не скачанные. Пути внутри пака не могут выйти за папку сборки.
Модпаки CurseForge. Та же кнопка принимает .zip модпака CurseForge (внутри manifest.json, папка overrides и иконка). Самих модов в таком архиве нет, только их id, поэтому файлы берутся у CurseForge API и нужен API-ключ из «Опций». Лаунчер ставит нужный загрузчик, скачивает моды, ресурс-паки и шейдеры с проверкой SHA1 и копирует overrides. Файлы, которые автор запретил качать из сторонних лаунчеров, в обход не скачиваются: лаунчер перечислит их со ссылкой на страницу. Распакованный архив нужно запаковать обратно, чтобы manifest.json лежал в корне.
Двойной клик. Установленный лаунчер сам добавляет себя в «Открыть с помощью» для .mrpack и становится программой по умолчанию, если у .mrpack её ещё нет (выбор другого лаунчера не перебивается). Если лаунчер уже открыт, файл откроется в нём, второе окно не появится. При удалении лаунчера связь убирается.
Экспорт. «Поделиться ▾ → Файлом .mrpack» сохраняет сборку в файл. Моды, ресурс-паки и шейдеры, найденные на Modrinth по хэшу, записываются ссылками. Остальные файлы и настройки модов (config, defaultconfigs, kubejs) по желанию вкладываются в файл. Миры, options.txt и отключённые моды не входят. Вход в аккаунт для экспорта не нужен.
K7QF-M2XA и ссылку zelees.link/p/K7QF-M2XA. В код входят версия Minecraft, загрузчик с его версией, моды (вместе с отключёнными), ресурс-паки и шейдеры. Нужен вход в аккаунт Microsoft.Вкладка «Сервера» → «Локальная сеть» показывает миры, открытые через «Открыть для сети», на других компьютерах той же сети, в том числе через Radmin VPN, Hamachi и ZeroTier. Они появляются сами через пару секунд, у каждого видны онлайн, пинг и версия, а «Играть» сразу подключает к миру. Выделенные сервера (server.jar) себя не объявляют. Их находит кнопка «Найти выделенные сервера», которая проверяет порт 25565 во всей своей подсети, или их адрес можно добавить вручную. При первом открытии вкладки Windows может спросить про доступ к сети: его нужно разрешить для частных сетей, иначе LAN-миры не будут видны.
Вкладка «Сервера»: список серверов игроков ZeleesLauncher. У каждого видны иконка, описание или MOTD, версия, онлайн и пинг от вашего компьютера (SRV-записи поддерживаются). Кнопка «Играть» запускает игру и сразу подключает к серверу: в 1.20+ через --quickPlayMultiplayer, в старых версиях через --server/--port. Если сервер работает на другой версии, лаунчер предложит переключиться на неё.
Premium (100 ₽ в месяц) привязан к лицензионному аккаунту Microsoft по UUID. С ним можно добавить до 3 своих серверов в общий список, а рядом с ником на главном экране появляется золотой значок ★ Premium. Окно Premium открывается из меню аккаунта или кликом по значку. Когда Premium заканчивается, сервера владельца скрываются из списка, а при продлении появляются снова.
Личный кабинет на zelees.link/account: вход через Microsoft в браузере или из лаунчера (меню аккаунта → «Личный кабинет на сайте», у своего сервера — «Статистика»). Там видны статус Premium и оплата через Boosty, свои сервера и сборки. Статистика сервера (только для владельца): сайт раз в 5 минут опрашивает сервера с активным Premium, на графиках онлайн и пик за 24 часа, 7 и 30 дней, доступность, задержка и средний онлайн по часам суток. Публичный профиль zelees.link/u/<ник> с ником, скином, значком Premium и серверами включается в кабинете, по умолчанию скрыт.
Как это устроено:
join в sessionserver Mojang, а сайт проверяет его через hasJoined. Токен Minecraft на сайт не передаётся.launcher/premium.py).rd-132211 (2009) и Alpha/Beta до последних релизов и снапшотов. Фильтры по типу, поиск, отметка установленных.resources для версий до 1.6.data\minecraft\versions (поддерживается inheritsFrom).launcher/single_instance.py), поэтому портативные копии в разных папках запускаются независимо.launcher/tray.py), без сторонних библиотек.winget install -e --id Python.Python.3.12 или с python.org (галочка «Add python.exe to PATH»).start.bat.debug.bat — запуск с консолью, если что-то не открывается. Ошибки также пишутся в data\launcher.log и data\crash.log.
Вход идёт через собственное приложение ZeleesLauncher (Azure), одобренное Mojang. Client ID вшит в launcher/auth.py (AZURE_CLIENT_ID). Нажмите «Войти» — откроется браузер, после входа в аккаунт Microsoft лаунчер сам получит данные и проверит лицензию. Копировать ссылки не нужно.
Настройки приложения в Azure: платформа «Mobile and desktop», redirect URI http://localhost, только личные учётные записи, включено «Allow public client flows».
Запасной вход по ссылке (кнопка «Войти по ссылке», если не открывается браузер): войдите на открывшейся странице, скопируйте адрес пустой страницы (Ctrl+L, Ctrl+C), лаунчер сам заметит ссылку в буфере обмена. Для кнопки «Войти во встроенном окне» запустите install_webview.bat. Аккаунты, добавленные этим способом раньше, продолжают работать и обновляться, повторный вход не нужен.
Если нужно использовать другое приложение Azure, впишите его Client ID в Настройки → Microsoft Client ID.
Refresh-токен Microsoft хранится локально в
data\accounts.json. На Windows файл зашифрован DPAPI: прочитать его может только тот же пользователь Windows на том же ПК (при переносе портативной папки на другой ПК аккаунты нужно добавить заново).
Своя тёмная полоса заголовка вместо системной рамки: перетаскивается мышью (работает прилипание к краям экрана), есть кнопки «свернуть» и «закрыть», в Windows 11 углы скруглены. Окно остаётся на панели задач и в Alt+Tab.
build_release.bat 1.0.0 "Первый релиз"
Скрипт сам поставит PyInstaller и Inno Setup (через winget), соберёт программу, уберёт лишние файлы и сделает в папке release:
ZeleesLauncher-Setup-1.0.0.exe — установщик для пользователей;zelees-app-1.0.0.zip и update.json — для обновлений.Установщик ставит лаунчер в %LOCALAPPDATA%\Programs\ZeleesLauncher без прав администратора. Он создаёт ярлыки в «Пуске» и (по желанию) на рабочем столе, а при удалении спрашивает, удалять ли игры и настройки. Данные установленной версии лежат в %APPDATA%\ZeleesLauncher.
Установленный лаунчер при запуске проверяет update.json. Если версия новее, на главном экране появляется кнопка «Доступно обновление». Проверить вручную можно в «Опциях».
BOOTSTRAP_VERSION в main.py, соберите через build_release.bat и опубликуйте с --min-bootstrap равным этому числу. Старые лаунчеры сами скачают и тихо запустят новый установщик.Обновления раздаёт сайт проекта: update.json, пакет zelees-app-<версия>.zip и установщик. Адрес и сервер для загрузки задаются в tools\update_config.json (site_url, site_ssh; образец — tools\update_config.example.json). Вместо своего сайта можно использовать GitHub Releases: уберите site_url и впишите github_repo.
Установщики до 1.0.7 включительно адреса обновлений не знают и сами не обновляются: их владельцам нужно один раз поставить 1.0.8 или новее.
build_release.bat 1.0.9 "Что нового" — установщик, пакет и update.json (спросит, выложить ли на сайт)
publish_update.bat 1.0.9 "Что нового" --upload — только лёгкое обновление кода, без пересборки exe
--upload копирует файлы на сервер через scp (нужен вход по паролю или SSH-ключу), update.json последним. Сервис перезапускать не нужно. Через минуту установленные лаунчеры предложат обновиться.
publish_update.bat 1.1.2 "Что нового" --beta --upload — версия только для тех, кто включил «Опции → Бета-версии лаунчера»
С --beta манифест пишется в update-beta.json с полем "channel": "beta" внутри подписанной части, а update.json не меняется. Лаунчер с включёнными бета-версиями смотрит оба манифеста и ставит самую новую версию. Остальные бету не видят. Подложить бета-манифест вместо обычного нельзя: канал входит в подпись. Когда бета проверена, выпустите ту же или следующую версию без --beta.
Новости на главный экран лаунчера пишутся в админке сайта, раздел «Новости в лаунчере»: заголовок, текст и необязательная ссылка. Лаунчер при запуске берёт последние 10 через /api/news, хранит их в кэше на случай отсутствия сети и выделяет непрочитанные.
В админке, раздел «Лаунчеры по версиям»: сколько установленных лаунчеров за день проверяли обновления и на каких они версиях, отдельно с бетой. Лаунчер передаёт версию в User-Agent. Один адрес считается один раз в сутки по HMAC с ежедневной солью, которая хранится только в памяти. В базу пишутся одни числа, без адресов.
При первой неожиданной ошибке лаунчер спрашивает, можно ли отправлять отчёты. Ответ меняется в «Опциях → Отчёты об ошибках». В отчёт входят текст ошибки, версия лаунчера и Windows. Путь профиля, имя пользователя Windows, папки лаунчера и токены вырезаются до отправки. Ошибки сети, входа и каталогов модов не отправляются, падения при запуске (crash.log) отправляются при следующем запуске. Отчёты видны в админке сайта, раздел «Ошибки лаунчера». Одинаковые ошибки там склеены, со счётчиком и диапазоном версий.
Сервер делает копию базы раз в сутки и хранит 14 последних, но на том же сервере. pull_backups.bat скачивает новые копии на этот ПК (%USERPROFILE%\.zelees\server-backups, хранятся 60), проверяет их целостность и предупреждает, если последней копии больше двух дней. Ежедневный запуск через Планировщик задач (если ПК был выключен в 12:00, задача запустится при включении; с аргументом auto вывод пишется в pull.log рядом с копиями):
powershell -Command "Register-ScheduledTask -TaskName 'ZeleesLauncher backups' -Trigger (New-ScheduledTaskTrigger -Daily -At 12:00) -Action (New-ScheduledTaskAction -Execute 'E:\Job\Final\pull_backups.bat' -Argument 'auto') -Settings (New-ScheduledTaskSettingsSet -StartWhenAvailable)"
update.json подписывается Ed25519 (поле signature; в подписанную часть входят версия, ссылки и sha256 пакета и установщика). Лаунчер с 1.0.12 ставит обновление, только если подпись сходится с открытым ключом UPDATE_PUBKEY в launcher/updater.py. Поэтому взлом сервера, Cloudflare или DNS не даёт подсунуть пользователям свой код.
Секретный ключ лежит только на ПК автора: %USERPROFILE%\.zelees\update_signing.key (py tools\update_key.py show). Без него publish_update/build_release не опубликуют версию. Храните резервную копию ключа вне этого ПК и не кладите её на сервер. Если ключ потерян, новые обновления установленные лаунчеры отвергнут — придётся вшить новый ключ (update_key.py genkey) и раздать установщик вручную.
Портативная версия без установки — build_exe.bat (папка data рядом с exe).
Для раздачи используйте build_release.bat (см. выше). build_exe.bat собирает портативный exe без установки.
py -m unittest discover -s tests -t .
Тесты не ходят в сеть и не трогают папку data. Проверяется подпись обновлений (в том числе векторы RFC 8032), правила version.json и inheritsFrom, определение загрузчиков, выбор Java, разбор и совместимость модов, коды сборок, адреса серверов, LAN-объявления и сборка командной строки игры. GitHub Actions (.github/workflows/tests.yml) гоняет их на каждый push на Windows с Python 3.8 и 3.14, а заодно проверяет код через pyflakes.
data\
minecraft\ игра: versions, libraries, assets, saves, mods...
runtime\ Java, скачанная лаунчером
settings.json настройки
accounts.json аккаунты
Fabric/Forge удобнее всего ставить из вкладки «Моды» → «Новая сборка». Сборки, поставленные внешними установщиками в ...\data\minecraft, тоже подхватываются.