fix #23 by adding validating on first startup and close #30 by adding
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m20s
tests / linux (push) Successful in 2m14s
tests / windows (push) Failing after 23m21s
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m20s
tests / linux (push) Successful in 2m14s
tests / windows (push) Failing after 23m21s
version number Signed-off-by: galeon <dertiellis@gmail.com>
This commit is contained in:
1 parent
bc205fa2e7
commit
1d781b5324
19 files changed
+805
-10
No files matched your search
@@ -0,0 +1,57 @@
|
||||
# gamedirimport.h
|
||||
|
||||
`gamedirimport.h`, `gamedirimport.cpp`
|
||||
|
||||
Пространство имён `GameDirImport`: что уже лежит в папке игры, когда лаунчер запускают впервые.
|
||||
Состояния нет, сеть не нужна, файлы только читаются. Вызывает его
|
||||
[LauncherBackend](LauncherBackend.md) при первом запуске, решение описано в
|
||||
[ADR-0001](../adr/0001-import-existing-minecraft.md).
|
||||
|
||||
## 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`) не считаются: иначе пустая папка официального лаунчера давала
|
||||
бы сборку без версии.
|
||||
|
||||
Версия выбирается так:
|
||||
|
||||
1. профили из `launcher_profiles.json`, у которых `lastVersionId` установлен, по убыванию
|
||||
`lastUsed` (профиль без даты считается самым старым). `latest-release` и `latest-snapshot` без
|
||||
`lastVersionId` пропускаются: без манифеста не узнать, во что они разворачивались;
|
||||
2. установленные версии по убыванию времени правки `<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](ModLoaderVersionService.md) версии записаны так же, и карточка сборки
|
||||
найдёт выбранную строку.
|
||||
|
||||
Если таких библиотек нет, смотрит на `id`, который дают установщики: `fabric-loader-<v>-<mc>`,
|
||||
`quilt-loader-<v>-<mc>`, `neoforge-<v>`, `<mc>-forge-<v>`. Не опознано — пустой `key`.
|
||||
|
||||
---
|
||||
|
||||
При создании этого документа использовался ИИ.
|
||||
Reference in new issue
Block a user