From 66f4ba911fbe821f9f9c9f1648e5336e2c8331c9 Mon Sep 17 00:00:00 2001 From: sky Date: Sat, 3 Jul 2021 00:37:34 +0800 Subject: [PATCH] 1.7 velocity support --- build.gradle | 2 +- .../izzel/taboolib/gradle/Description.groovy | 39 ++++++++++++++++++- ....groovy => PluginAnnotationVisitor.groovy} | 4 +- .../izzel/taboolib/gradle/RelocateJar.groovy | 4 ++ .../gradle/TabooLibClassVisitor.groovy | 4 +- 5 files changed, 46 insertions(+), 7 deletions(-) rename src/main/groovy/io/izzel/taboolib/gradle/{SpongeAnnotationVisitor.groovy => PluginAnnotationVisitor.groovy} (90%) diff --git a/build.gradle b/build.gradle index 89454c8..9735c95 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group 'io.izzel.taboolib' -version '1.6' +version '1.7' configurations { embed diff --git a/src/main/groovy/io/izzel/taboolib/gradle/Description.groovy b/src/main/groovy/io/izzel/taboolib/gradle/Description.groovy index 52820a3..947d837 100644 --- a/src/main/groovy/io/izzel/taboolib/gradle/Description.groovy +++ b/src/main/groovy/io/izzel/taboolib/gradle/Description.groovy @@ -1,6 +1,5 @@ package io.izzel.taboolib.gradle -import com.google.gson.Gson import com.google.gson.GsonBuilder import org.gradle.api.Project import com.google.gson.JsonArray @@ -21,7 +20,7 @@ class Description { def api = "1.0.0" def apiVersion = '1.13' def libraries - def dependencies = "spongeapi@7.2.0" + def dependencies def requiredMods = "spongeapi@7.2.0" static List buildFile() { @@ -123,12 +122,19 @@ class Description { } if (dependencies instanceof List) { def arr = new JsonArray() + if (dependencies.none { "spongeapi" in it }) { + arr.add("spongeapi@7.2.0") + } dependencies.each { arr.add(it) } info.add("dependencies", arr) } else if (dependencies != null) { def arr = new JsonArray() arr.add(dependencies.toString()) info.add("dependencies", arr) + } else { + def arr = new JsonArray() + arr.add("spongeapi@7.2.0") + info.add("dependencies", arr) } if (requiredMods instanceof List) { def arr = new JsonArray() @@ -143,6 +149,35 @@ class Description { return new GsonBuilder().setPrettyPrinting().create().toJson(base).getBytes(StandardCharsets.UTF_8) } + byte[] buildVelocityFile(Project project) { + def base = new JsonArray() + def info = new JsonObject() + info.addProperty("id", project.name.toLowerCase()) + info.addProperty("name", project.name) + info.addProperty("main", "${project.group}.taboolib.platform.VelocityPlugin") + info.addProperty("version", project.version.toString()) + if (authors instanceof List) { + def arr = new JsonArray() + authors.each { arr.add(it) } + info.add("authors", arr) + } else if (authors != null) { + def arr = new JsonArray() + arr.add(authors.toString()) + info.add("authors", arr) + } + if (dependencies instanceof List) { + def arr = new JsonArray() + dependencies.each { arr.add(it) } + info.add("dependencies", arr) + } else if (dependencies != null) { + def arr = new JsonArray() + arr.add(dependencies.toString()) + info.add("dependencies", arr) + } + base.add(info) + return new GsonBuilder().setPrettyPrinting().create().toJson(base).getBytes(StandardCharsets.UTF_8) + } + def author(author) { this.authors = author } diff --git a/src/main/groovy/io/izzel/taboolib/gradle/SpongeAnnotationVisitor.groovy b/src/main/groovy/io/izzel/taboolib/gradle/PluginAnnotationVisitor.groovy similarity index 90% rename from src/main/groovy/io/izzel/taboolib/gradle/SpongeAnnotationVisitor.groovy rename to src/main/groovy/io/izzel/taboolib/gradle/PluginAnnotationVisitor.groovy index 3511a83..dba2463 100644 --- a/src/main/groovy/io/izzel/taboolib/gradle/SpongeAnnotationVisitor.groovy +++ b/src/main/groovy/io/izzel/taboolib/gradle/PluginAnnotationVisitor.groovy @@ -4,11 +4,11 @@ import org.gradle.api.Project import org.objectweb.asm.AnnotationVisitor import org.objectweb.asm.Opcodes -class SpongeAnnotationVisitor extends AnnotationVisitor { +class PluginAnnotationVisitor extends AnnotationVisitor { Project project - SpongeAnnotationVisitor(AnnotationVisitor annotationVisitor, project) { + PluginAnnotationVisitor(AnnotationVisitor annotationVisitor, project) { super(Opcodes.ASM7, annotationVisitor) this.project = project } diff --git a/src/main/groovy/io/izzel/taboolib/gradle/RelocateJar.groovy b/src/main/groovy/io/izzel/taboolib/gradle/RelocateJar.groovy index b55a6c3..2213e54 100644 --- a/src/main/groovy/io/izzel/taboolib/gradle/RelocateJar.groovy +++ b/src/main/groovy/io/izzel/taboolib/gradle/RelocateJar.groovy @@ -128,6 +128,10 @@ class RelocateJar extends DefaultTask { out.putNextEntry(new JarEntry("mcmod.info")) out.write(tabooExt.description.buildSpongeFile(project)) } + if (tabooExt.modules.contains("platform-velocity")) { + out.putNextEntry(new JarEntry("velocity-plugin.json")) + out.write(tabooExt.description.buildVelocityFile(project)) + } } } Files.copy(tempOut2.toPath(), outJar.toPath(), StandardCopyOption.REPLACE_EXISTING) diff --git a/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy b/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy index fc525aa..eb95680 100644 --- a/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy +++ b/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy @@ -26,8 +26,8 @@ class TabooLibClassVisitor extends ClassVisitor { AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { if (descriptor == "L${project.group.replace('.', '/')}/taboolib/common/Isolated;") { return new IsolatedAnnotationVisitor(super.visitAnnotation(descriptor, visible), project, name, this) - } else if (descriptor == "Lorg/spongepowered/api/plugin/Plugin;") { - return new SpongeAnnotationVisitor(super.visitAnnotation(descriptor, visible), project) + } else if (descriptor == "Lorg/spongepowered/api/plugin/Plugin;" || descriptor == "Lcom/velocitypowered/api/plugin/Plugin;") { + return new PluginAnnotationVisitor(super.visitAnnotation(descriptor, visible), project) } else { return super.visitAnnotation(descriptor, visible) }