Files

55 lines
2.0 KiB
C++
Raw Permalink Normal View History

#pragma once
#include <QString>
#include <QUrl>
#include <optional>
// Модлоадеры, которые лаунчер умеет ставить. Взаимоисключающи: игра
// запускается ровно с одним профилем в <gameDir>/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/<id>; у 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<ModLoader> 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;
}