6.4 KiB
launcherpaths.h — LauncherPaths
Обзор
Minecraft_launcher хранит собственные данные отдельно от папки игры: настройки, профили, описания
сборок, архивы содержимого .minecraft, скачанные сборки Java и кэши каталогов. Пространство имён
LauncherPaths — единственное место, где эти пути вычисляются.
Собственная папка galeonLauncher лежит рядом со стандартной .minecraft, а не в системном
каталоге данных приложения: так все файлы лаунчера остаются там же, где сама игра, и переносятся
вместе с ней.
К этому заголовку обращается почти каждый сервис проекта — везде, где нужно прочитать или записать файл в папке лаунчера.
Пространства имён
LauncherPaths группирует функции, возвращающие абсолютные пути, и одну функцию создания корневой
папки. Состояния у пространства имён нет: все функции вычисляют путь заново при каждом вызове.
Функции
Корневые каталоги
QString containerDir()
Родительская папка, в которой лежит .minecraft, а рядом с ней — galeonLauncher. От неё
отсчитываются и папка игры по умолчанию, и корень данных лаунчера.
QString rootDir()
Корень данных лаунчера — <containerDir>/galeonLauncher.
QString defaultMinecraftDir()
Стандартная папка игры. Используется, когда пользователь не задал свою в настройках.
bool ensureRootExists(QString *error = nullptr)
Создаёт папку лаунчера, если её ещё нет. Вызывается при каждом запуске и перед каждой записью.
Возвращает false и заполняет error, если папку не удалось создать или в неё не пишется. Все
остальные функции пространства имён только считают строки и в этом смысле не могут завершиться
неудачей — проверять доступность каталога нужно этой функцией.
Файлы состояния
QString settingsFile()
Файл настроек запуска: папка игры, путь к Java, память, аргументы JVM, размер окна.
QString profilesFile()
Файл профилей игрока.
QString customBuildsFile()
<root>/customBuilds.json — пользовательские сборки.
QString legacyCustomBuildsFile()
<root>/versions.json — как сборки назывались до переименования. Читается один раз при миграции и
больше ни для чего не нужен.
Сборки и их архивы
QString buildStorageDir()
<root>/builds — архивы содержимого .minecraft, по одному на сборку.
QString buildDir(int buildId)
<root>/builds/<id> — папка одной сборки: её архив и, у сезонных, скачанный пак с описанием
установленной ревизии.
QString seasonalStateFile(int buildId)
<root>/builds/<id>/season.json — какая ревизия сезонной сборки установлена и какие файлы она
принесла. Список файлов нужен, чтобы при обновлении убрать те, что из сборки ушли.
Java
QString javaDir()
<root>/java — сборки Java, скачанные лаунчером. Каждая в своей подпапке, имя подпапки —
идентификатор сборки из каталога.
QString javaCatalogFile()
Слепок каталога доступных сборок Java с отметкой времени.
QString javaDownloadDir()
Каталог, куда качаются архивы Temurin до распаковки.
Кэши и загрузки
QString cacheDir()
<root>/cache — данные, которые можно удалить без потерь.
QString versionManifestFile()
Слепок манифеста версий Mojang с отметкой времени.
QString seasonalCatalogFile()
Слепок каталога сезонных сборок с отметкой времени.
QString loaderCacheFile(const QString &loaderKey)
Слепок списка версий одного модлоадера. Параметр loaderKey принимает значения forge, fabric,
neoforge и quilt — те же ключи, что возвращает loaderKey() из modloader.h.
QString loaderDownloadDir()
Каталог, куда качаются installer.jar модлоадеров.
QString runtimeDir()
Каталог, куда качается authlib-injector — библиотека, подменяющая сервер авторизации при входе
через Ely.by.
Зависимости
Единственный подключаемый заголовок — QString. Пространство имён не зависит ни от одного класса
проекта, поэтому его можно подключать откуда угодно без риска циклических зависимостей.
Пример использования
QString error;
if (!LauncherPaths::ensureRootExists(&error)) {
qWarning() << "папка лаунчера недоступна:" << error;
return;
}
QFile file(LauncherPaths::customBuildsFile());
if (file.open(QIODevice::WriteOnly))
file.write(document.toJson());
При создании этого документа использовался ИИ.