将 GameJavaVersion 转换为 record (#5222)
This commit is contained in:
@@ -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(() -> {
|
||||||
|
|||||||
@@ -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) -> {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user