Inceptum/launcher/src/main/java/io/gitlab/jfronny/inceptum/launcher/system/exporter/CurseForgeExporter.java

66 lines
2.7 KiB
Java

package io.gitlab.jfronny.inceptum.launcher.system.exporter;
import io.gitlab.jfronny.inceptum.launcher.model.curseforge.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<CurseforgeModpackManifest> {
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.getGameVersion(),
new LinkedHashSet<>()
),
"minecraftModpack",
1,
instance.getName(),
version,
InceptumConfig.authorName,
null, // files
OVERRIDES_DIR_DEFAULT
);
if (instance.isFabric()) {
manifest.minecraft().modLoaders().add(new CurseforgeModpackManifest.Minecraft.ModLoader(
"fabric-" + instance.getLoaderVersion(),
true
));
}
GC_CurseforgeModpackManifest.write(manifest, root.resolve("manifest.json"));
return manifest;
}
@Override
protected void addMods(Path root, Instance instance, Iterable<Mod> mods, CurseforgeModpackManifest manifest, Path modsOverrides) throws IOException {
modsLoop: for (Mod mod : mods) {
if (mod.getNeedsInject()) {
for (ModSource source : mod.getMetadata().sources().keySet()) {
if (source instanceof CurseforgeModSource cms) {
manifest.files().add(cms.toManifest());
continue modsLoop;
}
}
}
// Not available on CF
Files.createDirectories(modsOverrides);
Files.copy(mod.getJarPath(), modsOverrides.resolve(mod.getJarPath().getFileName().toString()));
}
GC_CurseforgeModpackManifest.write(manifest, root.resolve("manifest.json"));
}
}