diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 65e34feb1..6cece7616 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -389,7 +389,7 @@ public final class LauncherHelper { int targetJavaVersionMajor = Integer.parseInt(setting.getJavaVersion()); GameJavaVersion minimumJavaVersion = GameJavaVersion.getMinimumJavaVersion(gameVersion); - if (minimumJavaVersion != null && targetJavaVersionMajor < minimumJavaVersion.getMajorVersion()) { + if (minimumJavaVersion != null && targetJavaVersionMajor < minimumJavaVersion.majorVersion()) { Controllers.dialog( i18n("launch.failed.java_version_too_low"), i18n("message.error"), @@ -634,7 +634,7 @@ public final class LauncherHelper { private static CompletableFuture downloadJava(GameJavaVersion javaVersion, Profile profile) { CompletableFuture future = new CompletableFuture<>(); 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"), MessageType.QUESTION) .yesOrNo(() -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java index b0100219e..07b10fc03 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/HMCLJavaRepository.java @@ -30,7 +30,9 @@ import org.jackhuang.hmcl.util.platform.Platform; import org.jetbrains.annotations.Nullable; 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 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) { - return getJavaDir(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.getComponent()); + return getJavaDir(platform, MOJANG_JAVA_PREFIX + gameJavaVersion.component()); } @Override @@ -66,7 +68,7 @@ public final class HMCLJavaRepository implements JavaRepository { } 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) { @@ -74,7 +76,7 @@ public final class HMCLJavaRepository implements JavaRepository { } 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) { @@ -94,7 +96,7 @@ public final class HMCLJavaRepository implements JavaRepository { } 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 list, Platform platform, Path platformRoot, boolean isManaged) { @@ -169,7 +171,7 @@ public final class HMCLJavaRepository implements JavaRepository { Map update = new LinkedHashMap<>(); update.put("provider", "mojang"); - update.put("component", gameJavaVersion.getComponent()); + update.put("component", gameJavaVersion.component()); Map files = new LinkedHashMap<>(); result.remoteFiles.getFiles().forEach((path, file) -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaDownloadDialog.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaDownloadDialog.java index 94faea763..7d6dd5fc6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaDownloadDialog.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaDownloadDialog.java @@ -38,7 +38,10 @@ import org.jackhuang.hmcl.game.GameJavaVersion; import org.jackhuang.hmcl.java.JavaInfo; import org.jackhuang.hmcl.java.JavaManager; 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.FXUtils; import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; @@ -116,7 +119,7 @@ public final class JavaDownloadDialog extends StackPane { vbox.getChildren().add(prompt); for (GameJavaVersion version : supportedGameJavaVersions) { - JFXRadioButton button = new JFXRadioButton("Java " + version.getMajorVersion()); + JFXRadioButton button = new JFXRadioButton("Java " + version.majorVersion()); button.setUserData(version); vbox.getChildren().add(button); toggleGroup.getToggles().add(button); @@ -248,7 +251,7 @@ public final class JavaDownloadDialog extends StackPane { for (int i = 0; i < versions.size(); i++) { DiscoJavaRemoteVersion version = versions.get(i); - if (version.getJdkVersion() == GameJavaVersion.LATEST.getMajorVersion()) { + if (version.getJdkVersion() == GameJavaVersion.LATEST.majorVersion()) { remoteVersionBox.getSelectionModel().select(i); return; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaDownloadTask.java index eea3f18f2..a44a68e81 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaDownloadTask.java @@ -21,7 +21,7 @@ import org.jackhuang.hmcl.download.ArtifactMalformedException; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.game.DownloadInfo; 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.GetTask; import org.jackhuang.hmcl.task.Task; @@ -59,11 +59,11 @@ public final class MojangJavaDownloadTask extends Task> 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); - List candidates = osDownloads.get(javaVersion.getComponent()); + List candidates = osDownloads.get(javaVersion.component()); for (MojangJavaDownloads.JavaDownload download : candidates) { - if (JavaInfo.parseVersion(download.getVersion().getName()) >= javaVersion.getMajorVersion()) { + if (JavaInfo.parseVersion(download.getVersion().getName()) >= javaVersion.majorVersion()) { this.download = download; return new GetTask(downloadProvider.injectURLWithCandidates(download.getManifest().getUrl())); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaRemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaRemoteVersion.java index ed8fece9a..5e1a3c23b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaRemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaRemoteVersion.java @@ -36,7 +36,7 @@ public final class MojangJavaRemoteVersion implements JavaRemoteVersion { @Override public int getJdkVersion() { - return gameJavaVersion.getMajorVersion(); + return gameJavaVersion.majorVersion(); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java index 4842d9b11..f3d1dfc56 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameJavaVersion.java @@ -17,14 +17,18 @@ */ 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.OperatingSystem; import org.jackhuang.hmcl.util.platform.Platform; 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_21 = new GameJavaVersion("java-runtime-delta", 21); public static final GameJavaVersion JAVA_17 = new GameJavaVersion("java-runtime-beta", 17); @@ -86,36 +90,13 @@ public final class GameJavaVersion { 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 public int hashCode() { - return getMajorVersion(); + return majorVersion(); } @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof GameJavaVersion)) return false; - GameJavaVersion that = (GameJavaVersion) o; - return majorVersion == that.majorVersion; + return this == o || o instanceof GameJavaVersion that && this.majorVersion == that.majorVersion; } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java index 8e745d982..3d0ebd248 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -18,9 +18,9 @@ package org.jackhuang.hmcl.game; import org.jackhuang.hmcl.download.LibraryAnalyzer; +import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.util.Lang; 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.versioning.GameVersionNumber; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -43,7 +43,7 @@ public enum JavaVersionConstraint { @Override public boolean checkJava(GameVersionNumber gameVersionNumber, Version version, JavaRuntime java) { 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. @@ -59,10 +59,10 @@ public enum JavaVersionConstraint { @Override public VersionRange getJavaVersionRange(Version version) { String javaVersion; - if (Objects.requireNonNull(version.getJavaVersion()).getMajorVersion() >= 9) { - javaVersion = "" + version.getJavaVersion().getMajorVersion(); + if (Objects.requireNonNull(version.getJavaVersion()).majorVersion() >= 9) { + javaVersion = "" + version.getJavaVersion().majorVersion(); } else { - javaVersion = "1." + version.getJavaVersion().getMajorVersion(); + javaVersion = "1." + version.getJavaVersion().majorVersion(); } return VersionNumber.atLeast(javaVersion); } @@ -247,9 +247,9 @@ public enum JavaVersionConstraint { return true; } - String versionNumber = gameJavaVersion.getMajorVersion() >= 9 - ? String.valueOf(gameJavaVersion.getMajorVersion()) - : "1." + gameJavaVersion.getMajorVersion(); + String versionNumber = gameJavaVersion.majorVersion() >= 9 + ? String.valueOf(gameJavaVersion.majorVersion()) + : "1." + gameJavaVersion.majorVersion(); VersionRange range = getJavaVersionRange(version); VersionNumber maximum = range.getMaximum();