#pragma once #include #include #include #include #include // Одна библиотека из 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; // Абсолютный путь к .jar (может лежать у родителя) int javaMajor = 8; QStringList jvmArgs; // Ещё с неподставленными ${...} QStringList gameArgs; QList 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 { // Версии, реально установленные в /versions (есть папка и .json). QStringList installedVersions(const QString &gameDir); // Читает и разворачивает версию. При ошибке возвращает невалидный объект и пишет error. MinecraftVersion load(const QString &gameDir, const QString &versionId, const QSet &features, QString *error); // Стандартный алгоритм Mojang: правила применяются по порядку, побеждает последнее совпавшее. bool rulesAllow(const QJsonArray &rules, const QSet &features = {}); // natives-windows / natives-macos-arm64 / natives-linux ... для текущей машины. QString nativeClassifier(); QString osName(); QString osArch(); } // namespace VersionLoader