1 parent
1943996608
commit
f10b654953
34 files changed
+2099
-4576
No files matched your search
+29
-72
@@ -1,86 +1,43 @@
|
||||
# modloader.h — ModLoader
|
||||
# modloader.h
|
||||
|
||||
## Обзор
|
||||
Перечисление модлоадеров, запись одной версии модлоадера и перевод между перечислением и
|
||||
строковым ключом. Только заголовок, `.cpp` нет.
|
||||
|
||||
`Minecraft_launcher` умеет ставить четыре модлоадера: Minecraft Forge, Fabric Loader, NeoForge и
|
||||
Quilt Loader. Заголовок `modloader.h` — общий словарь для всей этой части проекта: перечисление
|
||||
самих лоадеров, описание одной их сборки и функции перевода между перечислением и строковым
|
||||
ключом.
|
||||
## ModLoader
|
||||
|
||||
Лоадеры взаимоисключающи: игра запускается ровно с одним профилем в `<gameDir>/versions`, поэтому в
|
||||
сборке лаунчера хранится один ключ лоадера, а не набор.
|
||||
`Forge`, `Fabric`, `NeoForge`, `Quilt`.
|
||||
|
||||
Заголовок подключают [ModLoaderVersionService](ModLoaderVersionService.md),
|
||||
[ModLoaderInstaller](ModLoaderInstaller.md) и [LauncherBackend](LauncherBackend.md).
|
||||
Модлоадеры взаимоисключающие: игра запускается с одним профилем из `versions/`, поэтому у сборки
|
||||
может быть не больше одного модлоадера. [LoaderRow](../qml/LoaderRow.md) снимает отметку с
|
||||
остальных, когда пользователь отмечает один.
|
||||
|
||||
## Типы
|
||||
## Ключи и названия
|
||||
|
||||
| Имя | Вид | Описание |
|
||||
|-----|-----|----------|
|
||||
| `ModLoader` | `enum class` | Модлоадеры, которые лаунчер умеет ставить |
|
||||
| `LoaderVersionEntry` | `struct` | Одна сборка модлоадера под конкретную версию игры |
|
||||
| Значение | `loaderKey()` | `loaderTitle()` |
|
||||
|----------|---------------|-----------------|
|
||||
| `Forge` | `forge` | Minecraft Forge |
|
||||
| `Fabric` | `fabric` | Fabric Loader |
|
||||
| `NeoForge` | `neoforge` | NeoForge |
|
||||
| `Quilt` | `quilt` | Quilt Loader |
|
||||
|
||||
### ModLoader
|
||||
Ключ используется в QML, в имени файла кэша (`cache/loader_<ключ>.json`) и в поле `loader` записи
|
||||
сборки в `customBuilds.json`. Если его поменять, старые сборки и кэши перестанут читаться.
|
||||
|
||||
| Значение | Ключ | Название | Описание |
|
||||
|----------|------|----------|----------|
|
||||
| `Forge` | `forge` | Minecraft Forge | Старейший загрузчик; ставится собственным установщиком, который собирает часть файлов на месте |
|
||||
| `Fabric` | `fabric` | Fabric Loader | Лёгкий загрузчик; профиль версии формируется из метаданных без запуска установщика |
|
||||
| `NeoForge` | `neoforge` | NeoForge | Ответвление Forge; ставится так же собственным установщиком |
|
||||
| `Quilt` | `quilt` | Quilt Loader | Ответвление Fabric; ставится так же, как Fabric |
|
||||
`loaderFromKey(key)` возвращает `std::nullopt` для любой другой строки, в том числе пустой. В
|
||||
бэкенде это значит «ванильная сборка».
|
||||
|
||||
Перечисление объявлено как `enum class`, поэтому неявного приведения к целому нет.
|
||||
Названия не переводятся: это имена собственные.
|
||||
|
||||
### LoaderVersionEntry
|
||||
## LoaderVersionEntry
|
||||
|
||||
| Поле | Тип | Описание |
|
||||
|------|-----|----------|
|
||||
| `loaderVersion` | `QString` | Версия самого лоадера — например `47.4.0`, `0.19.3` или `21.1.248` |
|
||||
| `gameVersion` | `QString` | Версия Minecraft, под которую эта сборка — например `1.20.1` |
|
||||
| `versionId` | `QString` | Предсказанный идентификатор профиля `versions/<id>`. У Forge пуст: он выясняется только после работы установщика |
|
||||
| `installerUrl` | `QUrl` | Адрес установщика; заполнен только у Forge и NeoForge |
|
||||
| `recommended` | `bool` | Сборка помечена авторами как рекомендуемая; по умолчанию `false` |
|
||||
| `stable` | `bool` | Сборка стабильна, а не тестовая; по умолчанию `true` |
|
||||
|
||||
## Функции
|
||||
|
||||
#### QString loaderKey(ModLoader loader)
|
||||
|
||||
Строковый ключ лоадера: `forge`, `fabric`, `neoforge` или `quilt`. Один и тот же ключ используется
|
||||
в трёх местах — в интерфейсе, в имени файла кэша на диске и в поле `loader` файла
|
||||
`customBuilds.json`, — поэтому менять его нельзя без миграции сохранённых сборок.
|
||||
|
||||
Объявлена `inline` в заголовке.
|
||||
|
||||
#### QString loaderTitle(ModLoader loader)
|
||||
|
||||
Человекочитаемое название лоадера для интерфейса: «Minecraft Forge», «Fabric Loader», «NeoForge»,
|
||||
«Quilt Loader». Объявлена `inline`.
|
||||
|
||||
#### std::optional<ModLoader> loaderFromKey(const QString &key)
|
||||
|
||||
Обратный перевод: ключ в перечисление. Возвращает `std::nullopt` для неизвестного ключа, в том
|
||||
числе для пустой строки — а пустая строка в сборке означает чистую ваниль без лоадера. Объявлена
|
||||
`inline`.
|
||||
|
||||
## Зависимости
|
||||
|
||||
Подключает `QString`, `QUrl` и `<optional>`. От классов проекта не зависит и сам подключается
|
||||
всюду, где речь идёт о модлоадерах.
|
||||
|
||||
## Пример использования
|
||||
|
||||
```cpp
|
||||
const auto loader = loaderFromKey(build.loader);
|
||||
if (!loader) {
|
||||
// сборка без модлоадера — запускаем чистую ваниль
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "ставим" << loaderTitle(*loader)
|
||||
<< "версии" << entry.loaderVersion
|
||||
<< "под Minecraft" << entry.gameVersion;
|
||||
```
|
||||
| Поле | Что это |
|
||||
|------|---------|
|
||||
| `loaderVersion` | `47.4.0`, `0.19.3`, `21.1.248` |
|
||||
| `gameVersion` | `1.20.1` |
|
||||
| `versionId` | ожидаемое имя профиля в `versions/`. У Fabric и Quilt оно известно заранее (`fabric-loader-<версия>-<игра>`), у Forge и NeoForge пусто: имя становится известно только после работы установщика |
|
||||
| `installerUrl` | ссылка на `installer.jar`, только у Forge и NeoForge |
|
||||
| `recommended` | у Forge помечено как recommended в `promotions_slim.json` |
|
||||
| `stable` | не альфа, не бета, не rc/pre |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user