diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java index 9cfc8bf37..4abb4eb86 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java @@ -85,7 +85,7 @@ public class HMCLModpackExportTask extends TaskResult { return null; }); - Version mv = repository.getVersion(version).resolve(repository); + Version mv = repository.getResolvedVersion(version); String gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version)) .orElseThrow(() -> new IllegalStateException("Cannot parse the version of " + version)); zip.putTextFile(Constants.GSON.toJson(mv.setJar(gameVersion)), "minecraft/pack.json"); // Making "jar" to gameVersion is to be compatible with old HMCL. 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 9c5e81970..354103696 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -77,7 +77,7 @@ public final class LauncherHelper { Profile profile = Settings.INSTANCE.getSelectedProfile(); GameRepository repository = profile.getRepository(); DefaultDependencyManager dependencyManager = profile.getDependency(); - Version version = repository.getVersion(selectedVersion).resolve(repository); + Version version = repository.getResolvedVersion(selectedVersion); Account account = Settings.INSTANCE.getSelectedAccount(); VersionSetting setting = profile.getVersionSetting(selectedVersion); Optional gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version)); @@ -156,9 +156,7 @@ public final class LauncherHelper { @Override public void onStop(boolean success, TaskExecutor executor) { - if (success) { - Controllers.closeDialog(); - } else { + if (!success) { Platform.runLater(() -> { if (executor.getLastException() != null) Controllers.dialog(I18nException.getStackTrace(executor.getLastException()), diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerController.java index 9a977dafc..10c614e0d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerController.java @@ -53,7 +53,7 @@ public class InstallerController { public void loadVersion(Profile profile, String versionId) { this.profile = profile; this.versionId = versionId; - this.version = profile.getRepository().getVersion(versionId).resolve(profile.getRepository()); + this.version = profile.getRepository().getResolvedVersion(versionId); contentPane.getChildren().clear(); forge = liteLoader = optiFine = null; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java index c5e7bd0bd..a819a94a1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java @@ -161,7 +161,7 @@ public final class VersionPage extends StackPane implements DecoratorPage { deleteVersion(profile, version); break; case 2: // redownload asset index - new GameAssetIndexDownloadTask(profile.getDependency(), profile.getRepository().getVersion(version).resolve(profile.getRepository())).start(); + new GameAssetIndexDownloadTask(profile.getDependency(), profile.getRepository().getResolvedVersion(version)).start(); break; case 3: // delete libraries FileUtils.deleteDirectoryQuietly(new File(profile.getRepository().getBaseDirectory(), "libraries")); diff --git a/HMCL/src/main/resources/assets/css/root.css b/HMCL/src/main/resources/assets/css/root.css index 58ca8ee12..61ce4c0de 100644 --- a/HMCL/src/main/resources/assets/css/root.css +++ b/HMCL/src/main/resources/assets/css/root.css @@ -4,7 +4,8 @@ */ .root { - -fx-font-family: "微软雅黑", "Microsoft YaHei", "Roboto"; + -fx-base-font-family: "微软雅黑", "Microsoft YaHei", "Roboto"; + -fx-font-family: -fx-base-font-family; } .disabled Label { @@ -129,7 +130,7 @@ .jfx-layout-heading { -fx-font-size: 20.0px; - -fx-font-weight: BOLD; + -fx-font-family: -fx-base-font-family; -fx-alignment: center-left; -fx-padding: 5.0 0.0 5.0 0.0; } @@ -152,12 +153,12 @@ .dialog-accept { -fx-text-fill: #03A9F4; - -fx-font-weight: BOLD; + -fx-font-family: -fx-base-font-family; -fx-padding: 0.7em 0.8em; } .dialog-cancel { - -fx-font-weight: BOLD; + -fx-font-family: -fx-base-font-family; -fx-padding: 0.7em 0.8em; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java index be65124e9..2bd5aa57e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java @@ -55,7 +55,7 @@ public final class GameAssetDownloadTask extends Task { */ public GameAssetDownloadTask(AbstractDependencyManager dependencyManager, Version version) { this.dependencyManager = dependencyManager; - this.version = version; + this.version = version.requireResolved(); this.refreshTask = new GameAssetRefreshTask(dependencyManager, version); this.dependents.add(refreshTask); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java index 9e1878024..f180a4a80 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java @@ -49,7 +49,7 @@ public final class GameAssetIndexDownloadTask extends Task { */ public GameAssetIndexDownloadTask(AbstractDependencyManager dependencyManager, Version version) { this.dependencyManager = dependencyManager; - this.version = version; + this.version = version.requireResolved(); setSignificance(TaskSignificance.MODERATE); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetRefreshTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetRefreshTask.java index cc2d8f743..d0cf4095a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetRefreshTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetRefreshTask.java @@ -54,7 +54,7 @@ public final class GameAssetRefreshTask extends TaskResult, Validation { private final Date releaseTime; private final int minimumLauncherVersion; - public Version(String id, String minecraftArguments, Arguments arguments, String mainClass, String inheritsFrom, String jar, AssetIndexInfo assetIndex, String assets, List libraries, List compatibilityRules, Map downloads, Map logging, ReleaseType type, Date time, Date releaseTime, int minimumLauncherVersion) { + private transient final boolean resolved; + + public Version(boolean resolved, String id, String minecraftArguments, Arguments arguments, String mainClass, String inheritsFrom, String jar, AssetIndexInfo assetIndex, String assets, List libraries, List compatibilityRules, Map downloads, Map logging, ReleaseType type, Date time, Date releaseTime, int minimumLauncherVersion) { + this.resolved = resolved; this.id = id; this.minecraftArguments = minecraftArguments; this.arguments = arguments; @@ -140,11 +143,18 @@ public class Version implements Comparable, Validation { return false; } + public Version requireResolved() { + if (!resolved) + throw new RuntimeException("Version not resolved"); + + return this; + } + /** * Resolve given version */ public Version resolve(VersionProvider provider) throws VersionNotFoundException { - return resolve(provider, new HashSet<>()); + return resolve(provider, new HashSet<>()).setResolved(true); } protected Version resolve(VersionProvider provider, Set resolvedSoFar) throws VersionNotFoundException { @@ -159,7 +169,9 @@ public class Version implements Comparable, Validation { // It is supposed to auto install an version in getVersion. Version parent = provider.getVersion(inheritsFrom).resolve(provider, resolvedSoFar); - return new Version(id, + return new Version( + true, + id, minecraftArguments == null ? parent.minecraftArguments : minecraftArguments, Arguments.merge(parent.arguments, arguments), mainClass == null ? parent.mainClass : mainClass, @@ -177,36 +189,40 @@ public class Version implements Comparable, Validation { Math.max(minimumLauncherVersion, parent.minimumLauncherVersion)); } + public Version setResolved(boolean resolved) { + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + } + public Version setId(String id) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setMinecraftArguments(String minecraftArguments) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setArguments(Arguments arguments) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setMainClass(String mainClass) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setInheritsFrom(String inheritsFrom) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setJar(String jar) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setLibraries(List libraries) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } public Version setLogging(Map logging) { - return new Version(id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); + return new Version(resolved, id, minecraftArguments, arguments, mainClass, inheritsFrom, jar, assetIndex, assets, libraries, compatibilityRules, downloads, logging, type, time, releaseTime, minimumLauncherVersion); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java index a3768e499..cacd87892 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java @@ -56,7 +56,7 @@ public abstract class Launcher { this.listener = listener; this.daemon = daemon; - version = repository.getVersion(versionId).resolve(repository); + version = repository.getResolvedVersion(versionId); } /**