diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthCompletionTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthCompletionTask.java index 950218953..043ed8824 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthCompletionTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthCompletionTask.java @@ -25,6 +25,7 @@ import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.FileNotFoundException; import java.io.IOException; @@ -35,6 +36,7 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import static org.jackhuang.hmcl.util.logging.Logger.LOG; @@ -120,7 +122,9 @@ public class ModrinthCompletionTask extends Task { if (modsDirectory.equals(filePath.getParent()) && this.modManager.hasSimpleMod(FileUtils.getName(filePath))) continue; - var task = new FileDownloadTask(file.getDownloads(), filePath); + var task = new FileDownloadTask( + file.getDownloads().stream().map(NetworkUtils::toURI).collect(Collectors.toList()), + filePath); task.setCacheRepository(dependency.getCacheRepository()); task.setCaching(true); dependencies.add(task.withCounter("hmcl.modpack.download")); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthManifest.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthManifest.java index ea717b206..776cc61d0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthManifest.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthManifest.java @@ -24,7 +24,6 @@ import org.jackhuang.hmcl.util.gson.TolerableValidationException; import org.jackhuang.hmcl.util.gson.Validation; import org.jetbrains.annotations.Nullable; -import java.net.URI; import java.util.List; import java.util.Map; import java.util.Objects; @@ -98,10 +97,10 @@ public class ModrinthManifest implements ModpackManifest, Validation { private final String path; private final Map hashes; private final Map env; - private final List downloads; + private final List downloads; private final int fileSize; - public File(String path, Map hashes, Map env, List downloads, int fileSize) { + public File(String path, Map hashes, Map env, List downloads, int fileSize) { this.path = path; this.hashes = hashes; this.env = env; @@ -121,7 +120,7 @@ public class ModrinthManifest implements ModpackManifest, Validation { return env; } - public List getDownloads() { + public List getDownloads() { return downloads; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthModpackExportTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthModpackExportTask.java index c4df5962a..6366f0ef0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthModpackExportTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthModpackExportTask.java @@ -2,11 +2,11 @@ package org.jackhuang.hmcl.mod.modrinth; import java.io.File; import java.io.IOException; -import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; + import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.mod.ModAdviser; @@ -68,7 +68,7 @@ public class ModrinthModpackExportTask extends Task { } } - if (!modrinthVersion.isPresent() && !curseForgeVersion.isPresent()) { + if (modrinthVersion.isEmpty() && curseForgeVersion.isEmpty()) { return null; } @@ -82,22 +82,22 @@ public class ModrinthModpackExportTask extends Task { env.put("client", "optional"); } - List downloads = new ArrayList<>(); + List downloads = new ArrayList<>(); if (modrinthVersion.isPresent()) - downloads.add(new URL(modrinthVersion.get().getFile().getUrl())); + downloads.add(modrinthVersion.get().getFile().getUrl()); if (curseForgeVersion.isPresent()) - downloads.add(new URL(curseForgeVersion.get().getFile().getUrl())); + downloads.add(curseForgeVersion.get().getFile().getUrl()); long fileSize = Files.size(file); if (fileSize > Integer.MAX_VALUE) { LOG.warning("File " + relativePath + " is too large (size: " + fileSize + " bytes), precision may be lost when converting to int"); } return new ModrinthManifest.File( - relativePath, - hashes, - env, - downloads, - (int) fileSize + relativePath, + hashes, + env, + downloads, + (int) fileSize ); } @@ -117,24 +117,24 @@ public class ModrinthModpackExportTask extends Task { Path dirPath = runDirectory.resolve(dir); if (Files.exists(dirPath)) { Files.walk(dirPath) - .filter(Files::isRegularFile) - .forEach(file -> { - try { - String relativePath = runDirectory.relativize(file).normalize().toString().replace(File.separatorChar, '/'); - - if (!info.getWhitelist().contains(relativePath)) { - return; + .filter(Files::isRegularFile) + .forEach(file -> { + try { + String relativePath = runDirectory.relativize(file).normalize().toString().replace(File.separatorChar, '/'); + + if (!info.getWhitelist().contains(relativePath)) { + return; + } + + ModrinthManifest.File fileEntry = tryGetRemoteFile(file, relativePath); + if (fileEntry != null) { + files.add(fileEntry); + filesInManifest.add(relativePath); + } + } catch (IOException e) { + LOG.warning("Failed to process file: " + file, e); } - - ModrinthManifest.File fileEntry = tryGetRemoteFile(file, relativePath); - if (fileEntry != null) { - files.add(fileEntry); - filesInManifest.add(relativePath); - } - } catch (IOException e) { - LOG.warning("Failed to process file: " + file, e); - } - }); + }); } } @@ -152,7 +152,7 @@ public class ModrinthModpackExportTask extends Task { Map dependencies = new HashMap<>(); dependencies.put("minecraft", gameVersion); - + analyzer.getVersion(FORGE).ifPresent(forgeVersion -> dependencies.put("forge", forgeVersion)); analyzer.getVersion(NEO_FORGE).ifPresent(neoForgeVersion ->