From 46869ad5f7c4cbbd4976dd89f545730f5c0992d9 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 2 Feb 2021 12:13:37 +0800 Subject: [PATCH] fix: not update game/addons for server modpack --- .../server/ServerModpackCompletionTask.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackCompletionTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackCompletionTask.java index dc3d89556..58fb67051 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackCompletionTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/server/ServerModpackCompletionTask.java @@ -20,6 +20,7 @@ package org.jackhuang.hmcl.mod.server; import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.download.DefaultDependencyManager; +import org.jackhuang.hmcl.download.GameBuilder; import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.mod.ModpackConfiguration; import org.jackhuang.hmcl.task.FileDownloadTask; @@ -46,6 +47,7 @@ import static org.jackhuang.hmcl.util.Hex.encodeHex; public class ServerModpackCompletionTask extends Task { + private final DefaultDependencyManager dependencyManager; private final DefaultGameRepository repository; private final String version; private ModpackConfiguration manifest; @@ -58,6 +60,7 @@ public class ServerModpackCompletionTask extends Task { } public ServerModpackCompletionTask(DefaultDependencyManager dependencyManager, String version, ModpackConfiguration manifest) { + this.dependencyManager = dependencyManager; this.repository = dependencyManager.getGameRepository(); this.version = version; @@ -97,6 +100,10 @@ public class ServerModpackCompletionTask extends Task { return dependent == null ? Collections.emptySet() : Collections.singleton(dependent); } + private Map toMap(Collection addons) { + return addons.stream().collect(Collectors.toMap(ServerModpackManifest.Addon::getId, ServerModpackManifest.Addon::getVersion)); + } + @Override public void execute() throws Exception { if (manifest == null || StringUtils.isBlank(manifest.getManifest().getFileApi())) return; @@ -107,6 +114,17 @@ public class ServerModpackCompletionTask extends Task { throw new IOException(e); } + Map oldAddons = toMap(manifest.getManifest().getAddons()); + Map newAddons = toMap(remoteManifest.getAddons()); + if (!Objects.equals(oldAddons, newAddons)) { + GameBuilder builder = dependencyManager.gameBuilder().name(version); + for (ServerModpackManifest.Addon addon : remoteManifest.getAddons()) { + builder.version(addon.getId(), addon.getVersion()); + } + + dependencies.add(builder.buildAsync()); + } + Path rootPath = repository.getVersionRoot(version).toPath(); Map files = manifest.getManifest().getFiles().stream() .collect(Collectors.toMap(ModpackConfiguration.FileInformation::getPath,