将 GameJavaVersion 转换为 record (#5222)

This commit is contained in:
Wulian233
2026-01-15 21:39:33 +08:00
committed by GitHub
parent 85ce3d9a7a
commit a19f147a6a
7 changed files with 37 additions and 51 deletions

View File

@@ -389,7 +389,7 @@ public final class LauncherHelper {
int targetJavaVersionMajor = Integer.parseInt(setting.getJavaVersion()); int targetJavaVersionMajor = Integer.parseInt(setting.getJavaVersion());
GameJavaVersion minimumJavaVersion = GameJavaVersion.getMinimumJavaVersion(gameVersion); GameJavaVersion minimumJavaVersion = GameJavaVersion.getMinimumJavaVersion(gameVersion);
if (minimumJavaVersion != null && targetJavaVersionMajor < minimumJavaVersion.getMajorVersion()) { if (minimumJavaVersion != null && targetJavaVersionMajor < minimumJavaVersion.majorVersion()) {
Controllers.dialog( Controllers.dialog(
i18n("launch.failed.java_version_too_low"), i18n("launch.failed.java_version_too_low"),
i18n("message.error"), i18n("message.error"),
@@ -634,7 +634,7 @@ public final class LauncherHelper {
private static CompletableFuture<JavaRuntime> downloadJava(GameJavaVersion javaVersion, Profile profile) { private static CompletableFuture<JavaRuntime> downloadJava(GameJavaVersion javaVersion, Profile profile) {
CompletableFuture<JavaRuntime> future = new CompletableFuture<>(); CompletableFuture<JavaRuntime> future = new CompletableFuture<>();
Controllers.dialog(new MessageDialogPane.Builder( Controllers.dialog(new MessageDialogPane.Builder(
i18n("launch.advice.require_newer_java_version", javaVersion.getMajorVersion()), i18n("launch.advice.require_newer_java_version", javaVersion.majorVersion()),
i18n("message.warning"), i18n("message.warning"),
MessageType.QUESTION) MessageType.QUESTION)
.yesOrNo(() -> { .yesOrNo(() -> {

View File

@@ -30,7 +30,9 @@ import org.jackhuang.hmcl.util.platform.Platform;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.IOException; import java.io.IOException;
import java.nio.file.*; import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*; import java.util.*;
import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.logging.Logger.LOG;
@@ -57,7 +59,7 @@ public final class HMCLJavaRepository implements JavaRepository {
} }
public Path getJavaDir(Platform platform, GameJavaVersion gameJavaVersion) { public Path getJavaDir(Platform platform, GameJavaVersion gameJavaVersion) {
return getJavaDir(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent()); return getJavaDir(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.component());
} }
@Override @Override
@@ -66,7 +68,7 @@ public final class HMCLJavaRepository implements JavaRepository {
} }
public Path getManifestFile(Platform platform, GameJavaVersion gameJavaVersion) { public Path getManifestFile(Platform platform, GameJavaVersion gameJavaVersion) {
return getManifestFile(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent()); return getManifestFile(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.component());
} }
public boolean isInstalled(Platform platform, String name) { public boolean isInstalled(Platform platform, String name) {
@@ -74,7 +76,7 @@ public final class HMCLJavaRepository implements JavaRepository {
} }
public boolean isInstalled(Platform platform, GameJavaVersion gameJavaVersion) { public boolean isInstalled(Platform platform, GameJavaVersion gameJavaVersion) {
return isInstalled(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent()); return isInstalled(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.component());
} }
public @Nullable Path getJavaExecutable(Platform platform, String name) { public @Nullable Path getJavaExecutable(Platform platform, String name) {
@@ -94,7 +96,7 @@ public final class HMCLJavaRepository implements JavaRepository {
} }
public @Nullable Path getJavaExecutable(Platform platform, GameJavaVersion gameJavaVersion) { public @Nullable Path getJavaExecutable(Platform platform, GameJavaVersion gameJavaVersion) {
return getJavaExecutable(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent()); return getJavaExecutable(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.component());
} }
private static void getAllJava(List<JavaRuntime> list, Platform platform, Path platformRoot, boolean isManaged) { private static void getAllJava(List<JavaRuntime> list, Platform platform, Path platformRoot, boolean isManaged) {
@@ -169,7 +171,7 @@ public final class HMCLJavaRepository implements JavaRepository {
Map<String, Object> update = new LinkedHashMap<>(); Map<String, Object> update = new LinkedHashMap<>();
update.put("provider", "mojang"); update.put("provider", "mojang");
update.put("component", gameJavaVersion.getComponent()); update.put("component", gameJavaVersion.component());
Map<String, JavaLocalFiles.Local> files = new LinkedHashMap<>(); Map<String, JavaLocalFiles.Local> files = new LinkedHashMap<>();
result.remoteFiles.getFiles().forEach((path, file) -> { result.remoteFiles.getFiles().forEach((path, file) -> {

View File

@@ -38,7 +38,10 @@ import org.jackhuang.hmcl.game.GameJavaVersion;
import org.jackhuang.hmcl.java.JavaInfo; import org.jackhuang.hmcl.java.JavaInfo;
import org.jackhuang.hmcl.java.JavaManager; import org.jackhuang.hmcl.java.JavaManager;
import org.jackhuang.hmcl.setting.DownloadProviders; import org.jackhuang.hmcl.setting.DownloadProviders;
import org.jackhuang.hmcl.task.*; import org.jackhuang.hmcl.task.FileDownloadTask;
import org.jackhuang.hmcl.task.GetTask;
import org.jackhuang.hmcl.task.Schedulers;
import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.Controllers;
import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.FXUtils;
import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; import org.jackhuang.hmcl.ui.construct.DialogCloseEvent;
@@ -116,7 +119,7 @@ public final class JavaDownloadDialog extends StackPane {
vbox.getChildren().add(prompt); vbox.getChildren().add(prompt);
for (GameJavaVersion version : supportedGameJavaVersions) { for (GameJavaVersion version : supportedGameJavaVersions) {
JFXRadioButton button = new JFXRadioButton("Java " + version.getMajorVersion()); JFXRadioButton button = new JFXRadioButton("Java " + version.majorVersion());
button.setUserData(version); button.setUserData(version);
vbox.getChildren().add(button); vbox.getChildren().add(button);
toggleGroup.getToggles().add(button); toggleGroup.getToggles().add(button);
@@ -248,7 +251,7 @@ public final class JavaDownloadDialog extends StackPane {
for (int i = 0; i < versions.size(); i++) { for (int i = 0; i < versions.size(); i++) {
DiscoJavaRemoteVersion version = versions.get(i); DiscoJavaRemoteVersion version = versions.get(i);
if (version.getJdkVersion() == GameJavaVersion.LATEST.getMajorVersion()) { if (version.getJdkVersion() == GameJavaVersion.LATEST.majorVersion()) {
remoteVersionBox.getSelectionModel().select(i); remoteVersionBox.getSelectionModel().select(i);
return; return;
} }

View File

@@ -21,7 +21,7 @@ import org.jackhuang.hmcl.download.ArtifactMalformedException;
import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.DownloadProvider;
import org.jackhuang.hmcl.game.DownloadInfo; import org.jackhuang.hmcl.game.DownloadInfo;
import org.jackhuang.hmcl.game.GameJavaVersion; import org.jackhuang.hmcl.game.GameJavaVersion;
import org.jackhuang.hmcl.java.*; import org.jackhuang.hmcl.java.JavaInfo;
import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.FileDownloadTask;
import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.GetTask;
import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.Task;
@@ -59,11 +59,11 @@ public final class MojangJavaDownloadTask extends Task<MojangJavaDownloadTask.Re
MojangJavaDownloads allDownloads = JsonUtils.fromNonNullJson(javaDownloadsJson, MojangJavaDownloads.class); MojangJavaDownloads allDownloads = JsonUtils.fromNonNullJson(javaDownloadsJson, MojangJavaDownloads.class);
Map<String, List<MojangJavaDownloads.JavaDownload>> osDownloads = allDownloads.getDownloads().get(platform); Map<String, List<MojangJavaDownloads.JavaDownload>> osDownloads = allDownloads.getDownloads().get(platform);
if (osDownloads == null || !osDownloads.containsKey(javaVersion.getComponent())) if (osDownloads == null || !osDownloads.containsKey(javaVersion.component()))
throw new UnsupportedPlatformException("Unsupported platform: " + platform); throw new UnsupportedPlatformException("Unsupported platform: " + platform);
List<MojangJavaDownloads.JavaDownload> candidates = osDownloads.get(javaVersion.getComponent()); List<MojangJavaDownloads.JavaDownload> candidates = osDownloads.get(javaVersion.component());
for (MojangJavaDownloads.JavaDownload download : candidates) { for (MojangJavaDownloads.JavaDownload download : candidates) {
if (JavaInfo.parseVersion(download.getVersion().getName()) >= javaVersion.getMajorVersion()) { if (JavaInfo.parseVersion(download.getVersion().getName()) >= javaVersion.majorVersion()) {
this.download = download; this.download = download;
return new GetTask(downloadProvider.injectURLWithCandidates(download.getManifest().getUrl())); return new GetTask(downloadProvider.injectURLWithCandidates(download.getManifest().getUrl()));
} }

View File

@@ -36,7 +36,7 @@ public final class MojangJavaRemoteVersion implements JavaRemoteVersion {
@Override @Override
public int getJdkVersion() { public int getJdkVersion() {
return gameJavaVersion.getMajorVersion(); return gameJavaVersion.majorVersion();
} }
@Override @Override

View File

@@ -17,14 +17,18 @@
*/ */
package org.jackhuang.hmcl.game; package org.jackhuang.hmcl.game;
import org.jackhuang.hmcl.util.gson.JsonSerializable;
import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.Architecture;
import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.OperatingSystem;
import org.jackhuang.hmcl.util.platform.Platform; import org.jackhuang.hmcl.util.platform.Platform;
import org.jackhuang.hmcl.util.versioning.GameVersionNumber; import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
import java.util.*; import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public final class GameJavaVersion { @JsonSerializable
public record GameJavaVersion(String component, int majorVersion) {
public static final GameJavaVersion JAVA_25 = new GameJavaVersion("java-runtime-epsilon", 25); public static final GameJavaVersion JAVA_25 = new GameJavaVersion("java-runtime-epsilon", 25);
public static final GameJavaVersion JAVA_21 = new GameJavaVersion("java-runtime-delta", 21); public static final GameJavaVersion JAVA_21 = new GameJavaVersion("java-runtime-delta", 21);
public static final GameJavaVersion JAVA_17 = new GameJavaVersion("java-runtime-beta", 17); public static final GameJavaVersion JAVA_17 = new GameJavaVersion("java-runtime-beta", 17);
@@ -86,36 +90,13 @@ public final class GameJavaVersion {
return Collections.emptyList(); return Collections.emptyList();
} }
private final String component;
private final int majorVersion;
public GameJavaVersion() {
this("", 0);
}
public GameJavaVersion(String component, int majorVersion) {
this.component = component;
this.majorVersion = majorVersion;
}
public String getComponent() {
return component;
}
public int getMajorVersion() {
return majorVersion;
}
@Override @Override
public int hashCode() { public int hashCode() {
return getMajorVersion(); return majorVersion();
} }
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; return this == o || o instanceof GameJavaVersion that && this.majorVersion == that.majorVersion;
if (!(o instanceof GameJavaVersion)) return false;
GameJavaVersion that = (GameJavaVersion) o;
return majorVersion == that.majorVersion;
} }
} }

View File

@@ -18,9 +18,9 @@
package org.jackhuang.hmcl.game; package org.jackhuang.hmcl.game;
import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.download.LibraryAnalyzer;
import org.jackhuang.hmcl.java.JavaRuntime;
import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Lang;
import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.Architecture;
import org.jackhuang.hmcl.java.JavaRuntime;
import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.OperatingSystem;
import org.jackhuang.hmcl.util.versioning.GameVersionNumber; import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
import org.jackhuang.hmcl.util.versioning.VersionNumber; import org.jackhuang.hmcl.util.versioning.VersionNumber;
@@ -43,7 +43,7 @@ public enum JavaVersionConstraint {
@Override @Override
public boolean checkJava(GameVersionNumber gameVersionNumber, Version version, JavaRuntime java) { public boolean checkJava(GameVersionNumber gameVersionNumber, Version version, JavaRuntime java) {
GameJavaVersion minimumJavaVersion = GameJavaVersion.getMinimumJavaVersion(gameVersionNumber); GameJavaVersion minimumJavaVersion = GameJavaVersion.getMinimumJavaVersion(gameVersionNumber);
return minimumJavaVersion == null || java.getParsedVersion() >= minimumJavaVersion.getMajorVersion(); return minimumJavaVersion == null || java.getParsedVersion() >= minimumJavaVersion.majorVersion();
} }
}, },
// Minecraft with suggested java version recorded in game json is restrictedly constrained. // Minecraft with suggested java version recorded in game json is restrictedly constrained.
@@ -59,10 +59,10 @@ public enum JavaVersionConstraint {
@Override @Override
public VersionRange<VersionNumber> getJavaVersionRange(Version version) { public VersionRange<VersionNumber> getJavaVersionRange(Version version) {
String javaVersion; String javaVersion;
if (Objects.requireNonNull(version.getJavaVersion()).getMajorVersion() >= 9) { if (Objects.requireNonNull(version.getJavaVersion()).majorVersion() >= 9) {
javaVersion = "" + version.getJavaVersion().getMajorVersion(); javaVersion = "" + version.getJavaVersion().majorVersion();
} else { } else {
javaVersion = "1." + version.getJavaVersion().getMajorVersion(); javaVersion = "1." + version.getJavaVersion().majorVersion();
} }
return VersionNumber.atLeast(javaVersion); return VersionNumber.atLeast(javaVersion);
} }
@@ -247,9 +247,9 @@ public enum JavaVersionConstraint {
return true; return true;
} }
String versionNumber = gameJavaVersion.getMajorVersion() >= 9 String versionNumber = gameJavaVersion.majorVersion() >= 9
? String.valueOf(gameJavaVersion.getMajorVersion()) ? String.valueOf(gameJavaVersion.majorVersion())
: "1." + gameJavaVersion.getMajorVersion(); : "1." + gameJavaVersion.majorVersion();
VersionRange<VersionNumber> range = getJavaVersionRange(version); VersionRange<VersionNumber> range = getJavaVersionRange(version);
VersionNumber maximum = range.getMaximum(); VersionNumber maximum = range.getMaximum();