diff --git a/launcher-builder/src/main/java/com/skcraft/launcher/builder/PackageBuilder.java b/launcher-builder/src/main/java/com/skcraft/launcher/builder/PackageBuilder.java index 2b2e9a1..a709d82 100644 --- a/launcher-builder/src/main/java/com/skcraft/launcher/builder/PackageBuilder.java +++ b/launcher-builder/src/main/java/com/skcraft/launcher/builder/PackageBuilder.java @@ -26,7 +26,6 @@ import com.skcraft.launcher.model.minecraft.ReleaseList; import com.skcraft.launcher.model.minecraft.Version; import com.skcraft.launcher.model.minecraft.VersionManifest; import com.skcraft.launcher.model.modpack.Manifest; -import com.skcraft.launcher.util.Environment; import com.skcraft.launcher.util.HttpRequest; import com.skcraft.launcher.util.SimpleLogFormatter; import lombok.Getter; @@ -178,52 +177,57 @@ public class PackageBuilder { loaderLibraries.addAll(result.getLoaderLibraries()); installerLibraries.addAll(result.getProcessorLibraries()); jarMavens.addAll(result.getJarMavens()); + } else { + log.warning("Loader " + file.getName() + " was skipped due to missing metadata. " + + "Is it really a loader JAR?"); } } public void downloadLibraries(File librariesDir) throws IOException, InterruptedException { logSection("Downloading libraries..."); - // TODO: Download libraries for different environments -- As of writing, this is not an issue - Environment env = Environment.getInstance(); - for (Library library : Iterables.concat(loaderLibraries, installerLibraries)) { - Library.Artifact artifact = library.getArtifact(env); - File outputPath = new File(librariesDir, artifact.getPath()); + library.ensureDownloadsExist(); - if (!outputPath.exists()) { - Files.createParentDirs(outputPath); - boolean found = false; + for (Library.Artifact artifact : library.getDownloads().getAllArtifacts()) { + File outputPath = new File(librariesDir, artifact.getPath()); - // Try just the URL, it might be a full URL to the file - if (!artifact.getUrl().isEmpty()) { - found = tryDownloadLibrary(library, artifact, artifact.getUrl(), outputPath); - } + if (!outputPath.exists()) { + Files.createParentDirs(outputPath); + boolean found = false; - // Look inside the loader JARs - if (!found) { - for (URL base : jarMavens) { - found = tryFetchLibrary(library, new URL(base, artifact.getPath()), outputPath); - if (found) break; + // Try just the URL, it might be a full URL to the file + if (!artifact.getUrl().isEmpty()) { + found = tryDownloadLibrary(library, artifact, artifact.getUrl(), outputPath); } - } - // Assume artifact URL is a maven repository URL and try that - if (!found) { - URL url = LauncherUtils.concat(url(artifact.getUrl()), artifact.getPath()); - found = tryDownloadLibrary(library, artifact, url.toString(), outputPath); - } - - // Try each repository if not found yet - if (!found) { - for (String baseUrl : mavenRepos) { - found = tryDownloadLibrary(library, artifact, baseUrl + artifact.getPath(), outputPath); - if (found) break; + // Look inside the loader JARs + if (!found) { + for (URL base : jarMavens) { + found = tryFetchLibrary(library, new URL(base, artifact.getPath()), outputPath); + if (found) break; + } } - } - if (!found) { - log.warning("!! Failed to download the library " + library.getName() + " -- this means your copy of the libraries will lack this file"); + // Assume artifact URL is a maven repository URL and try that + if (!found) { + URL url = LauncherUtils.concat(url(artifact.getUrl()), artifact.getPath()); + found = tryDownloadLibrary(library, artifact, url.toString(), outputPath); + } + + // Try each repository if not found yet + if (!found) { + for (String baseUrl : mavenRepos) { + found = tryDownloadLibrary(library, artifact, baseUrl + artifact.getPath(), + outputPath); + if (found) break; + } + } + + if (!found) { + log.warning("!! Failed to download the library " + library.getName() + + " -- this means your copy of the libraries will lack this file"); + } } } } diff --git a/launcher/src/main/java/com/skcraft/launcher/model/minecraft/Library.java b/launcher/src/main/java/com/skcraft/launcher/model/minecraft/Library.java index a5e0047..5ebc43c 100644 --- a/launcher/src/main/java/com/skcraft/launcher/model/minecraft/Library.java +++ b/launcher/src/main/java/com/skcraft/launcher/model/minecraft/Library.java @@ -9,6 +9,7 @@ package com.skcraft.launcher.model.minecraft; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.google.common.base.Joiner; import com.google.common.base.Splitter; +import com.google.common.collect.Lists; import com.skcraft.launcher.util.Environment; import lombok.Data; @@ -71,6 +72,12 @@ public class Library { } } + public void ensureDownloadsExist() { + if (getDownloads() == null) { + setServerreq(true); // BACKWARDS COMPATIBILITY + } + } + /** * BACKWARDS COMPATIBILITY: * Some library definitions only come with a "name" key and don't trigger any other compatibility measures. @@ -81,9 +88,7 @@ public class Library { * the library name and using that. */ public Artifact getArtifact(Environment environment) { - if (getDownloads() == null) { - setServerreq(true); // BACKWARDS COMPATIBILITY - } + ensureDownloadsExist(); String nativeString = getNativeString(environment); @@ -147,6 +152,18 @@ public class Library { public static class Downloads { private Artifact artifact; private Map classifiers; + + public List getAllArtifacts() { + List artifacts = Lists.newArrayList(); + + if (artifact != null) + artifacts.add(artifact); + + if (classifiers != null) + artifacts.addAll(classifiers.values()); + + return artifacts; + } } /**