diff --git a/launcher/src/main/java/com/skcraft/launcher/install/InstallExtras.java b/launcher/src/main/java/com/skcraft/launcher/install/InstallExtras.java new file mode 100644 index 0000000..a6e3b69 --- /dev/null +++ b/launcher/src/main/java/com/skcraft/launcher/install/InstallExtras.java @@ -0,0 +1,17 @@ +package com.skcraft.launcher.install; + +import com.skcraft.launcher.model.loader.LocalLoader; +import lombok.Data; + +import java.io.File; +import java.util.HashMap; + +@Data +public class InstallExtras { + private final File contentDir; + private final HashMap loaders; + + public LocalLoader getLoader(String key) { + return loaders.get(key); + } +} diff --git a/launcher/src/main/java/com/skcraft/launcher/model/loader/LocalLoader.java b/launcher/src/main/java/com/skcraft/launcher/model/loader/LocalLoader.java new file mode 100644 index 0000000..d6ff587 --- /dev/null +++ b/launcher/src/main/java/com/skcraft/launcher/model/loader/LocalLoader.java @@ -0,0 +1,12 @@ +package com.skcraft.launcher.model.loader; + +import com.skcraft.launcher.model.modpack.DownloadableFile; +import lombok.Data; + +import java.util.HashMap; + +@Data +public class LocalLoader { + private final LoaderManifest manifest; + private final HashMap localFiles; +} diff --git a/launcher/src/main/java/com/skcraft/launcher/model/loader/ProcessorEntry.java b/launcher/src/main/java/com/skcraft/launcher/model/loader/ProcessorEntry.java index 706d415..dbceece 100644 --- a/launcher/src/main/java/com/skcraft/launcher/model/loader/ProcessorEntry.java +++ b/launcher/src/main/java/com/skcraft/launcher/model/loader/ProcessorEntry.java @@ -1,21 +1,12 @@ package com.skcraft.launcher.model.loader; -import com.google.common.collect.Maps; -import com.skcraft.launcher.install.InstallLog; -import com.skcraft.launcher.install.Installer; -import com.skcraft.launcher.install.ProcessorTask; -import com.skcraft.launcher.install.UpdateCache; -import com.skcraft.launcher.model.minecraft.Side; -import com.skcraft.launcher.model.modpack.DownloadableFile; +import com.skcraft.launcher.install.*; import com.skcraft.launcher.model.modpack.ManifestEntry; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import java.io.File; -import java.util.HashMap; - @Data @AllArgsConstructor @NoArgsConstructor @@ -25,18 +16,9 @@ public class ProcessorEntry extends ManifestEntry { private InstallProcessor processor; @Override - public void install(Installer installer, InstallLog log, UpdateCache cache, File contentDir) throws Exception { - LoaderManifest loaderManifest = getManifest().getLoaders().get(loaderName); + public void install(Installer installer, InstallLog log, UpdateCache cache, InstallExtras extras) throws Exception { + LocalLoader loader = extras.getLoader(loaderName); - HashMap localFilesMap = Maps.newHashMap(); - for (DownloadableFile downloadableFile : loaderManifest.getDownloadableFiles()) { - if (downloadableFile.getSide() != Side.CLIENT) continue; - - DownloadableFile.LocalFile localFile = downloadableFile.download(installer, getManifest()); - - localFilesMap.put(localFile.getName(), localFile); - } - - installer.queueLate(new ProcessorTask(processor, loaderManifest, getManifest(), localFilesMap)); + installer.queueLate(new ProcessorTask(processor, loader.getManifest(), getManifest(), loader.getLocalFiles())); } } diff --git a/launcher/src/main/java/com/skcraft/launcher/model/modpack/FileInstall.java b/launcher/src/main/java/com/skcraft/launcher/model/modpack/FileInstall.java index 3964787..b7c4cd6 100644 --- a/launcher/src/main/java/com/skcraft/launcher/model/modpack/FileInstall.java +++ b/launcher/src/main/java/com/skcraft/launcher/model/modpack/FileInstall.java @@ -10,10 +10,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; import com.google.common.io.Files; -import com.skcraft.launcher.install.InstallLog; -import com.skcraft.launcher.install.InstallLogFileMover; -import com.skcraft.launcher.install.Installer; -import com.skcraft.launcher.install.UpdateCache; +import com.skcraft.launcher.install.*; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; @@ -50,13 +47,13 @@ public class FileInstall extends ManifestEntry { @Override public void install(@NonNull Installer installer, @NonNull InstallLog log, - @NonNull UpdateCache cache, @NonNull File contentDir) throws IOException { + @NonNull UpdateCache cache, InstallExtras extras) throws IOException { if (getWhen() != null && !getWhen().matches()) { return; } String targetPath = getTargetPath(); - File targetFile = new File(contentDir, targetPath); + File targetFile = new File(extras.getContentDir(), targetPath); String fileVersion = getImpliedVersion(); URL url = concat(getManifest().getObjectsUrl(), getLocation()); diff --git a/launcher/src/main/java/com/skcraft/launcher/model/modpack/ManifestEntry.java b/launcher/src/main/java/com/skcraft/launcher/model/modpack/ManifestEntry.java index e4f503a..776e450 100644 --- a/launcher/src/main/java/com/skcraft/launcher/model/modpack/ManifestEntry.java +++ b/launcher/src/main/java/com/skcraft/launcher/model/modpack/ManifestEntry.java @@ -9,6 +9,7 @@ package com.skcraft.launcher.model.modpack; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.skcraft.launcher.install.InstallExtras; import com.skcraft.launcher.install.InstallLog; import com.skcraft.launcher.install.Installer; import com.skcraft.launcher.install.UpdateCache; @@ -16,8 +17,6 @@ import com.skcraft.launcher.model.loader.ProcessorEntry; import lombok.Data; import lombok.ToString; -import java.io.File; - @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -35,6 +34,6 @@ public abstract class ManifestEntry { private Manifest manifest; private Condition when; - public abstract void install(Installer installer, InstallLog log, UpdateCache cache, File contentDir) throws Exception; + public abstract void install(Installer installer, InstallLog log, UpdateCache cache, InstallExtras extras) throws Exception; } diff --git a/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java b/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java index 9aaa6db..cfb3d4f 100644 --- a/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java +++ b/launcher/src/main/java/com/skcraft/launcher/update/BaseUpdater.java @@ -8,6 +8,7 @@ package com.skcraft.launcher.update; import com.google.common.base.Strings; import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; import com.skcraft.launcher.AssetsRoot; import com.skcraft.launcher.Instance; import com.skcraft.launcher.Launcher; @@ -16,10 +17,9 @@ import com.skcraft.launcher.dialog.FeatureSelectionDialog; import com.skcraft.launcher.dialog.ProgressDialog; import com.skcraft.launcher.install.*; import com.skcraft.launcher.model.loader.LoaderManifest; -import com.skcraft.launcher.model.minecraft.Asset; -import com.skcraft.launcher.model.minecraft.AssetsIndex; -import com.skcraft.launcher.model.minecraft.Library; -import com.skcraft.launcher.model.minecraft.VersionManifest; +import com.skcraft.launcher.model.loader.LocalLoader; +import com.skcraft.launcher.model.minecraft.*; +import com.skcraft.launcher.model.modpack.DownloadableFile; import com.skcraft.launcher.model.modpack.Feature; import com.skcraft.launcher.model.modpack.Manifest; import com.skcraft.launcher.model.modpack.ManifestEntry; @@ -127,8 +127,24 @@ public abstract class BaseUpdater { } } + // Download any extra processing files for each loader + HashMap loaders = Maps.newHashMap(); + for (Map.Entry entry : manifest.getLoaders().entrySet()) { + HashMap localFilesMap = Maps.newHashMap(); + + for (DownloadableFile file : entry.getValue().getDownloadableFiles()) { + if (file.getSide() != Side.CLIENT) continue; + + DownloadableFile.LocalFile localFile = file.download(installer, manifest); + localFilesMap.put(localFile.getName(), localFile); + } + + loaders.put(entry.getKey(), new LocalLoader(entry.getValue(), localFilesMap)); + } + + InstallExtras extras = new InstallExtras(contentDir, loaders); for (ManifestEntry entry : manifest.getTasks()) { - entry.install(installer, currentLog, updateCache, contentDir); + entry.install(installer, currentLog, updateCache, extras); } executeOnCompletion.add(new Runnable() {