From 0eb0c09202b3b58ee256e995cbdea1c4f880c4f6 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Mon, 27 Jul 2020 20:59:21 +0200 Subject: [PATCH] Add Version system --- build.gradle | 3 +- .../anvil/addonscript/curse/ManifestJSON.java | 6 ++-- .../anvil/addonscript/wrapper/ASWrapper.java | 10 +++++- .../ArtifactDestination.java | 2 +- .../anvil/addonscript/wrapper/Versions.java | 36 +++++++++++++++++++ 5 files changed, 51 insertions(+), 6 deletions(-) rename src/main/java/ley/anvil/addonscript/{maven => wrapper}/ArtifactDestination.java (97%) create mode 100644 src/main/java/ley/anvil/addonscript/wrapper/Versions.java diff --git a/build.gradle b/build.gradle index c6105a0..da26645 100644 --- a/build.gradle +++ b/build.gradle @@ -14,8 +14,9 @@ repositories { dependencies { compile 'com.google.code.gson:gson:+' - compile "com.github.TheRandomLabs:CurseAPI:master-SNAPSHOT" compile 'com.google.code.findbugs:jsr305:3.0.2' + compile 'org.apache.maven:maven-artifact:3.6.3' + testCompile group: 'junit', name: 'junit', version: '4.12' } diff --git a/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java b/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java index c00004e..88649bb 100644 --- a/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java +++ b/src/main/java/ley/anvil/addonscript/curse/ManifestJSON.java @@ -37,12 +37,12 @@ public class ManifestJSON extends JSON { public String id; public boolean primary; - public AddonscriptJSON.Relation toRelation(String mcv) { + public AddonscriptJSON.Relation toRelation() { if (id != null && id.startsWith("forge-")) { AddonscriptJSON.Relation rel = new AddonscriptJSON.Relation(); rel.type = "modloader"; rel.id = "forge"; - rel.versions = "[" + mcv + id.replaceAll("forge", "") + "]"; + rel.versions = "[" + id.replaceAll("forge", "") + "]"; rel.options = new ArrayList<>(); rel.options.add("required"); rel.options.add("client"); @@ -107,7 +107,7 @@ public class ManifestJSON extends JSON { if (minecraft != null) { for (Modloader l : minecraft.modLoaders) { - version.relations.add(l.toRelation(minecraft.version)); + version.relations.add(l.toRelation()); } } diff --git a/src/main/java/ley/anvil/addonscript/wrapper/ASWrapper.java b/src/main/java/ley/anvil/addonscript/wrapper/ASWrapper.java index 7224145..b3c9fcd 100644 --- a/src/main/java/ley/anvil/addonscript/wrapper/ASWrapper.java +++ b/src/main/java/ley/anvil/addonscript/wrapper/ASWrapper.java @@ -9,10 +9,10 @@ import ley.anvil.addonscript.curse.CurseMeta; import ley.anvil.addonscript.forge.ForgeMeta; import ley.anvil.addonscript.installer.IInstaller; import ley.anvil.addonscript.installer.InternalDirInstaller; -import ley.anvil.addonscript.maven.ArtifactDestination; import ley.anvil.addonscript.util.HTTPRequest; import ley.anvil.addonscript.util.Utils; import ley.anvil.addonscript.v1.AddonscriptJSON; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import javax.annotation.Nullable; import java.io.File; @@ -278,6 +278,14 @@ public class ASWrapper { return new MetaData(); } + public Versions getVersions() { + try { + return new Versions(relation.versions); + } catch (InvalidVersionSpecificationException e) { + throw new RuntimeException("Error in JSON"); + } + } + } public static Map getMetaData(ArtifactDestination[] artifacts) { diff --git a/src/main/java/ley/anvil/addonscript/maven/ArtifactDestination.java b/src/main/java/ley/anvil/addonscript/wrapper/ArtifactDestination.java similarity index 97% rename from src/main/java/ley/anvil/addonscript/maven/ArtifactDestination.java rename to src/main/java/ley/anvil/addonscript/wrapper/ArtifactDestination.java index c64fbc1..7d36ff8 100644 --- a/src/main/java/ley/anvil/addonscript/maven/ArtifactDestination.java +++ b/src/main/java/ley/anvil/addonscript/wrapper/ArtifactDestination.java @@ -1,4 +1,4 @@ -package ley.anvil.addonscript.maven; +package ley.anvil.addonscript.wrapper; import ley.anvil.addonscript.util.Utils; diff --git a/src/main/java/ley/anvil/addonscript/wrapper/Versions.java b/src/main/java/ley/anvil/addonscript/wrapper/Versions.java new file mode 100644 index 0000000..f156d33 --- /dev/null +++ b/src/main/java/ley/anvil/addonscript/wrapper/Versions.java @@ -0,0 +1,36 @@ +package ley.anvil.addonscript.wrapper; + +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; + +import javax.annotation.Nullable; + +public class Versions { + + VersionRange range; + String latest; + + public Versions(String range) throws InvalidVersionSpecificationException { + this.range = VersionRange.createFromVersionSpec(range); + String noBrack = range.replace("[", "").replace("]", "").replace("(", "").replace(")", ""); + String[] parts = noBrack.split(","); + for (int i = parts.length - 1; i >= 0; i--) { + if (this.range.containsVersion(new DefaultArtifactVersion(parts[i]))) { + latest = parts[i]; + break; + } + } + } + + public boolean contains(String version) { + return range.containsVersion(new DefaultArtifactVersion(version)); + } + + @Nullable + public String getLatestKnown() { + return latest; + } + + +}