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

66 lines
3.0 KiB
Java
Raw Normal View History

2022-10-27 20:54:55 +02:00
package io.gitlab.jfronny.inceptum.launcher.system.exporter;
2022-09-18 15:15:30 +02:00
import io.gitlab.jfronny.commons.io.JFiles;
import io.gitlab.jfronny.inceptum.common.InceptumConfig;
import io.gitlab.jfronny.inceptum.launcher.model.curseforge.CurseforgeModpackManifest;
2022-10-27 20:54:55 +02:00
import io.gitlab.jfronny.inceptum.launcher.system.instance.Instance;
import io.gitlab.jfronny.inceptum.launcher.system.instance.Mod;
2022-09-18 15:15:30 +02:00
import io.gitlab.jfronny.inceptum.launcher.system.source.CurseforgeModSource;
import io.gitlab.jfronny.inceptum.launcher.system.source.ModSource;
2022-10-27 20:54:55 +02:00
import io.gitlab.jfronny.inceptum.launcher.system.instance.ModPath;
2022-09-18 15:15:30 +02:00
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.LinkedHashSet;
import java.util.Set;
public class CurseForgeExporter extends Exporter<CurseforgeModpackManifest> {
private static final String OVERRIDES_DIR_DEFAULT = "overrides";
public CurseForgeExporter() {
2022-09-19 21:26:23 +02:00
super("CurseForge", "zip", OVERRIDES_DIR_DEFAULT);
2022-09-18 15:15:30 +02:00
}
@Override
protected CurseforgeModpackManifest generateManifests(Path root, Instance instance, String version) throws IOException {
2022-09-18 15:15:30 +02:00
CurseforgeModpackManifest manifest = new CurseforgeModpackManifest();
manifest.minecraft = new CurseforgeModpackManifest.Minecraft();
manifest.minecraft.version = instance.meta().getMinecraftVersion();
2022-09-18 15:15:30 +02:00
manifest.manifestType = "minecraftModpack";
manifest.manifestVersion = 1;
manifest.name = instance.getName();
2022-09-18 15:15:30 +02:00
manifest.version = version;
manifest.author = InceptumConfig.authorName;
manifest.overrides = OVERRIDES_DIR_DEFAULT;
manifest.minecraft.modLoaders = new LinkedHashSet<>();
if (instance.isFabric()) {
CurseforgeModpackManifest.Minecraft.ModLoader loader = new CurseforgeModpackManifest.Minecraft.ModLoader();
loader.id = "fabric-" + instance.meta().getLoaderVersion();
2022-09-18 15:15:30 +02:00
loader.primary = true;
manifest.minecraft.modLoaders.add(loader);
}
JFiles.writeObject(root.resolve("manifest.json"), manifest);
return manifest;
}
@Override
protected void addMods(Path root, Instance instance, Iterable<Mod> mods, CurseforgeModpackManifest manifest, Path modsOverrides) throws IOException {
modsLoop: for(Mod mod : mods) {
2022-10-27 20:54:55 +02:00
if (mod.needsInject()) {
Set<ModSource> sources = mod.getMetadata().sources.keySet();
2022-09-18 15:15:30 +02:00
for (ModSource source : sources) {
if (source instanceof CurseforgeModSource cms) {
manifest.files.add(cms.toManifest());
continue modsLoop;
}
}
}
2022-10-27 20:54:55 +02:00
// Not available on CF
Files.createDirectories(modsOverrides);
Files.copy(mod.getJarPath(), modsOverrides.resolve(mod.getJarPath().getFileName().toString()));
2022-09-18 15:15:30 +02:00
}
JFiles.writeObject(root.resolve("manifest.json"), manifest);
}
}