#pragma once #include #include #include // Модлоадеры, которые лаунчер умеет ставить. Взаимоисключающи: игра // запускается ровно с одним профилем в /versions. enum class ModLoader { Forge, Fabric, NeoForge, Quilt }; // Одна сборка модлоадера под конкретную версию игры. struct LoaderVersionEntry { QString loaderVersion; // 47.4.0 | 0.19.3 | 21.1.248 QString gameVersion; // 1.20.1 QString versionId; // предсказанный versions/; у Forge пусто — // он выясняется после работы установщика QUrl installerUrl; // только Forge и NeoForge bool recommended = false; bool stable = true; }; // Ключ для интерфейса, кэша на диске и поля loader в customBuilds.json. inline QString loaderKey(ModLoader loader) { switch (loader) { case ModLoader::Forge: return QStringLiteral("forge"); case ModLoader::Fabric: return QStringLiteral("fabric"); case ModLoader::NeoForge: return QStringLiteral("neoforge"); case ModLoader::Quilt: return QStringLiteral("quilt"); } return {}; } inline QString loaderTitle(ModLoader loader) { switch (loader) { case ModLoader::Forge: return QStringLiteral("Minecraft Forge"); case ModLoader::Fabric: return QStringLiteral("Fabric Loader"); case ModLoader::NeoForge: return QStringLiteral("NeoForge"); case ModLoader::Quilt: return QStringLiteral("Quilt Loader"); } return {}; } inline std::optional loaderFromKey(const QString &key) { if (key == QLatin1String("forge")) return ModLoader::Forge; if (key == QLatin1String("fabric")) return ModLoader::Fabric; if (key == QLatin1String("neoforge")) return ModLoader::NeoForge; if (key == QLatin1String("quilt")) return ModLoader::Quilt; return std::nullopt; }