package io.gitlab.jfronny.inceptum.install.steps; import io.gitlab.jfronny.inceptum.Inceptum; import io.gitlab.jfronny.inceptum.install.SetupStepInfo; import io.gitlab.jfronny.inceptum.install.Step; import io.gitlab.jfronny.inceptum.model.inceptum.ArtifactInfo; import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta; import io.gitlab.jfronny.inceptum.model.mojang.VersionInfo; import io.gitlab.jfronny.inceptum.util.Utils; import io.gitlab.jfronny.inceptum.util.VersionInfoLibraryResolver; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; public class DownloadLibrariesStep implements Step { @Override public void execute(SetupStepInfo info, AtomicBoolean stopThread) throws IOException { execute(info.version(), stopThread, info.currentState()); } public static void execute(VersionInfo version, AtomicBoolean stopThread, AtomicReference currentState) throws IOException { for (ArtifactInfo artifact : VersionInfoLibraryResolver.getRelevant(version)) { if (stopThread.get()) return; Path path = Inceptum.LIBRARIES_DIR.resolve(artifact.path); if (!Files.exists(path)) { currentState.set("Downloading library: " + artifact.path); Inceptum.LOGGER.info(currentState.get()); if (!Files.exists(path.getParent())) Files.createDirectories(path.getParent()); if (!artifact.url.endsWith(".jar")) { Inceptum.LOGGER.info("Not a valid URL for a jar: " + artifact.url); continue; } Utils.downloadFile(artifact.url, artifact.sha1, path); } if (artifact.isNative) { currentState.set("Extracting natives"); Inceptum.LOGGER.info(currentState.get()); try (FileSystem libFs = Utils.openZipFile(path, false)) { Utils.copyContent(libFs.getPath("."), Inceptum.NATIVES_DIR.resolve(InstanceMeta.getMinecraftVersion(version.id))); } catch (Throwable t) { Files.delete(path); throw new IOException("Could not extract native", t); } } } } }