66 lines
3.9 KiB
Markdown
66 lines
3.9 KiB
Markdown
# 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`.
|
||
|
||
---
|
||
|
||
При создании этого документа использовался ИИ.
|