BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Лёгкий лаунчер Minecraft: Java Edition на Python — вход через Microsoft, все версии, автоподбор Java, скины, моды, автообновление с цифровой подписью
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
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, тоже подхватываются.