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