58 lines
2.5 KiB
Java
58 lines
2.5 KiB
Java
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.net.URI;
|
|
import java.nio.file.FileSystem;
|
|
import java.nio.file.FileSystems;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.HashMap;
|
|
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<String> 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)) {
|
|
for (Path path1 : Files.list(libFs.getPath(".")).toList()) {
|
|
Utils.copyRecursive(path1, Inceptum.NATIVES_DIR.resolve(InstanceMeta.getMinecraftVersion(version.id)));
|
|
}
|
|
}
|
|
catch (Throwable t) {
|
|
Files.delete(path);
|
|
throw new IOException("Could not extract native", t);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|