55 lines
2.0 KiB
C++
55 lines
2.0 KiB
C++
#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;
|
||
}
|