diff --git a/src/main/java/org/mcphackers/mcp/tools/versions/DownloadData.java b/src/main/java/org/mcphackers/mcp/tools/versions/DownloadData.java index 3410888..d419b5e 100644 --- a/src/main/java/org/mcphackers/mcp/tools/versions/DownloadData.java +++ b/src/main/java/org/mcphackers/mcp/tools/versions/DownloadData.java @@ -41,20 +41,12 @@ public DownloadData(MCP mcp, Path libraries, Path gameDir, Path client, Path ser Artifact serverArtifact = version.downloads.artifacts.get("server"); if (mcp.getOptions().getSide().includesServer() && serverArtifact != null) { Path serverOut = server; + Path serverExtractTo = null; if (serverArtifact.url.endsWith(".zip")) { serverOut = server.getParent().resolve("minecraft_server.zip"); + serverExtractTo = server; } - queueDownload(serverArtifact, serverOut); - if (serverArtifact.url.endsWith(".zip")) { - try { - FileUtil.extractByExtension(serverOut, serverOut.getParent(), ".jar"); - if (Files.exists(serverOut.getParent().resolve("minecraft-server.jar"))) { - Files.move(serverOut.getParent().resolve("minecraft-server.jar"), server); - } - } catch (IOException e) { - e.printStackTrace(); - } - } + queueDownload(serverArtifact, serverOut, serverExtractTo); } for (DependDownload dependencyDownload : version.libraries) { if (Rule.apply(dependencyDownload.rules)) { @@ -132,11 +124,15 @@ public void setAssets(AssetIndex assets) { } public void queueDownload(IDownload dl, Path baseDir) { + queueDownload(dl, baseDir, null); + } + + private void queueDownload(IDownload dl, Path baseDir, Path extractTo) { if (dl == null) { return; } totalSize += dl.downloadSize(); - downloadQueue.add(new Download(dl, baseDir)); + downloadQueue.add(new Download(dl, baseDir, extractTo)); } public void performDownload(DownloadListener listener) throws IOException { @@ -152,16 +148,29 @@ public void performDownload(DownloadListener listener) throws IOException { if (parent != null) Files.createDirectories(parent); FileUtil.downloadFile(download.downloadURL(), file); } + if (dl.extractTo != null) { + extractServerZip(file, dl.extractTo); + } + } + } + + private void extractServerZip(Path serverZip, Path serverJar) throws IOException { + FileUtil.extractByExtension(serverZip, serverZip.getParent(), ".jar"); + Path extracted = serverZip.getParent().resolve("minecraft-server.jar"); + if (Files.exists(extracted)) { + Files.move(extracted, serverJar); } } private static class Download { IDownload download; Path dir; + Path extractTo; - public Download(IDownload dl, Path path) { + public Download(IDownload dl, Path path, Path extractTo) { download = dl; dir = path; + this.extractTo = extractTo; } } }