diff --git a/src/main/java/ley/anvil/addonscript/curse/CurseTools.java b/src/main/java/ley/anvil/addonscript/curse/CurseTools.java index 4296f00..956382b 100644 --- a/src/main/java/ley/anvil/addonscript/curse/CurseTools.java +++ b/src/main/java/ley/anvil/addonscript/curse/CurseTools.java @@ -1,5 +1,6 @@ package ley.anvil.addonscript.curse; +import com.therandomlabs.curseapi.file.CurseFile; import ley.anvil.addonscript.v1.AddonscriptJSON; import java.util.ArrayList; diff --git a/src/main/java/ley/anvil/addonscript/curse/CurseforgeRepository.java b/src/main/java/ley/anvil/addonscript/curse/CurseforgeRepository.java new file mode 100644 index 0000000..5a125fe --- /dev/null +++ b/src/main/java/ley/anvil/addonscript/curse/CurseforgeRepository.java @@ -0,0 +1,37 @@ +package ley.anvil.addonscript.curse; + +import com.therandomlabs.curseapi.CurseAPI; +import com.therandomlabs.curseapi.CurseException; +import com.therandomlabs.curseapi.file.CurseFile; +import ley.anvil.addonscript.util.IRepository; + +import java.util.Optional; + +public class CurseforgeRepository implements IRepository { + + @Override + public String getFileURL(String artifact) { + CurseFile file = getFile(artifact); + if (file != null) { + return file.downloadURL().toString(); + } + return ""; + } + + public CurseFile getFile(String artifact) { + String[] parts = artifact.split(":"); + if (parts.length >= 2) { + int projectID = Integer.parseInt(parts[0]); + int fileID = Integer.parseInt(parts[1]); + try { + Optional file = CurseAPI.file(projectID, fileID); + if (file.isPresent()) + return file.get(); + } catch (CurseException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java b/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java index fce3726..d69b8ce 100644 --- a/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java +++ b/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java @@ -1,8 +1,10 @@ package ley.anvil.addonscript.curse; +import ley.anvil.addonscript.forge.ForgeTools; import ley.anvil.addonscript.util.JSON; import ley.anvil.addonscript.v1.AddonscriptJSON; +import java.util.ArrayList; import java.util.List; public class ManifestJSON extends JSON { @@ -35,6 +37,18 @@ public class ManifestJSON extends JSON { public static class Modloader { public String id; public boolean primary; + + public AddonscriptJSON.Relation toRelation() { + if (id != null && id.startsWith("forge-")) { + AddonscriptJSON.Relation rel = new AddonscriptJSON.Relation(); + rel.installer = "internal.forge"; + rel.type = "included"; + rel.file = id.replaceAll("forge-", ""); + return rel; + } + return null; + } + } public static class File { @@ -50,4 +64,55 @@ public class ManifestJSON extends JSON { } + AddonscriptJSON.Contributor getAuthor() { + AddonscriptJSON.Contributor author = new AddonscriptJSON.Contributor(); + author.name = this.author; + author.roles = new ArrayList<>(); + author.roles.add("author"); + return author; + } + + AddonscriptJSON.Version getVersion() { + AddonscriptJSON.Version version = new AddonscriptJSON.Version(); + version.versionid = -1; + version.versionname = this.version; + version.mcversion = new ArrayList<>(); + version.mcversion.add(minecraft.version); + version.files = new ArrayList<>(); + version.relations = new ArrayList<>(); + + AddonscriptJSON.File overrides = new AddonscriptJSON.File(); + overrides.id = "overrides"; + overrides.file = this.overrides; + version.files.add(overrides); + + for (File f : files) { + version.relations.add(f.toRelation()); + } + + if (minecraft != null) { + for (Modloader l : minecraft.modLoaders) { + version.relations.add(l.toRelation()); + } + } + + return version; + } + + public AddonscriptJSON toAS() { + AddonscriptJSON as = AddonscriptJSON.create(); + as.type = "modpack"; + as.id = name; + as.meta = new AddonscriptJSON.Meta(); + as.meta.contributors = new ArrayList<>(); + as.versions = new ArrayList<>(); + as.meta.contributors.add(getAuthor()); + as.versions.add(getVersion()); + + CurseTools.addCurseRepo(as); + ForgeTools.addForgeRepo(as); + + return as; + } + } diff --git a/src/main/java/ley/anvil/addonscript/util/IRepository.java b/src/main/java/ley/anvil/addonscript/util/IRepository.java new file mode 100644 index 0000000..7ee2e96 --- /dev/null +++ b/src/main/java/ley/anvil/addonscript/util/IRepository.java @@ -0,0 +1,7 @@ +package ley.anvil.addonscript.util; + +public interface IRepository { + + String getFileURL(String artifact); + +}