package io.gitlab.jfronny.inceptum.launcher.system.exporter; import gsoncompile.extensions.io.gitlab.jfronny.inceptum.launcher.model.curseforge.CurseforgeModpackManifest.GC_CurseforgeModpackManifest; import io.gitlab.jfronny.inceptum.common.InceptumConfig; import io.gitlab.jfronny.inceptum.launcher.model.curseforge.CurseforgeModpackManifest; import io.gitlab.jfronny.inceptum.launcher.system.instance.Instance; import io.gitlab.jfronny.inceptum.launcher.system.instance.Mod; import io.gitlab.jfronny.inceptum.launcher.system.source.CurseforgeModSource; import io.gitlab.jfronny.inceptum.launcher.system.source.ModSource; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.LinkedHashSet; public class CurseForgeExporter extends Exporter { private static final String OVERRIDES_DIR_DEFAULT = "overrides"; public CurseForgeExporter() { super("CurseForge", "zip", OVERRIDES_DIR_DEFAULT); } @Override protected CurseforgeModpackManifest generateManifests(Path root, Instance instance, String version) throws IOException { CurseforgeModpackManifest manifest = new CurseforgeModpackManifest( new CurseforgeModpackManifest.Minecraft( instance.gameVersion, new LinkedHashSet<>() ), "minecraftModpack", 1, instance.name, version, InceptumConfig.authorName, null, // files OVERRIDES_DIR_DEFAULT ); if (instance.isFabric) { manifest.minecraft.modLoaders.add(new CurseforgeModpackManifest.Minecraft.ModLoader( "fabric-" + instance.loaderVersion, true )); } GC_CurseforgeModpackManifest.write(manifest, root.resolve("manifest.json")); return manifest; } @Override protected void addMods(Path root, Instance instance, Iterable mods, CurseforgeModpackManifest manifest, Path modsOverrides) throws IOException { modsLoop: for (Mod mod : mods) { if (mod.needsInject) { for (ModSource source : mod.metadata.sources.keySet()) { if (source instanceof CurseforgeModSource cms) { manifest.files.add(cms.toManifest()); continue modsLoop; } } } // Not available on CF Files.createDirectories(modsOverrides); Files.copy(mod.jarPath, modsOverrides.resolve(mod.jarPath.fileName.toString())); } GC_CurseforgeModpackManifest.write(manifest, root.resolve("manifest.json")); } }