diff --git a/README.md b/README.md
index 14b436b..471b5e7 100644
--- a/README.md
+++ b/README.md
@@ -1,193 +1,35 @@
[](https://jitpack.io/#de.itsTyrion/PluginAnnotationProcessor)
# Plugin Annotation Processor
-A Bukkit/Spigot or BungeeCord plugin that simplifies the generation of `plugin.yml` file using annotations.
+A toolkit that simplifies the generation of Minecraft server plugin meta files using annotations.
## Overview
-This tool provides a convenient way to generate the `plugin.yml` file for your Spigot/Paper/BungeeCord/Waterfall plugin.
-It utilizes annotations to define essential information directly in your code.
+This tool provides a convenient way to generate the `plugin.yml`/`bungee.yml`/`velocity-plugin.json` file for your plugin.
+It utilizes annotations to define the required information directly in your code and fill in the version automatically.
## Prerequisites
- Java 8 or higher
-- Bukkit/Spigot/Paper latest recommended but should work down to 1.7
-- BungeeCord/Waterfall latest - it supports down to MC 1.8 as of 2023
+- Bukkit/Spigot/Paper/Pufferfish/Purpur - latest version recommended but should down to 1.8 and further
+- BungeeCord/Waterfall latest - it supports down to MC 1.8 as of 2024
+- Velocity latest (but any 3.x should work) - it supports down to MC 1.8 as of 2024
## Features
-- **Annotation-based Configuration**: Use the `@Plugin` and `@BungeePlugin` annotations to define plugin information directly in your Java/Kotlin code.
-- **Cross-Compatibility**: Works with Bukkit, Spigot, Paper, BungeeCord, and Waterfall.
+- **Annotation-based Configuration**: Use the `@BukkitPlugin`/`@BungeePlugin`/`@VelocityPlugin` annotations to define plugin information directly in your Java/Kotlin code.
+- **Cross-Compatibility**: Works with Bukkit, Spigot, Paper, Pufferfish, Purpur, BungeeCord, Waterfall and Velocity.
- **Versioning**: Version number is derived from the Gradle/Maven project version. (Optional)
---
## Usage
+Moved to [the wiki](https://github.com/itsTyrion/PluginAnnotationProcessor/wiki)
-### Bukkit/Spigot/Paper
-(This example does not show all properties)
-```java
-import org.bukkit.plugin.java.JavaPlugin;
-
-import de.itsTyrion.pluginAnnotation.Plugin;
-
-@Plugin(
- name = "MyPlugin",
- description = "Awesome Bukkit plugin",
- authors = {"Your Name"},
- depend = {"aDependency"}
-)
-public class MyPlugin extends JavaPlugin {
- // Your plugin code here
-}
-```
-
-### BungeeCord/Waterfall
-```java
-import net.md_5.bungee.api.plugin.Plugin;
-
-import de.itsTyrion.pluginAnnotation.BungeePlugin;
-
-@Plugin(
- name = "MyPlugin",
- description = "Awesome Bungee/Waterfall plugin",
- author = "Your Name",
- depends = {"aDependency"}
-)
-public class MyBungeePlugin extends Plugin {
- // Your plugin code here
-}
-```
-### Custom version/version format (all platforms):
-Set the `version` parameter to either something completely different (why?) or e.g. `"aPrefix-%mcPluginVersion%-aSuffix"`
-## Gradle
-#### Add the Jitpack repo if you haven't already:
-```groovy
-repositories {
- // Add your other repositories here
- maven { url 'https://jitpack.io' }
-}
-```
----
-If you want to use the Spigot Library Loader (plugin.yml `libraries` section), create a new dependency config like so:
-(The name is up to you, I used `spigotLib` here)
-**Keep in mind it can only load from Maven Central!**
-```groovy
-configurations {
- spigotLib
- compileOnly { extendsFrom spigotLib }
-}
-// Change the dependency scope from `implementation`/`compileOnly` to the config name of your choice. Example:
-spigotLib 'com.google.inject:guice:7.0.0' // example dependency
-```
-Then, pass the list to the compiler/annotation processor according to the sections below.
-
----
-#### For Java sources:
-```groovy
-dependencies {
- // Add your other dependencies here
- compileOnly 'de.itsTyrion:PluginAnnotationProcessor:1.1'
- annotationProcessor 'de.itsTyrion:PluginAnnotationProcessor:1.1'
-}
-
-tasks.withType(JavaCompile).configureEach {
- // Add other annotation processor arguments as/if needed or use different values, this is just what I use.
- options.compilerArgs +=
- "-AmcPluginVersion=${"$version".contains("SNAPSHOT") ? (version + new Date().format('yyyyMMdd_HHmm')) : version}"
- // This is only needed if you use the Spigot Library Loader. If you use a different name, replace `spigotLib` with it.
- options.compilerArgs +=
- "-AspigotLibraries=${configurations.spigotLib.dependencies.collect { "$it.group:$it.name:$it.version" }.join(' ')}"
-}
-```
-
-
-#### For Kotlin sources:
-```groovy
-plugins {
- // Add your other gradle plugins here
- id 'org.jetbrains.kotlin.kapt' version 'current.kotlin.version'
-}
-
-dependencies {
- // Add your other dependencies here
- compileOnly 'de.itsTyrion:PluginAnnotationProcessor:1.1'
- kapt 'de.itsTyrion:PluginAnnotationProcessor:1.1'
-}
-
-kapt.arguments {
- // Add other annotation processor arguments as/if needed or use different values, this is just what I use.
- arg 'mcPluginVersion', version.contains("SNAPSHOT") ? (version + new Date().format('yyyyMMdd_HHmm')) : version
- // This is only needed if you use the Spigot Library Loader. If you use a different name, replace `spigotLib` with it.
- arg 'spigotLibraries', configurations.spigotLib.dependencies.collect { "$it.group:$it.name:$it.version" }.join(';')
-}
-```
-
-## Maven
-Hint: I have no idea how to do the `libraries` part with maven, tips or a PR are welcome.
-#### Add the Jitpack repo if you haven't already:
-```xml
-
- jitpack.io
- https://jitpack.io
-
-```
-#### For Java sources:
-```xml
-
- de.itsTyrion
- PluginAnnotationProcessor
- 1.1
-
-```
-```xml
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.11.0
-
- 17
- 17
-
-
- -Aproject.version=${project.version}
-
-
-
-
-
-```
-#### For Kotlin sources (I recommend you use Gradle):
-(Copied from [the docs](https://kotlinlang.org/docs/kapt.html#use-in-maven))
-Add an execution of the kapt goal from kotlin-maven-plugin before compile:
-```xml
-
- kapt
-
- kapt
-
-
-
- src/main/kotlin
- src/main/java
-
-
-
- de.itsTyrion
- PluginAnnotationProcessor
- 1.1
-
-
-
-
-```
## Contributing
Feel free to contribute to the development of this plugin by opening issues or submitting pull requests.
## API Reference
Just add it to the plugin's main class
-Parameter names match plugin.yml/bungee.yml
+Parameter names match plugin.yml/bungee.yml and Velocity's own `@Plugin` annotation
## License
This project is licensed under the MIT License.
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 566138f..e84600f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ repositories {
}
group 'de.itsTyrion'
-version '1.3'
+version '1.4'
dependencies {
implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
diff --git a/src/main/java/de/itsTyrion/pluginAnnotation/PluginAnnotationProcessor.java b/src/main/java/de/itsTyrion/pluginAnnotation/PluginAnnotationProcessor.java
index 92f720c..529cfbd 100644
--- a/src/main/java/de/itsTyrion/pluginAnnotation/PluginAnnotationProcessor.java
+++ b/src/main/java/de/itsTyrion/pluginAnnotation/PluginAnnotationProcessor.java
@@ -1,5 +1,8 @@
package de.itsTyrion.pluginAnnotation;
+import de.itsTyrion.pluginAnnotation.bukkit.BukkitPlugin;
+import de.itsTyrion.pluginAnnotation.bukkit.CommandInfo;
+import de.itsTyrion.pluginAnnotation.bungee.BungeePlugin;
import de.itsTyrion.pluginAnnotation.util.Generator;
import de.itsTyrion.pluginAnnotation.velocity.VelocityPlugin;
import lombok.val;
@@ -10,7 +13,6 @@
import javax.annotation.processing.SupportedOptions;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
-import javax.tools.Diagnostic;
import javax.tools.Diagnostic.Kind;
import javax.tools.StandardLocation;
import java.io.IOException;
@@ -19,9 +21,10 @@
@SupportedOptions(value = {"mcPluginVersion", "spigotLibraries"})
@SupportedAnnotationTypes({
- "de.itsTyrion.pluginAnnotation.Plugin",
- "de.itsTyrion.pluginAnnotation.BungeePlugin",
- "de.itsTyrion.pluginAnnotation.velocity.VelocityPlugin"})
+ "de.itsTyrion.pluginAnnotation.bukkit.BukkitPlugin",
+ "de.itsTyrion.pluginAnnotation.bungee.BungeePlugin",
+ "de.itsTyrion.pluginAnnotation.velocity.VelocityPlugin"
+})
public class PluginAnnotationProcessor extends AbstractProcessor {
private String pluginMainClassFound = null;
@@ -40,7 +43,7 @@ public boolean process(Set extends TypeElement> annotations, RoundEnvironment
return false;
}
- for (val element : roundEnv.getElementsAnnotatedWith(Plugin.class)) {
+ for (val element : roundEnv.getElementsAnnotatedWith(BukkitPlugin.class)) {
// fully qualified name, required for plugin.yml `main` property
val fqName = ((TypeElement) element).getQualifiedName().toString();
@@ -58,7 +61,7 @@ public boolean process(Set extends TypeElement> annotations, RoundEnvironment
val commandInfos = roundEnv.getElementsAnnotatedWith(CommandInfo.class).stream()
.map(element1 -> element1.getAnnotation(CommandInfo.class)).toArray(CommandInfo[]::new);
- val pluginAnnotation = element.getAnnotation(Plugin.class);
+ val pluginAnnotation = element.getAnnotation(BukkitPlugin.class);
val content = Generator.pluginYML(pluginAnnotation, fqName, projectVersion, libraries, commandInfos);
writeResource("plugin.yml", content, fqName);
}
@@ -92,7 +95,7 @@ public boolean process(Set extends TypeElement> annotations, RoundEnvironment
val plugin = element.getAnnotation(VelocityPlugin.class);
if (!Generator.VELOCITY_ID_PATTERN.matcher(plugin.id()).matches()) {
- processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
+ processingEnv.getMessager().printMessage(Kind.ERROR,
"Invalid ID for plugin " + fqName + ". IDs must start alphabetically," +
"have lowercase alphanumeric characters, and can contain dashes or underscores.");
return false;
diff --git a/src/main/java/de/itsTyrion/pluginAnnotation/Plugin.java b/src/main/java/de/itsTyrion/pluginAnnotation/bukkit/BukkitPlugin.java
similarity index 83%
rename from src/main/java/de/itsTyrion/pluginAnnotation/Plugin.java
rename to src/main/java/de/itsTyrion/pluginAnnotation/bukkit/BukkitPlugin.java
index 1aeaa12..f664bb3 100644
--- a/src/main/java/de/itsTyrion/pluginAnnotation/Plugin.java
+++ b/src/main/java/de/itsTyrion/pluginAnnotation/bukkit/BukkitPlugin.java
@@ -1,10 +1,10 @@
-package de.itsTyrion.pluginAnnotation;
+package de.itsTyrion.pluginAnnotation.bukkit;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
-public @interface Plugin {
+public @interface BukkitPlugin {
String name();
String[] depend() default {};
String description() default "";
@@ -16,7 +16,6 @@
String[] loadBefore() default {};
String logPrefix() default "";
String[] provides() default {};
- String version() default "%mcPluginVersion%";
LoadAt load() default LoadAt.POSTWORLD;
@SuppressWarnings("unused")
diff --git a/src/main/java/de/itsTyrion/pluginAnnotation/CommandInfo.java b/src/main/java/de/itsTyrion/pluginAnnotation/bukkit/CommandInfo.java
similarity index 83%
rename from src/main/java/de/itsTyrion/pluginAnnotation/CommandInfo.java
rename to src/main/java/de/itsTyrion/pluginAnnotation/bukkit/CommandInfo.java
index bb718d8..b98265c 100644
--- a/src/main/java/de/itsTyrion/pluginAnnotation/CommandInfo.java
+++ b/src/main/java/de/itsTyrion/pluginAnnotation/bukkit/CommandInfo.java
@@ -1,4 +1,4 @@
-package de.itsTyrion.pluginAnnotation;
+package de.itsTyrion.pluginAnnotation.bukkit;
public @interface CommandInfo {
String name();
diff --git a/src/main/java/de/itsTyrion/pluginAnnotation/BungeePlugin.java b/src/main/java/de/itsTyrion/pluginAnnotation/bungee/BungeePlugin.java
similarity index 77%
rename from src/main/java/de/itsTyrion/pluginAnnotation/BungeePlugin.java
rename to src/main/java/de/itsTyrion/pluginAnnotation/bungee/BungeePlugin.java
index 35698b8..8ea17bb 100644
--- a/src/main/java/de/itsTyrion/pluginAnnotation/BungeePlugin.java
+++ b/src/main/java/de/itsTyrion/pluginAnnotation/bungee/BungeePlugin.java
@@ -1,4 +1,4 @@
-package de.itsTyrion.pluginAnnotation;
+package de.itsTyrion.pluginAnnotation.bungee;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@@ -10,5 +10,4 @@
String description() default "";
String author() default "";
String[] softDepends() default {};
- String version() default "%mcPluginVersion%";
}
diff --git a/src/main/java/de/itsTyrion/pluginAnnotation/util/Generator.java b/src/main/java/de/itsTyrion/pluginAnnotation/util/Generator.java
index 244bb91..64dc3ad 100644
--- a/src/main/java/de/itsTyrion/pluginAnnotation/util/Generator.java
+++ b/src/main/java/de/itsTyrion/pluginAnnotation/util/Generator.java
@@ -1,9 +1,9 @@
package de.itsTyrion.pluginAnnotation.util;
import com.grack.nanojson.JsonWriter;
-import de.itsTyrion.pluginAnnotation.BungeePlugin;
-import de.itsTyrion.pluginAnnotation.CommandInfo;
-import de.itsTyrion.pluginAnnotation.Plugin;
+import de.itsTyrion.pluginAnnotation.bungee.BungeePlugin;
+import de.itsTyrion.pluginAnnotation.bukkit.CommandInfo;
+import de.itsTyrion.pluginAnnotation.bukkit.BukkitPlugin;
import de.itsTyrion.pluginAnnotation.velocity.VelocityPlugin;
import lombok.val;
@@ -16,11 +16,11 @@ public final class Generator {
private Generator() {}
- public static String pluginYML(Plugin plugin, String fqName, String version, String[] libraries,
+ public static String pluginYML(BukkitPlugin plugin, String fqName, String version, String[] libraries,
CommandInfo[] commands) {
val builder = new StringBuilder()
.append("name: ").append(plugin.name()).append('\n')
- .append("version: ").append(plugin.version().replace("%mcPluginVersion%", version)).append('\n')
+ .append("version: ").append(version).append('\n')
.append("main: ").append(fqName).append('\n')
.append("api-version: ").append(plugin.apiVersion()).append('\n')
.append("load: ").append(plugin.load().name()).append('\n');
@@ -63,7 +63,7 @@ public static String pluginYML(Plugin plugin, String fqName, String version, Str
public static String bungeeYML(BungeePlugin plugin, String fqName, String version) {
val builder = new StringBuilder()
.append("name: ").append(plugin.name()).append('\n')
- .append("version: ").append(plugin.version().replace("%mcPluginVersion%", version)).append('\n')
+ .append("version: ").append(version).append('\n')
.append("main: ").append(fqName).append('\n');
appendIfPresent(builder, "depends", plugin.depends());
diff --git a/src/main/java/de/itsTyrion/pluginAnnotation/velocity/VelocityPlugin.java b/src/main/java/de/itsTyrion/pluginAnnotation/velocity/VelocityPlugin.java
index e1176f4..92e02dd 100644
--- a/src/main/java/de/itsTyrion/pluginAnnotation/velocity/VelocityPlugin.java
+++ b/src/main/java/de/itsTyrion/pluginAnnotation/velocity/VelocityPlugin.java
@@ -8,7 +8,7 @@
package de.itsTyrion.pluginAnnotation.velocity;
import java.lang.annotation.ElementType;
-import java.lang.annotation.Target;
+ import java.lang.annotation.Target;
@Target(ElementType.TYPE)
public @interface VelocityPlugin {