diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java index 47d7ff2dd..6cf3d312e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java @@ -34,7 +34,9 @@ import javafx.scene.layout.VBox; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.HMCLGameRepository; +import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.InstallerItem; +import org.jackhuang.hmcl.ui.construct.MessageDialogPane; import org.jackhuang.hmcl.ui.construct.RequiredValidator; import org.jackhuang.hmcl.ui.construct.Validator; import org.jackhuang.hmcl.ui.wizard.WizardController; @@ -68,6 +70,10 @@ public class InstallersPage extends Control implements WizardPage { String libraryId = library.getLibraryId(); if (libraryId.equals("game")) continue; library.action.set(e -> { + if ("fabric-api".equals(libraryId)) { + Controllers.dialog(i18n("install.installer.fabric-api.warning"), i18n("message.warning"), MessageDialogPane.MessageType.WARNING); + } + if (library.incompatibleLibraryName.get() == null) controller.onNext(new VersionsPage(controller, i18n("install.installer.choose", i18n("install.installer." + libraryId)), gameVersion, downloadProvider, libraryId, () -> controller.onPrev(false))); }); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index bc80585c3..f60830277 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -343,6 +343,7 @@ install.installer.choose=Choose a %s version install.installer.depend=Depends on %s install.installer.fabric=Fabric install.installer.fabric-api=Fabric API +install.installer.fabric-api.warning=Warning: Fabric API is mod, will be installed into mod directory of the new game. You should now change run directory of the new game, or the Fabric API installation will lost. If you do want to change that settings, you should reinstall Fabric API. install.installer.forge=Forge install.installer.game=Minecraft install.installer.incompatible=Incompatible with %s diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index edd582701..e7eb0ef2e 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -348,6 +348,7 @@ install.installer.choose=選擇 %s 版本 install.installer.depend=需要先安裝 %s install.installer.fabric=Fabric install.installer.fabric-api=Fabric API +install.installer.fabric-api.warning=警告:Fabric API 是 Mod,將會被安裝到新遊戲的 Mod 文件夾,請你在安裝遊戲後不要修改當前遊戲的版本隔離/遊戲運行路徑設置,如果你在之後修改了相關設置,Fabric API 需要被重新安裝。 install.installer.forge=Forge install.installer.game=Minecraft install.installer.incompatible=與 %s 不相容 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 08643d2be..5bc0119cb 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -343,6 +343,7 @@ install.installer.choose=选择 %s 版本 install.installer.depend=需要先安装 %s install.installer.fabric=Fabric install.installer.fabric-api=Fabric API +install.installer.fabric-api.warning=警告:Fabric API 是 Mod,将会被安装到新游戏的 Mod 文件夹,请你在安装游戏后不要修改当前游戏的版本隔离/游戏运行路径设置,如果你在之后修改了相关设置,Fabric API 需要被重新安装。 install.installer.forge=Forge install.installer.game=Minecraft install.installer.incompatible=与 %s 不兼容 diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java index aa7d84e06..dabd8db54 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java @@ -137,7 +137,13 @@ public class DefaultDependencyManager extends AbstractDependencyManager { removedLibraryVersion.set(version); return libraryVersion.getInstallTask(this, version); }) - .thenApplyAsync(patch -> removedLibraryVersion.get().addPatch(patch)) + .thenApplyAsync(patch -> { + if (patch == null) { + return removedLibraryVersion.get(); + } else { + return removedLibraryVersion.get().addPatch(patch); + } + }) .withStage(String.format("hmcl.install.%s:%s", libraryVersion.getLibraryId(), libraryVersion.getSelfVersion())); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricAPIInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricAPIInstallTask.java index f080441af..08f293584 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricAPIInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/fabric/FabricAPIInstallTask.java @@ -18,11 +18,12 @@ package org.jackhuang.hmcl.download.fabric; import org.jackhuang.hmcl.download.DefaultDependencyManager; -import org.jackhuang.hmcl.download.LibraryAnalyzer; -import org.jackhuang.hmcl.game.*; +import org.jackhuang.hmcl.game.Version; +import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; -import java.util.ArrayList; +import java.io.IOException; +import java.net.URL; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -56,14 +57,9 @@ public final class FabricAPIInstallTask extends Task { } @Override - public void execute() { - List libraries = new ArrayList<>(); - libraries.add(new Library(new Artifact("net", "fabricmc", "fabric-api"), null, - new LibrariesDownloadInfo(new LibraryDownloadInfo( - "net/fabricmc/fabric-api/" + remote.getFullVersion() + "/fabric-api-" + remote.getFullVersion() + ".jar", - remote.getUrls().get(0))))); - - setResult(new Version(LibraryAnalyzer.LibraryType.FABRIC_API.getPatchId(), remote.getSelfVersion(), 31000, new Arguments(), null, libraries)); - dependencies.add(dependencyManager.checkLibraryCompletionAsync(getResult(), true)); + public void execute() throws IOException { + dependencies.add(new FileDownloadTask( + new URL(remote.getUrls().get(0)), + dependencyManager.getGameRepository().getRunDirectory(version.getId()).toPath().resolve("mods").resolve("fabric-api-" + remote.getFullVersion() + ".jar").toFile())); } }