diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstall.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstall.java index 92a2ba5d1..904f892ff 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstall.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstall.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.download.forge; +import org.jackhuang.hmcl.game.Artifact; import org.jackhuang.hmcl.util.Immutable; /** @@ -28,7 +29,7 @@ public final class ForgeInstall { private final String profileName; private final String target; - private final String path; + private final Artifact path; private final String version; private final String filePath; private final String welcome; @@ -40,7 +41,7 @@ public final class ForgeInstall { this(null, null, null, null, null, null, null, null, null); } - public ForgeInstall(String profileName, String target, String path, String version, String filePath, String welcome, String minecraft, String mirrorList, String logo) { + public ForgeInstall(String profileName, String target, Artifact path, String version, String filePath, String welcome, String minecraft, String mirrorList, String logo) { this.profileName = profileName; this.target = target; this.path = path; @@ -60,7 +61,7 @@ public final class ForgeInstall { return target; } - public String getPath() { + public Artifact getPath() { return path; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java index 61fd9de36..186109be6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.download.forge; import org.jackhuang.hmcl.download.DefaultDependencyManager; -import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.download.VersionMismatchException; import org.jackhuang.hmcl.game.GameVersion; import org.jackhuang.hmcl.game.Version; @@ -39,6 +38,9 @@ import java.util.Collections; import java.util.Map; import java.util.Optional; +import static org.jackhuang.hmcl.util.StringUtils.removePrefix; +import static org.jackhuang.hmcl.util.StringUtils.removeSuffix; + /** * * @author huangyuhui @@ -80,10 +82,7 @@ public final class ForgeInstallTask extends Task { @Override public void postExecute() throws Exception { Files.deleteIfExists(installer); - setResult(dependency.getResult() - .setPriority(30000) - .setId(LibraryAnalyzer.LibraryType.FORGE.getPatchId()) - .setVersion(remote.getSelfVersion())); + setResult(dependency.getResult()); } @Override @@ -99,9 +98,9 @@ public final class ForgeInstallTask extends Task { @Override public void execute() { if (VersionNumber.VERSION_COMPARATOR.compare("1.13", remote.getGameVersion()) <= 0) - dependency = new ForgeNewInstallTask(dependencyManager, version, installer); + dependency = new ForgeNewInstallTask(dependencyManager, version, remote.getSelfVersion(), installer); else - dependency = new ForgeOldInstallTask(dependencyManager, version, installer); + dependency = new ForgeOldInstallTask(dependencyManager, version, remote.getSelfVersion(), installer); } /** @@ -125,15 +124,19 @@ public final class ForgeInstallTask extends Task { ForgeNewInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeNewInstallProfile.class); if (!gameVersion.get().equals(profile.getMinecraft())) throw new VersionMismatchException(profile.getMinecraft(), gameVersion.get()); - return new ForgeNewInstallTask(dependencyManager, version, installer); + return new ForgeNewInstallTask(dependencyManager, version, modifyVersion(gameVersion.get(), profile.getPath().getVersion().replaceAll("(?i)forge", "")), installer); } else if (installProfile.containsKey("install") && installProfile.containsKey("versionInfo")) { ForgeInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeInstallProfile.class); if (!gameVersion.get().equals(profile.getInstall().getMinecraft())) throw new VersionMismatchException(profile.getInstall().getMinecraft(), gameVersion.get()); - return new ForgeOldInstallTask(dependencyManager, version, installer); + return new ForgeOldInstallTask(dependencyManager, version, modifyVersion(gameVersion.get(), profile.getInstall().getPath().getVersion().replaceAll("(?i)forge", "")), installer); } else { throw new IOException(); } } } + + private static String modifyVersion(String gameVersion, String version) { + return removeSuffix(removePrefix(removeSuffix(removePrefix(version.replace(gameVersion, "").trim(), "-"), "-"), "_"), "_"); + } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java index 7896af8d7..ff4659f46 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.download.forge; import org.jackhuang.hmcl.download.DefaultDependencyManager; +import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.download.game.GameLibrariesTask; import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask; import org.jackhuang.hmcl.game.Artifact; @@ -70,12 +71,14 @@ public class ForgeNewInstallTask extends Task { private ForgeNewInstallProfile profile; private Version forgeVersion; + private final String selfVersion; - ForgeNewInstallTask(DefaultDependencyManager dependencyManager, Version version, Path installer) { + ForgeNewInstallTask(DefaultDependencyManager dependencyManager, Version version, String selfVersion, Path installer) { this.dependencyManager = dependencyManager; this.gameRepository = dependencyManager.getGameRepository(); this.version = version; this.installer = installer; + this.selfVersion = selfVersion; setSignificance(TaskSignificance.MINOR); } @@ -268,7 +271,10 @@ public class ForgeNewInstallTask extends Task { } } - setResult(forgeVersion); + setResult(forgeVersion + .setPriority(30000) + .setId(LibraryAnalyzer.LibraryType.FORGE.getPatchId()) + .setVersion(selfVersion)); dependencies.add(dependencyManager.checkLibraryCompletionAsync(forgeVersion)); FileUtils.deleteDirectory(temp.toFile()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeOldInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeOldInstallTask.java index 6782bb112..987542eb3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeOldInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeOldInstallTask.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.download.forge; import org.jackhuang.hmcl.download.DefaultDependencyManager; +import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; @@ -41,12 +42,14 @@ public class ForgeOldInstallTask extends Task { private final DefaultDependencyManager dependencyManager; private final Version version; private final Path installer; + private final String selfVersion; private final List> dependencies = new LinkedList<>(); - ForgeOldInstallTask(DefaultDependencyManager dependencyManager, Version version, Path installer) { + ForgeOldInstallTask(DefaultDependencyManager dependencyManager, Version version, String selfVersion, Path installer) { this.dependencyManager = dependencyManager; this.version = version; this.installer = installer; + this.selfVersion = selfVersion; setSignificance(TaskSignificance.MINOR); } @@ -71,7 +74,7 @@ public class ForgeOldInstallTask extends Task { ForgeInstallProfile installProfile = JsonUtils.fromNonNullJson(json, ForgeInstallProfile.class); // unpack the universal jar in the installer file. - Library forgeLibrary = Library.fromName(installProfile.getInstall().getPath()); + Library forgeLibrary = Library.fromName(installProfile.getInstall().getPath().toString()); File forgeFile = dependencyManager.getGameRepository().getLibraryFile(version, forgeLibrary); if (!FileUtils.makeFile(forgeFile)) throw new IOException("Cannot make directory " + forgeFile.getParent()); @@ -81,7 +84,10 @@ public class ForgeOldInstallTask extends Task { IOUtils.copyTo(is, os); } - setResult(installProfile.getVersionInfo()); + setResult(installProfile.getVersionInfo() + .setPriority(30000) + .setId(LibraryAnalyzer.LibraryType.FORGE.getPatchId()) + .setVersion(selfVersion)); dependencies.add(dependencyManager.checkLibraryCompletionAsync(installProfile.getVersionInfo())); } }