diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java index 6f826a1a9..f6edfcae9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java @@ -22,6 +22,7 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.game.LibraryDownloadException; +import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.setting.Profile; @@ -125,6 +126,8 @@ public final class InstallerWizardProvider implements WizardProvider { Controllers.dialog(i18n("launch.failed.download_library", ((LibraryDownloadException) exception).getLibrary().getName()) + "\n" + StringUtils.getStackTrace(exception.getCause()), i18n("install.failed.downloading"), MessageType.ERROR, next); } else if (exception instanceof DownloadException) { Controllers.dialog(i18n("install.failed.downloading.detail", ((DownloadException) exception).getUrl()) + "\n" + StringUtils.getStackTrace(exception.getCause()), i18n("install.failed.downloading"), MessageType.ERROR, next); + } else if (exception instanceof OptiFineInstallTask.UnsupportedOptiFineInstallationException) { + Controllers.dialog(i18n("install.failed.optifine_conflict"), i18n("install.failed"), MessageType.ERROR, next); } else { Controllers.dialog(StringUtils.getStackTrace(exception), i18n("install.failed"), MessageType.ERROR, next); } diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index be989d1c2..730d73d0e 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -127,6 +127,7 @@ install=Install New Game install.failed=Failed to install install.failed.downloading=Failed to install due to some files not downloaded successfully install.failed.downloading.detail=Failed to download file: %s +install.failed.optifine_conflict=OptiFine and Forge are both installed simultaneously on Minecraft 1.13 install.installer.choose=Choose a %s version install.installer.forge=Forge install.installer.game=Game diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 53364130a..896f75ca0 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -126,6 +126,7 @@ install=新增遊戲 install.failed=安裝失敗 install.failed.downloading=安裝失敗,部分文件未能完成下載 install.failed.downloading.detail=未能下載檔案:%s +install.failed.optifine_conflict=暫不支持 OptiFine 與 Forge 同時安裝於 Minecraft 1.13 install.installer.choose=選擇 %s 版本 install.installer.forge=Forge install.installer.game=遊戲 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 9d3c37abc..2dcc34905 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -126,6 +126,7 @@ install=添加游戏 install.failed=安装失败 install.failed.downloading=安装失败,部分文件未能完成下载 install.failed.downloading.detail=未能下载文件:%s +install.failed.optifine_conflict=暂不支持 OptiFine 与 Forge 同时安装于 Minecraft 1.13 install.installer.choose=选择 %s 版本 install.installer.forge=Forge install.installer.game=游戏 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 d250c9084..7a3201f2f 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 @@ -83,11 +83,6 @@ public final class ForgeInstallTask extends TaskResult { return Collections.singleton(dependency); } - @Override - public boolean isRelyingOnDependencies() { - return false; - } - @Override public void execute() { if (VersionNumber.VERSION_COMPARATOR.compare("1.13", remote.getGameVersion()) <= 0) 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 9773a32d2..d57da15d4 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 @@ -19,6 +19,7 @@ package org.jackhuang.hmcl.download.forge; import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.game.GameLibrariesTask; +import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask; import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskResult; @@ -122,6 +123,9 @@ public class ForgeNewInstallTask extends TaskResult { @Override public void execute() throws Exception { + if ("net.minecraft.launchwrapper.Launch".equals(version.getMainClass())) + throw new OptiFineInstallTask.UnsupportedOptiFineInstallationException(); + Path temp = Files.createTempDirectory("forge_installer"); int finished = 0; try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(installer)) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java index 716ddfad4..8107d0179 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineInstallTask.java @@ -66,6 +66,9 @@ public final class OptiFineInstallTask extends TaskResult { @Override public void execute() { + if ("cpw.mods.modlauncher.Launcher".equals(version.getMainClass())) + throw new UnsupportedOptiFineInstallationException(); + String remoteVersion = remote.getGameVersion() + "_" + remote.getSelfVersion(); Library library = new Library( @@ -90,4 +93,6 @@ public final class OptiFineInstallTask extends TaskResult { dependencies.add(dependencyManager.checkLibraryCompletionAsync(version.setLibraries(libraries))); } + public static class UnsupportedOptiFineInstallationException extends UnsupportedOperationException { + } }