Files
minecraft-launcher/minecraftversion.h
T

66 lines
2.9 KiB
C++

#pragma once
#include <QJsonArray>
#include <QList>
#include <QSet>
#include <QString>
#include <QStringList>
// Одна библиотека из client.json уже с разрешёнными правилами.
struct MinecraftLibrary
{
QString name; // Maven-координаты: org.lwjgl:lwjgl:3.3.1:natives-windows
QString path; // Путь относительно .minecraft/libraries
QString url; // Откуда качать, если файла нет (может быть пустым)
QString sha1;
qint64 size = 0;
bool native = false; // Распаковывается в natives, а не кладётся в classpath
QStringList extractExclude; // Префиксы, которые не распаковываем
};
// client.json, «схлопнутый» по всей цепочке inheritsFrom.
struct MinecraftVersion
{
QString id; // Имя папки в versions, оно же --version
QString mainClass;
QString type; // release / snapshot / modified — идёт в --versionType
QString assetIndexId; // --assetIndex
QString assetsKind; // Поле "assets": legacy, pre-1.6 либо тот же id
QString clientJarPath; // Абсолютный путь к <id>.jar (может лежать у родителя)
int javaMajor = 8;
QStringList jvmArgs; // Ещё с неподставленными ${...}
QStringList gameArgs;
QList<MinecraftLibrary> libraries;
QString loggingArgument; // -Dlog4j.configurationFile=${path}
QString loggingConfigPath; // Абсолютный путь к xml, пустой если конфига нет
bool supportsQuickPlay = false; // 1.20+ понимает --quickPlayMultiplayer
bool hasCustomResolutionArgs = false;
bool isValid() const { return !id.isEmpty() && !mainClass.isEmpty(); }
};
namespace VersionLoader {
// Версии, реально установленные в <gameDir>/versions (есть папка и <id>.json).
QStringList installedVersions(const QString &gameDir);
// Читает и разворачивает версию. При ошибке возвращает невалидный объект и пишет error.
MinecraftVersion load(const QString &gameDir,
const QString &versionId,
const QSet<QString> &features,
QString *error);
// Стандартный алгоритм Mojang: правила применяются по порядку, побеждает последнее совпавшее.
bool rulesAllow(const QJsonArray &rules, const QSet<QString> &features = {});
// natives-windows / natives-macos-arm64 / natives-linux ... для текущей машины.
QString nativeClassifier();
QString osName();
QString osArch();
} // namespace VersionLoader