# modloader.h — ModLoader ## Обзор `Minecraft_launcher` умеет ставить четыре модлоадера: Minecraft Forge, Fabric Loader, NeoForge и Quilt Loader. Заголовок `modloader.h` — общий словарь для всей этой части проекта: перечисление самих лоадеров, описание одной их сборки и функции перевода между перечислением и строковым ключом. Лоадеры взаимоисключающи: игра запускается ровно с одним профилем в `/versions`, поэтому в сборке лаунчера хранится один ключ лоадера, а не набор. Заголовок подключают [ModLoaderVersionService](ModLoaderVersionService.md), [ModLoaderInstaller](ModLoaderInstaller.md) и [LauncherBackend](LauncherBackend.md). ## Типы | Имя | Вид | Описание | |-----|-----|----------| | `ModLoader` | `enum class` | Модлоадеры, которые лаунчер умеет ставить | | `LoaderVersionEntry` | `struct` | Одна сборка модлоадера под конкретную версию игры | ### ModLoader | Значение | Ключ | Название | Описание | |----------|------|----------|----------| | `Forge` | `forge` | Minecraft Forge | Старейший загрузчик; ставится собственным установщиком, который собирает часть файлов на месте | | `Fabric` | `fabric` | Fabric Loader | Лёгкий загрузчик; профиль версии формируется из метаданных без запуска установщика | | `NeoForge` | `neoforge` | NeoForge | Ответвление Forge; ставится так же собственным установщиком | | `Quilt` | `quilt` | Quilt Loader | Ответвление Fabric; ставится так же, как Fabric | Перечисление объявлено как `enum class`, поэтому неявного приведения к целому нет. ### LoaderVersionEntry | Поле | Тип | Описание | |------|-----|----------| | `loaderVersion` | `QString` | Версия самого лоадера — например `47.4.0`, `0.19.3` или `21.1.248` | | `gameVersion` | `QString` | Версия Minecraft, под которую эта сборка — например `1.20.1` | | `versionId` | `QString` | Предсказанный идентификатор профиля `versions/`. У 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` и ``. От классов проекта не зависит и сам подключается всюду, где речь идёт о модлоадерах. ## Пример использования ```cpp const auto loader = loaderFromKey(build.loader); if (!loader) { // сборка без модлоадера — запускаем чистую ваниль return; } qInfo() << "ставим" << loaderTitle(*loader) << "версии" << entry.loaderVersion << "под Minecraft" << entry.gameVersion; ``` --- При создании этого документа использовался ИИ.