38 lines
1.7 KiB
C++
38 lines
1.7 KiB
C++
#pragma once
|
|||
|
|
|
||
|
|
#include <QJsonObject>
|
||
|
|
#include <QString>
|
||
|
|
|
||
|
|
#include <optional>
|
||
|
|
|
||
|
|
// Что уже разложено в папке игры, когда лаунчер запускают впервые. Только
|
||
|
|
// читает файлы: .minecraft не меняется ни при каком исходе.
|
||
|
|
namespace GameDirImport {
|
||
|
|
|
||
|
|
// Модлоадер, найденный в описании профиля versions/<id>/<id>.json.
|
||
|
|
struct LoaderInfo
|
||
|
|
{
|
||
|
|
QString key; // "" | forge | fabric | neoforge | quilt
|
||
|
|
QString version; // в том же виде, что и в каталоге ModLoaderVersionService
|
||
|
|
};
|
||
|
|
|
||
|
|
// Сборка, которую стоит завести под содержимое папки игры.
|
||
|
|
struct Detected
|
||
|
|
{
|
||
|
|
QString minecraftVersion; // inheritsFrom профиля, а без него — сам id
|
||
|
|
QString resolvedVersionId; // id профиля, если он наследует другую версию
|
||
|
|
QString loader;
|
||
|
|
QString loaderVersion;
|
||
|
|
// Откуда взята версия: "launcher_profiles", "versions" или "content" —
|
||
|
|
// версии не нашлось, но моды или миры есть. Для тестов и отладки.
|
||
|
|
QString source;
|
||
|
|
};
|
||
|
|
|
||
|
|
// Модлоадер по библиотекам профиля, а если по ним не понять — по его id.
|
||
|
|
// Незнакомый профиль (OptiFine, LabyMod) даёт пустой key.
|
||
|
|
LoaderInfo loaderOf(const QJsonObject &versionJson);
|
||
|
|
|
||
|
|
// nullopt — в папке нет ни установленных версий, ни модов, миров и настроек игры.
|
||
|
|
std::optional<Detected> detect(const QString &gameDir);
|
||
|
|
|
||
|
|
}
|