From 9d11ed49fbf2ab56e596e05c90be48e193247b93 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sat, 16 May 2020 18:51:05 +0200 Subject: [PATCH] Added basic Forge and Curse support --- .gitignore | 3 +- .../anvil/addonscript/curse/CurseTools.java | 32 +++++++++++ .../anvil/addonscript/curse/ManifestJSON.java | 53 +++++++++++++++++ .../anvil/addonscript/forge/ForgeTools.java | 57 +++++++++++++++++++ .../java/ley/anvil/addonscript/util/JSON.java | 14 +++++ .../anvil/addonscript/v1/AddonscriptJSON.java | 10 +--- 6 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 src/main/java/ley/anvil/addonscript/curse/CurseTools.java create mode 100644 src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java create mode 100644 src/main/java/ley/anvil/addonscript/forge/ForgeTools.java diff --git a/.gitignore b/.gitignore index f432552..d673af5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .gradle .idea -src/test \ No newline at end of file +src/test +build \ No newline at end of file diff --git a/src/main/java/ley/anvil/addonscript/curse/CurseTools.java b/src/main/java/ley/anvil/addonscript/curse/CurseTools.java new file mode 100644 index 0000000..4296f00 --- /dev/null +++ b/src/main/java/ley/anvil/addonscript/curse/CurseTools.java @@ -0,0 +1,32 @@ +package ley.anvil.addonscript.curse; + +import ley.anvil.addonscript.v1.AddonscriptJSON; + +import java.util.ArrayList; + +public class CurseTools { + + public static void addCurseRepo(AddonscriptJSON as) { + if (as.repositories == null) { + as.repositories = new ArrayList<>(); + } + boolean alreadyAdded = false; + for (AddonscriptJSON.Repository repo : as.repositories) { + if (repo.id != null && repo.id.equals("curse")) { + alreadyAdded = true; + } + } + if (!alreadyAdded) { + AddonscriptJSON.Repository curseRepo = new AddonscriptJSON.Repository(); + curseRepo.id = "curse"; + curseRepo.type = "curseforge"; + curseRepo.url = "https://www.curseforge.com/minecraft/"; + as.repositories.add(curseRepo); + } + } + + public static String toArtifact(int projectID, int fileID) { + return "curse:" + projectID + ":" + fileID; + } + +} diff --git a/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java b/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java new file mode 100644 index 0000000..fce3726 --- /dev/null +++ b/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java @@ -0,0 +1,53 @@ +package ley.anvil.addonscript.curse; + +import ley.anvil.addonscript.util.JSON; +import ley.anvil.addonscript.v1.AddonscriptJSON; + +import java.util.List; + +public class ManifestJSON extends JSON { + + public ManifestJSON fromJSON(String json) { + return gson.fromJson(json, ManifestJSON.class); + } + + public Minecraft minecraft; + + public String manifestType; + + public String manifestVersion; + + public String name; + + public String version; + + public String author; + + public List files; + + public String overrides = "overrides"; + + public static class Minecraft { + public String version; + public List modLoaders; + } + + public static class Modloader { + public String id; + public boolean primary; + } + + public static class File { + public int projectID; + public int fileID; + public boolean required; + + public AddonscriptJSON.Relation toRelation() { + AddonscriptJSON.Relation rel = new AddonscriptJSON.Relation(); + rel.file = CurseTools.toArtifact(projectID, fileID); + return rel; + } + + } + +} diff --git a/src/main/java/ley/anvil/addonscript/forge/ForgeTools.java b/src/main/java/ley/anvil/addonscript/forge/ForgeTools.java new file mode 100644 index 0000000..58713d9 --- /dev/null +++ b/src/main/java/ley/anvil/addonscript/forge/ForgeTools.java @@ -0,0 +1,57 @@ +package ley.anvil.addonscript.forge; + +import ley.anvil.addonscript.v1.AddonscriptJSON; + +import java.util.ArrayList; + +public class ForgeTools { + + public static void addForgeRepo(AddonscriptJSON as) { + if (as.repositories == null) { + as.repositories = new ArrayList<>(); + } + boolean alreadyAdded = false; + for (AddonscriptJSON.Repository repo : as.repositories) { + if (repo.id != null && repo.id.equals("forge")) { + alreadyAdded = true; + } + } + if (!alreadyAdded) { + AddonscriptJSON.Repository repo = new AddonscriptJSON.Repository(); + repo.id = "forge"; + repo.type = "forge"; + repo.url = "https://files.minecraftforge.net/"; + as.repositories.add(repo); + } + } + + public static void addForge(AddonscriptJSON as, int version, String forgeVersion) { + addForgeRepo(as); + if (as.versions == null) { + as.versions = new ArrayList<>(); + as.versions.add(new AddonscriptJSON.Version()); + } + AddonscriptJSON.Version ver = null; + for (AddonscriptJSON.Version v : as.versions) { + if (v.versionid == version || v.versionid == -1) { + ver = v; + } + } + if (ver != null) { + AddonscriptJSON.Relation rel = new AddonscriptJSON.Relation(); + rel.type = "required"; + if (as.type != null && as.type.equals("modpack")) { + rel.type = "included"; + } + rel.installer = "internal.forge"; + rel.file = forgeVersion; + if (ver.relations == null) { + ver.relations = new ArrayList<>(); + } + ver.relations.add(rel); + } + } + + + +} diff --git a/src/main/java/ley/anvil/addonscript/util/JSON.java b/src/main/java/ley/anvil/addonscript/util/JSON.java index 3019f8d..1d8e27b 100644 --- a/src/main/java/ley/anvil/addonscript/util/JSON.java +++ b/src/main/java/ley/anvil/addonscript/util/JSON.java @@ -3,6 +3,10 @@ package ley.anvil.addonscript.util; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + public abstract class JSON { public static Gson gson = new GsonBuilder().create(); @@ -15,5 +19,15 @@ public abstract class JSON { public String toString() { return toJSON(); } + + public String toFormattedJSON() { + return formatJSON(toJSON()); + } + + + public static String formatJSON(String json) { + //TODO JSON formatting + return json; + } } diff --git a/src/main/java/ley/anvil/addonscript/v1/AddonscriptJSON.java b/src/main/java/ley/anvil/addonscript/v1/AddonscriptJSON.java index a1fe545..7052397 100644 --- a/src/main/java/ley/anvil/addonscript/v1/AddonscriptJSON.java +++ b/src/main/java/ley/anvil/addonscript/v1/AddonscriptJSON.java @@ -138,7 +138,7 @@ public class AddonscriptJSON extends JSON { public String id; /** * The type of this repository - * Currently supported: curseforge + * Currently supported: curseforge, forge */ public String type; /** @@ -195,7 +195,8 @@ public class AddonscriptJSON extends JSON { */ public String installer = "internal.dir:mods"; /** - * A link to the file or another Addonscript JSON file + * A link to the file, a link to another Addonscript JSON file or an artifact String + * Artifact String format: : */ public String file; /** @@ -203,11 +204,6 @@ public class AddonscriptJSON extends JSON { * Supported type: included, required, recommended, optional or incompatible */ public String type = "included"; - /** - * A String which represents the file as an artifact. - * Format: : - */ - public String artifact; /** * Informations about the version of the addons * Only useable when using a link to a Addonscript JSON file