2026-10-11 22:32:13 +03:00
|
|
|
|
# launcherpaths.h
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
`launcherpaths.h`, `launcherpaths.cpp`
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Все пути к данным лаунчера. Пространство имён `LauncherPaths` из свободных функций, состояния нет:
|
|
|
|
|
|
каждая функция просто собирает строку.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Данные лаунчера лежат в папке `BiLauncher` рядом со стандартной папкой игры, а не в системном
|
|
|
|
|
|
каталоге данных приложения. `QStandardPaths` не используется, поэтому имя приложения и организации
|
|
|
|
|
|
из `main.cpp` на эти пути не влияют.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## Где что лежит
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
`containerDir()` — папка, в которой живут и игра, и лаунчер:
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
| ОС | `containerDir()` | папка игры по умолчанию | `rootDir()` |
|
|
|
|
|
|
|----|------------------|-------------------------|-------------|
|
|
|
|
|
|
| Windows | `%USERPROFILE%/AppData/Roaming` | `.minecraft` | `BiLauncher` |
|
|
|
|
|
|
| macOS | `~/Library/Application Support` | `minecraft` (без точки, как у официального лаунчера) | `BiLauncher` |
|
|
|
|
|
|
| Linux | `~` | `.minecraft` | `BiLauncher` |
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
На Linux папка лаунчера получается `~/BiLauncher`, без точки, то есть видимая.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Внутри `rootDir()`:
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
```
|
|
|
|
|
|
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 до распаковки
|
|
|
|
|
|
```
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Папка игры задаётся в настройках (`gameDir`). `defaultMinecraftDir()` используется, только если
|
|
|
|
|
|
там пусто.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## ensureRootExists(&error)
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Создаёт `rootDir`, `runtime`, `cache`, `cache/loaders`, `builds`, `java` и `cache/java`, а затем
|
|
|
|
|
|
проверяет, что каждая из них действительно папка и в неё можно писать. `mkpath` возвращает `true`
|
|
|
|
|
|
и для существующей папки без прав на запись, и тогда, когда на месте папки лежит файл. Без этой
|
|
|
|
|
|
проверки сохранения потом молча не работали бы.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Вызывается при старте бэкенда, перед каждой записью JSON-файлов бэкенда, перед записью кэшей
|
|
|
|
|
|
каталогов и перед установками. Остальные функции только собирают строки и ошибиться не могут.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
`launcherpaths.cpp` подключает `localization.h` ради текста ошибки, заголовок зависит только от
|
|
|
|
|
|
`QString`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
При создании этого документа использовался ИИ.
|