# gamedirimport.h `gamedirimport.h`, `gamedirimport.cpp` Пространство имён `GameDirImport`: что уже лежит в папке игры, когда лаунчер запускают впервые. Состояния нет, сеть не нужна, файлы только читаются. Вызывает его [LauncherBackend](LauncherBackend.md) при первом запуске, решение описано в [ADR-0001](../adr/0001-import-existing-minecraft.md). ## detect(gameDir) Возвращает `std::optional`: `minecraftVersion`, `resolvedVersionId`, `loader`, `loaderVersion` и `source` — откуда взята версия (`launcher_profiles`, `versions` или `content`). `nullopt` — импортировать нечего: в `versions/` нет ни одной установленной версии и нет признаков того, что в папке играли. Признаки — непустые `mods`, `saves`, `resourcepacks`, `shaderpacks`, `config` или файлы `options.txt`, `servers.dat`. Служебные файлы других лаунчеров (`launcher_log.txt`, `webcache2`) не считаются: иначе пустая папка официального лаунчера давала бы сборку без версии. Версия выбирается так: 1. профили из `launcher_profiles.json`, у которых `lastVersionId` установлен, по убыванию `lastUsed` (профиль без даты считается самым старым). `latest-release` и `latest-snapshot` без `lastVersionId` пропускаются: без манифеста не узнать, во что они разворачивались; 2. установленные версии по убыванию времени правки `/.json`. Версия с нечитаемым описанием пропускается. Если в `mods/` есть хотя бы один `.jar`, сначала ищется профиль с `inheritsFrom` (сперва в первом списке, потом во втором), и только потом берётся что есть. Не нашлось ничего — `source` равен `content`, поля версии пустые. У профиля с `inheritsFrom` версия игры — это `inheritsFrom`, а `resolvedVersionId` — его `id`, поэтому запустится ровно найденный профиль, даже если модлоадер не опознан (OptiFine, LabyMod). У профиля без `inheritsFrom` версия — сам `id`. ## loaderOf(versionJson) Модлоадер по `libraries[].name` описания профиля: | Библиотека | `key` | `version` | |------------|-------|-----------| | `net.fabricmc:fabric-loader:` | `fabric` | `` | | `org.quiltmc:quilt-loader:` | `quilt` | `` | | `net.neoforged:neoforge:` | `neoforge` | `` | | `net.neoforged:forge:-` | `neoforge` | `` (NeoForge для 1.20.1) | | `net.minecraftforge:forge:-` | `forge` | `` | Префикс `-` срезается, хвост `-1.7.10` у старых Forge остаётся: в каталоге [ModLoaderVersionService](ModLoaderVersionService.md) версии записаны так же, и карточка сборки найдёт выбранную строку. Если таких библиотек нет, смотрит на `id`, который дают установщики: `fabric-loader--`, `quilt-loader--`, `neoforge-`, `-forge-`. Не опознано — пустой `key`. --- При создании этого документа использовался ИИ.