feat(auto-installing): download Fabric-API to mod folder.

This commit is contained in:
huanghongxun 2021-09-13 00:09:19 +08:00
parent 5c9deb129d
commit e821f7cb09
6 changed files with 24 additions and 13 deletions

View File

@ -34,7 +34,9 @@ import javafx.scene.layout.VBox;
import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.DownloadProvider;
import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.RemoteVersion;
import org.jackhuang.hmcl.game.HMCLGameRepository; import org.jackhuang.hmcl.game.HMCLGameRepository;
import org.jackhuang.hmcl.ui.Controllers;
import org.jackhuang.hmcl.ui.InstallerItem; 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.RequiredValidator;
import org.jackhuang.hmcl.ui.construct.Validator; import org.jackhuang.hmcl.ui.construct.Validator;
import org.jackhuang.hmcl.ui.wizard.WizardController; import org.jackhuang.hmcl.ui.wizard.WizardController;
@ -68,6 +70,10 @@ public class InstallersPage extends Control implements WizardPage {
String libraryId = library.getLibraryId(); String libraryId = library.getLibraryId();
if (libraryId.equals("game")) continue; if (libraryId.equals("game")) continue;
library.action.set(e -> { 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) if (library.incompatibleLibraryName.get() == null)
controller.onNext(new VersionsPage(controller, i18n("install.installer.choose", i18n("install.installer." + libraryId)), gameVersion, downloadProvider, libraryId, () -> controller.onPrev(false))); controller.onNext(new VersionsPage(controller, i18n("install.installer.choose", i18n("install.installer." + libraryId)), gameVersion, downloadProvider, libraryId, () -> controller.onPrev(false)));
}); });

View File

@ -343,6 +343,7 @@ install.installer.choose=Choose a %s version
install.installer.depend=Depends on %s install.installer.depend=Depends on %s
install.installer.fabric=Fabric install.installer.fabric=Fabric
install.installer.fabric-api=Fabric API 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.forge=Forge
install.installer.game=Minecraft install.installer.game=Minecraft
install.installer.incompatible=Incompatible with %s install.installer.incompatible=Incompatible with %s

View File

@ -348,6 +348,7 @@ install.installer.choose=選擇 %s 版本
install.installer.depend=需要先安裝 %s install.installer.depend=需要先安裝 %s
install.installer.fabric=Fabric install.installer.fabric=Fabric
install.installer.fabric-api=Fabric API install.installer.fabric-api=Fabric API
install.installer.fabric-api.warning=警告Fabric API 是 Mod將會被安裝到新遊戲的 Mod 文件夾,請你在安裝遊戲後不要修改當前遊戲的版本隔離/遊戲運行路徑設置如果你在之後修改了相關設置Fabric API 需要被重新安裝。
install.installer.forge=Forge install.installer.forge=Forge
install.installer.game=Minecraft install.installer.game=Minecraft
install.installer.incompatible=與 %s 不相容 install.installer.incompatible=與 %s 不相容

View File

@ -343,6 +343,7 @@ install.installer.choose=选择 %s 版本
install.installer.depend=需要先安装 %s install.installer.depend=需要先安装 %s
install.installer.fabric=Fabric install.installer.fabric=Fabric
install.installer.fabric-api=Fabric API install.installer.fabric-api=Fabric API
install.installer.fabric-api.warning=警告Fabric API 是 Mod将会被安装到新游戏的 Mod 文件夹,请你在安装游戏后不要修改当前游戏的版本隔离/游戏运行路径设置如果你在之后修改了相关设置Fabric API 需要被重新安装。
install.installer.forge=Forge install.installer.forge=Forge
install.installer.game=Minecraft install.installer.game=Minecraft
install.installer.incompatible=与 %s 不兼容 install.installer.incompatible=与 %s 不兼容

View File

@ -137,7 +137,13 @@ public class DefaultDependencyManager extends AbstractDependencyManager {
removedLibraryVersion.set(version); removedLibraryVersion.set(version);
return libraryVersion.getInstallTask(this, 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())); .withStage(String.format("hmcl.install.%s:%s", libraryVersion.getLibraryId(), libraryVersion.getSelfVersion()));
} }

View File

@ -18,11 +18,12 @@
package org.jackhuang.hmcl.download.fabric; package org.jackhuang.hmcl.download.fabric;
import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.game.Version;
import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.task.FileDownloadTask;
import org.jackhuang.hmcl.task.Task; 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.Collection;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -56,14 +57,9 @@ public final class FabricAPIInstallTask extends Task<Version> {
} }
@Override @Override
public void execute() { public void execute() throws IOException {
List<Library> libraries = new ArrayList<>(); dependencies.add(new FileDownloadTask(
libraries.add(new Library(new Artifact("net", "fabricmc", "fabric-api"), null, new URL(remote.getUrls().get(0)),
new LibrariesDownloadInfo(new LibraryDownloadInfo( dependencyManager.getGameRepository().getRunDirectory(version.getId()).toPath().resolve("mods").resolve("fabric-api-" + remote.getFullVersion() + ".jar").toFile()));
"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));
} }
} }