Files
BiLauncher/doc/cpp/launcherpaths.md
T
2026-10-11 22:32:13 +03:00

3.9 KiB

launcherpaths.h

launcherpaths.h, launcherpaths.cpp

Все пути к данным лаунчера. Пространство имён LauncherPaths из свободных функций, состояния нет: каждая функция просто собирает строку.

Данные лаунчера лежат в папке BiLauncher рядом со стандартной папкой игры, а не в системном каталоге данных приложения. QStandardPaths не используется, поэтому имя приложения и организации из main.cpp на эти пути не влияют.

Где что лежит

containerDir() — папка, в которой живут и игра, и лаунчер:

ОС containerDir() папка игры по умолчанию rootDir()
Windows %USERPROFILE%/AppData/Roaming .minecraft BiLauncher
macOS ~/Library/Application Support minecraft (без точки, как у официального лаунчера) BiLauncher
Linux ~ .minecraft BiLauncher

На Linux папка лаунчера получается ~/BiLauncher, без точки, то есть видимая.

Внутри rootDir():

BiLauncher/
├── settings.json          settingsFile()
├── profiles.json          profilesFile()
├── customBuilds.json      customBuildsFile()
├── versions.json          legacyCustomBuildsFile() — старое имя, читается только при миграции
├── builds/                buildStorageDir()
│   ├── index.json         журнал BuildSwitcher
│   └── <id>/              buildDir(id): архив сборки, скачанный пак
│       └── season.json    seasonalStateFile(id)
├── java/                  javaDir(): скачанные сборки Java, каждая в <id>/
├── runtime/               runtimeDir(): authlib-injector.jar
└── cache/                 cacheDir(): всё, что можно удалить без потерь
    ├── version_manifest.json   versionManifestFile()
    ├── java_runtimes.json      javaCatalogFile()
    ├── seasonal_builds.json    seasonalCatalogFile()
    ├── loader_<ключ>.json      loaderCacheFile(key)
    ├── loaders/                loaderDownloadDir(): installer.jar и журналы установщиков
    └── java/                   javaDownloadDir(): архивы Temurin до распаковки

Папка игры задаётся в настройках (gameDir). defaultMinecraftDir() используется, только если там пусто.

ensureRootExists(&error)

Создаёт rootDir, runtime, cache, cache/loaders, builds, java и cache/java, а затем проверяет, что каждая из них действительно папка и в неё можно писать. mkpath возвращает true и для существующей папки без прав на запись, и тогда, когда на месте папки лежит файл. Без этой проверки сохранения потом молча не работали бы.

Вызывается при старте бэкенда, перед каждой записью JSON-файлов бэкенда, перед записью кэшей каталогов и перед установками. Остальные функции только собирают строки и ошибиться не могут.

launcherpaths.cpp подключает localization.h ради текста ошибки, заголовок зависит только от QString.


При создании этого документа использовался ИИ.