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 3ce2ef998..082f3b613 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 @@ -20,6 +20,7 @@ package org.jackhuang.hmcl.download.forge; import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.DependencyManager; import org.jackhuang.hmcl.download.VersionMismatchException; +import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask; import org.jackhuang.hmcl.game.GameVersion; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.FileDownloadTask; @@ -27,6 +28,7 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.IOException; import java.nio.file.FileSystem; @@ -97,7 +99,19 @@ public final class ForgeInstallTask extends Task { } @Override - public void execute() throws IOException, VersionMismatchException { + public void execute() throws IOException, VersionMismatchException, OptiFineInstallTask.UnsupportedOptiFineInstallationException { + String originalMainClass = version.resolve(dependencyManager.getGameRepository()).getMainClass(); + if (VersionNumber.VERSION_COMPARATOR.compare("1.13", remote.getGameVersion()) <= 0) { + // Forge 1.13 is not compatible with any other libraries. + if (!"net.minecraft.client.main.Main".equals(originalMainClass) && !"cpw.mods.modlauncher.Launcher".equals(originalMainClass)) + throw new OptiFineInstallTask.UnsupportedOptiFineInstallationException(); + } else { + // Forge 1.12 and older versions is compatible with vanilla and launchwrapper. + // if (!"net.minecraft.client.main.Main".equals(originalMainClass) && !"net.minecraft.launchwrapper.Launch".equals(originalMainClass)) + // throw new OptiFineInstallTask.UnsupportedOptiFineInstallationException(); + } + + if (detectForgeInstallerType(dependencyManager, version, installer)) dependency = new ForgeNewInstallTask(dependencyManager, version, remote.getSelfVersion(), installer); else 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 aae2b35e1..d5f33aab2 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 @@ -131,10 +131,6 @@ public class ForgeNewInstallTask extends Task { @Override public void execute() throws Exception { - String originalMainClass = version.resolve(dependencyManager.getGameRepository()).getMainClass(); - if (!"net.minecraft.client.main.Main".equals(originalMainClass) && !"cpw.mods.modlauncher.Launcher".equals(originalMainClass)) - throw new OptiFineInstallTask.UnsupportedOptiFineInstallationException(); - Path temp = Files.createTempDirectory("forge_installer"); int finished = 0; try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(installer)) {