#pragma once #include #include #include #include #include enum class JavaRuntimeKind { Mojang, Jdk, Jre }; QString javaKindKey(JavaRuntimeKind kind); std::optional javaKindFromKey(const QString &key); QString javaKindTitle(JavaRuntimeKind kind); struct JavaRuntimeEntry { QString id; // temurin-jdk-21.0.12.1_1 | mojang-java-runtime-delta JavaRuntimeKind kind = JavaRuntimeKind::Jdk; int major = 0; // 8, 17, 21… QString version; // 21.0.12.1+1 | 21.0.7 QString component; // java-runtime-delta — только у сборок Mojang QDateTime released; QUrl url; // архив Temurin либо manifest.json компонента QString checksum; // sha256 архива Temurin, sha1 манифеста Mojang qint64 size = 0; // размер загрузки, 0 — неизвестен QString archive; // zip | tar.gz | mojang QString architecture; // x64 | aarch64 — на macOS бывает и не родная bool lts = false; bool isValid() const { return !id.isEmpty() && major > 0 && url.isValid(); } }; struct InstalledJavaRuntime { QString id; QString kind; // java | jdk | jre int major = 0; QString version; QString javaPath; // абсолютный путь к java/java.exe qint64 size = 0; // сколько заняло на диске по итогам установки }; namespace JavaRuntimeStore { QString dirFor(const QString &id); QList installed(); std::optional find(const QString &id); QString locateBinary(const QString &rootDir); bool writeMeta(const InstalledJavaRuntime &runtime, QString *error); bool remove(const QString &id, QString *error); QString sanitizeId(const QString &id); } namespace JavaRequirement { int minimumFor(const QString &minecraftVersionId); QString coverage(int javaMajor); }