mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-03-07 17:36:52 +08:00
feat(java): WIP: show expected java version range when no valid java.
This commit is contained in:
parent
8892e2b273
commit
428c1a1799
@ -318,6 +318,8 @@ public final class LauncherHelper {
|
||||
Runnable continueAction = () -> future.complete(JavaVersion.fromCurrentEnvironment());
|
||||
|
||||
if (setting.isJavaAutoSelected()) {
|
||||
// JavaVersionConstraint.VersionRange range = JavaVersionConstraint.findSuitableJavaVersionRange(gameVersion, version);
|
||||
// TODO: download java 16 if necessary!
|
||||
Controllers.dialog(i18n("launch.failed.no_accepted_java"), i18n("message.warning"), MessageType.WARNING, continueAction);
|
||||
} else {
|
||||
Controllers.dialog(i18n("launch.wrong_javadir"), i18n("message.warning"), MessageType.WARNING, continueAction);
|
||||
|
@ -115,7 +115,7 @@ public enum JavaVersionConstraint {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Pair<Range<VersionNumber>, Range<VersionNumber>> findSuitableJavaVersionRange(VersionNumber gameVersion, Version version) {
|
||||
public static VersionRange findSuitableJavaVersionRange(VersionNumber gameVersion, Version version) {
|
||||
Range<VersionNumber> mandatoryJavaRange = versionRange(MIN, MAX);
|
||||
Range<VersionNumber> suggestedJavaRange = versionRange(MIN, MAX);
|
||||
for (JavaVersionConstraint java : values()) {
|
||||
@ -129,26 +129,24 @@ public enum JavaVersionConstraint {
|
||||
}
|
||||
}
|
||||
}
|
||||
return pair(mandatoryJavaRange, suggestedJavaRange);
|
||||
return new VersionRange(mandatoryJavaRange, suggestedJavaRange);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static JavaVersion findSuitableJavaVersion(VersionNumber gameVersion, Version version) throws InterruptedException {
|
||||
Pair<Range<VersionNumber>, Range<VersionNumber>> range = findSuitableJavaVersionRange(gameVersion, version);
|
||||
Range<VersionNumber> mandatoryJavaRange = range.getKey();
|
||||
Range<VersionNumber> suggestedJavaRange = range.getValue();
|
||||
VersionRange range = findSuitableJavaVersionRange(gameVersion, version);
|
||||
|
||||
JavaVersion mandatory = null;
|
||||
JavaVersion suggested = null;
|
||||
for (JavaVersion javaVersion : JavaVersion.getJavas()) {
|
||||
// select the latest java version that this version accepts.
|
||||
if (mandatoryJavaRange.contains(javaVersion.getVersionNumber())) {
|
||||
if (range.getMandatory().contains(javaVersion.getVersionNumber())) {
|
||||
if (mandatory == null) mandatory = javaVersion;
|
||||
else if (javaVersion.getVersionNumber().compareTo(mandatory.getVersionNumber()) > 0) {
|
||||
mandatory = javaVersion;
|
||||
}
|
||||
}
|
||||
if (suggestedJavaRange.contains(javaVersion.getVersionNumber())) {
|
||||
if (range.getSuggested().contains(javaVersion.getVersionNumber())) {
|
||||
if (suggested == null) suggested = javaVersion;
|
||||
else if (javaVersion.getVersionNumber().compareTo(suggested.getVersionNumber()) > 0) {
|
||||
suggested = javaVersion;
|
||||
@ -169,4 +167,22 @@ public enum JavaVersionConstraint {
|
||||
private static Range<VersionNumber> versionRange(String fromInclusive, String toExclusive) {
|
||||
return Range.between(VersionNumber.asVersion(fromInclusive), VersionNumber.asVersion(toExclusive));
|
||||
}
|
||||
|
||||
public static class VersionRange {
|
||||
private final Range<VersionNumber> mandatory;
|
||||
private final Range<VersionNumber> suggested;
|
||||
|
||||
public VersionRange(Range<VersionNumber> mandatory, Range<VersionNumber> suggested) {
|
||||
this.mandatory = mandatory;
|
||||
this.suggested = suggested;
|
||||
}
|
||||
|
||||
public Range<VersionNumber> getMandatory() {
|
||||
return mandatory;
|
||||
}
|
||||
|
||||
public Range<VersionNumber> getSuggested() {
|
||||
return suggested;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user