From df545f4fc89a706003b939b32d4f0bae1574dca5 Mon Sep 17 00:00:00 2001 From: Xor Boole Date: Fri, 20 Feb 2015 19:52:58 -0500 Subject: [PATCH] Initial Commit --- .idea/.name | 1 + .idea/compiler.xml | 33 + .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 7 + .../Maven__com_google_guava_guava_17_0.xml | 13 + ...oglecode_json_simple_json_simple_1_1_1.xml | 13 + .../Maven__commons_lang_commons_lang_2_6.xml | 13 + ..._javax_persistence_persistence_api_1_0.xml | 13 + .idea/libraries/Maven__junit_junit_4_10.xml | 13 + .../Maven__org_avaje_ebean_2_8_1.xml | 13 + ...n__org_bukkit_bukkit_1_8_R0_1_SNAPSHOT.xml | 13 + .../Maven__org_hamcrest_hamcrest_core_1_1.xml | 13 + .../Maven__org_yaml_snakeyaml_1_14.xml | 13 + .idea/misc.xml | 22 + .idea/modules.xml | 9 + .idea/scopes/scope_settings.xml | 5 + .idea/vcs.xml | 7 + .idea/workspace.xml | 764 ++++++++++++++++++ PluginAnnotations.iml | 24 + pom.xml | 119 +++ .../bukkit/plugin/java/annotation/Author.java | 18 + .../plugin/java/annotation/Commands.java | 52 ++ .../plugin/java/annotation/DependsOn.java | 17 + .../plugin/java/annotation/Description.java | 17 + .../plugin/java/annotation/LoadBefore.java | 17 + .../bukkit/plugin/java/annotation/LoadOn.java | 18 + .../plugin/java/annotation/LogPrefix.java | 16 + .../bukkit/plugin/java/annotation/Main.java | 55 ++ .../bukkit/plugin/java/annotation/Name.java | 18 + .../plugin/java/annotation/Permissions.java | 50 ++ .../annotation/PluginAnnotationProcessor.java | 194 +++++ .../plugin/java/annotation/SoftDependsOn.java | 17 + .../plugin/java/annotation/UsesDatabase.java | 13 + .../plugin/java/annotation/Version.java | 20 + .../plugin/java/annotation/Website.java | 17 + .../javax.annotation.processing.Processor | 1 + .../javax.annotation.processing.Processor | 1 + .../plugin/java/annotation/Author.class | Bin 0 -> 332 bytes .../plugin/java/annotation/Commands$Cmd.class | Bin 0 -> 565 bytes .../plugin/java/annotation/Commands.class | Bin 0 -> 455 bytes .../plugin/java/annotation/DependsOn.class | Bin 0 -> 338 bytes .../plugin/java/annotation/Description.class | Bin 0 -> 341 bytes .../plugin/java/annotation/LoadBefore.class | Bin 0 -> 340 bytes .../plugin/java/annotation/LoadOn.class | Bin 0 -> 348 bytes .../plugin/java/annotation/LogPrefix.class | Bin 0 -> 337 bytes .../bukkit/plugin/java/annotation/Main.class | Bin 0 -> 296 bytes .../bukkit/plugin/java/annotation/Name.class | Bin 0 -> 327 bytes .../java/annotation/Permissions$Perm.class | Bin 0 -> 648 bytes .../plugin/java/annotation/Permissions.class | Bin 0 -> 470 bytes .../PluginAnnotationProcessor.class | Bin 0 -> 12125 bytes .../java/annotation/SoftDependsOn.class | Bin 0 -> 346 bytes .../plugin/java/annotation/UsesDatabase.class | Bin 0 -> 312 bytes .../plugin/java/annotation/Version.class | Bin 0 -> 414 bytes .../plugin/java/annotation/Website.class | Bin 0 -> 333 bytes target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 17 + .../compile/default-compile/inputFiles.lst | 15 + target/plugin-annotations-1.0.0-SNAPSHOT.jar | Bin 0 -> 15456 bytes 58 files changed, 1689 insertions(+) create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_17_0.xml create mode 100644 .idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml create mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_6.xml create mode 100644 .idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml create mode 100644 .idea/libraries/Maven__junit_junit_4_10.xml create mode 100644 .idea/libraries/Maven__org_avaje_ebean_2_8_1.xml create mode 100644 .idea/libraries/Maven__org_bukkit_bukkit_1_8_R0_1_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml create mode 100644 .idea/libraries/Maven__org_yaml_snakeyaml_1_14.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/scopes/scope_settings.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 PluginAnnotations.iml create mode 100644 pom.xml create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Author.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Commands.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/DependsOn.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Description.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/LoadBefore.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/LoadOn.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/LogPrefix.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Main.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Name.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Permissions.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/SoftDependsOn.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/UsesDatabase.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Version.java create mode 100644 src/main/java/org/bukkit/plugin/java/annotation/Website.java create mode 100644 src/main/resources/META-INF/services/javax.annotation.processing.Processor create mode 100644 target/classes/META-INF/services/javax.annotation.processing.Processor create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Author.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Commands$Cmd.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Commands.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/DependsOn.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Description.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/LoadBefore.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/LoadOn.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/LogPrefix.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Main.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Name.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Permissions$Perm.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Permissions.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/SoftDependsOn.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/UsesDatabase.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Version.class create mode 100644 target/classes/org/bukkit/plugin/java/annotation/Website.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/plugin-annotations-1.0.0-SNAPSHOT.jar diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..88f0cf8 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +PluginAnnotations \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..1238a1f --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,33 @@ + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..74c0d0a --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.idea/libraries/Maven__com_google_guava_guava_17_0.xml b/.idea/libraries/Maven__com_google_guava_guava_17_0.xml new file mode 100644 index 0000000..2a9069c --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_17_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml new file mode 100644 index 0000000..f3f3738 --- /dev/null +++ b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml new file mode 100644 index 0000000..2ec8376 --- /dev/null +++ b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml b/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml new file mode 100644 index 0000000..e60370e --- /dev/null +++ b/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_10.xml b/.idea/libraries/Maven__junit_junit_4_10.xml new file mode 100644 index 0000000..ed8bf5f --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_avaje_ebean_2_8_1.xml b/.idea/libraries/Maven__org_avaje_ebean_2_8_1.xml new file mode 100644 index 0000000..91f161a --- /dev/null +++ b/.idea/libraries/Maven__org_avaje_ebean_2_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bukkit_bukkit_1_8_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_bukkit_bukkit_1_8_R0_1_SNAPSHOT.xml new file mode 100644 index 0000000..624897d --- /dev/null +++ b/.idea/libraries/Maven__org_bukkit_bukkit_1_8_R0_1_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml new file mode 100644 index 0000000..acdf443 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_14.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_14.xml new file mode 100644 index 0000000..d9fbe59 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3a32f24 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..aa8be29 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..def6a6a --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..e5453c4 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,764 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + 1424030427326 + 1424030427326 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + MayhemData + + + + + + + + 1.7 + + + + + + + + PluginAnnotations + + + + + + + + 1.7 + + + + + + + + + + + + + + + + diff --git a/PluginAnnotations.iml b/PluginAnnotations.iml new file mode 100644 index 0000000..d979331 --- /dev/null +++ b/PluginAnnotations.iml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..47f56c1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,119 @@ + + 4.0.0 + + + org.sonatype.oss + oss-parent + 9 + + + org.bukkit + plugin-annotations + 1.0.0-SNAPSHOT + jar + + Plugin Annotations + http://www.spigotmc.org/ + A annotaion-based compiletime plugin.yml generator. + + + 1.6 + 1.6 + UTF-8 + + + + + + spigotmc-releases + https://hub.spigotmc.org/nexus/content/repositories/releases/ + + + spigotmc-releases + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + + spigotmc-public + https://hub.spigotmc.org/nexus/content/groups/public/ + + + + + + org.bukkit + bukkit + 1.8-R0.1-SNAPSHOT + compile + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 3.1 + + + eclipse + + true + + + + + org.codehaus.plexus + plexus-compiler-eclipse + 2.5.0-spigotmc + + + + + org.codehaus.mojo + animal-sniffer-maven-plugin + 1.13 + + + process-classes + + check + + + + + + org.codehaus.mojo.signature + java16 + 1.1 + + + + + + + src/main/resources/META-INF + META-INF + + + + \ No newline at end of file diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Author.java b/src/main/java/org/bukkit/plugin/java/annotation/Author.java new file mode 100644 index 0000000..d226d7d --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Author.java @@ -0,0 +1,18 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the author(s) of the plugin. Translates to {@code author} + * in plugin.yml if a single author, otherwise {@code authors} + */ + +@Target(ElementType.TYPE) +public @interface Author { + + public String[] value(); + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Commands.java b/src/main/java/org/bukkit/plugin/java/annotation/Commands.java new file mode 100644 index 0000000..c730b59 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Commands.java @@ -0,0 +1,52 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents a list of this plugin's registered commands. + */ + +@Target(ElementType.TYPE) +public @interface Commands { // TODO: in java 8, make repeatable. + + public Cmd[] value(); + + @Target({}) + public static @interface Cmd { + + /** + * This command's name. + */ + public String value(); + + /** + * This command's description. + */ + + public String desc() default ""; + + /** + * This command's aliases. + */ + public String[] aliases() default {}; + + /** + * This command's permission node. + */ + public String permission() default ""; + + /** + * This command's permission-check-fail message. + */ + public String permissionMessage() default ""; + + /** + * This command's usage message. + */ + public String usage() default ""; + } + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/DependsOn.java b/src/main/java/org/bukkit/plugin/java/annotation/DependsOn.java new file mode 100644 index 0000000..892a267 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/DependsOn.java @@ -0,0 +1,17 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the plugin's hard dependencies. + */ + +@Target(ElementType.TYPE) +public @interface DependsOn { + + public String[] value(); + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Description.java b/src/main/java/org/bukkit/plugin/java/annotation/Description.java new file mode 100644 index 0000000..4595d06 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Description.java @@ -0,0 +1,17 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents a short description for the plugin. + */ + +@Target(ElementType.TYPE) +public @interface Description { + + public String value(); + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/LoadBefore.java b/src/main/java/org/bukkit/plugin/java/annotation/LoadBefore.java new file mode 100644 index 0000000..d0802f4 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/LoadBefore.java @@ -0,0 +1,17 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the plugins this plugin should be loaded before + */ + +@Target(ElementType.TYPE) +public @interface LoadBefore { + + public String[] value(); + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/LoadOn.java b/src/main/java/org/bukkit/plugin/java/annotation/LoadOn.java new file mode 100644 index 0000000..9e5372d --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/LoadOn.java @@ -0,0 +1,18 @@ +package org.bukkit.plugin.java.annotation; + +import org.bukkit.plugin.PluginLoadOrder; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the optional load order of the plugin. + */ + +@Target(ElementType.TYPE) +public @interface LoadOn { + + public PluginLoadOrder value(); +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/LogPrefix.java b/src/main/java/org/bukkit/plugin/java/annotation/LogPrefix.java new file mode 100644 index 0000000..e8d6ed4 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/LogPrefix.java @@ -0,0 +1,16 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the prefix used for the plugin's log entries, defaults to plugin name. + */ + +@Target(ElementType.TYPE) +public @interface LogPrefix { + + public String value(); +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Main.java b/src/main/java/org/bukkit/plugin/java/annotation/Main.java new file mode 100644 index 0000000..ebef467 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Main.java @@ -0,0 +1,55 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Marks this class (which must subclass JavaPlugin) as this plugin's main class. + *

+ * This class is part of the plugin annotation framework that automates plugin.yml. + *

+ * Example: + *

+ * {@literal @}Main
+ * {@literal @}Name("Test")
+ * {@literal @}Version("v1.0")
+ * {@literal @}Description("A test plugin.")
+ * {@literal @}LoadOn(PluginLoadOrder.POSTWORLD)
+ * {@literal @}Author("md_5")
+ * {@literal @}Website("spigotmc.org")
+ * {@literal @}UsesDatabase
+ * {@literal @}DependsOn({"WorldEdit", "Towny"})
+ * {@literal @}SoftDependsOn("Vault")
+ * {@literal @}LogPrefix("Testing")
+ * {@literal @}LoadBefore("Essentials")
+ * {@literal @}Commands({
+ *     {@literal @}Cmd(
+ *         value = "foo",
+ *         desc = "Foo command",
+ *         aliases = {"foobar", "fubar"},
+ *         permission = "test.foo",
+ *         permissionMessage = "You do not have permission!",
+ *         usage = "/ [test|stop]"
+ *     ),
+ *     {@literal @}Cmd("bar")
+ * })
+ * {@literal @}Permissions({
+ *     {@literal @}Perm(
+ *         value = "test.foo",
+ *         desc = "Allows foo command",
+ *         defaultValue = PermissionDefault.OP,
+ *     ),
+ *     {@literal @}Perm(
+ *         value = "test.*",
+ *         desc = "Wildcard perm",
+ *         defaultValue = PermissionDefault.OP,
+ *         children = {"test.foo"}
+ *     )
+ * })
+ * public class Test extends JavaPlugin { ... }
+ * 
+ * 
+ */ + +@Target(ElementType.TYPE) +public @interface Main {} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Name.java b/src/main/java/org/bukkit/plugin/java/annotation/Name.java new file mode 100644 index 0000000..2ef196b --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Name.java @@ -0,0 +1,18 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the name of the plugin. + *

+ * If not present in a class annotated with {@link Main} the name defaults to Class.getSimpleName() and will emmit a warning. + */ + +@Target(ElementType.TYPE) +public @interface Name { + + public String value(); +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Permissions.java b/src/main/java/org/bukkit/plugin/java/annotation/Permissions.java new file mode 100644 index 0000000..c6097c3 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Permissions.java @@ -0,0 +1,50 @@ +package org.bukkit.plugin.java.annotation; + +import org.bukkit.permissions.PermissionDefault; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents a list of this plugin's registered permissions. + */ + +@Target(ElementType.TYPE) +public @interface Permissions { // TODO: in java 8, make repeatable. + + public Perm[] value(); + + @Target({}) + public static @interface Perm { + + /** + * This perm's name. + */ + public String value(); + + /** + * This perm's description. + */ + + public String desc() default ""; + + /** + * This perm's default. + */ + public PermissionDefault defaultValue() default PermissionDefault.OP; + + /** + * This perm's child nodes + */ + public String[] children() default {}; + + /** + * This perms's negated child nodes + */ + public String[] antichildren() default {}; + + } + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.java b/src/main/java/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.java new file mode 100644 index 0000000..9266c97 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.java @@ -0,0 +1,194 @@ +package org.bukkit.plugin.java.annotation; + +import org.bukkit.plugin.PluginLoadOrder; +import org.bukkit.plugin.java.JavaPlugin; +import org.yaml.snakeyaml.Yaml; + +import javax.annotation.processing.*; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; +import javax.tools.Diagnostic; +import javax.tools.FileObject; +import javax.tools.StandardLocation; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@SupportedAnnotationTypes("org.bukkit.plugin.java.annotation.*") +@SupportedSourceVersion(SourceVersion.RELEASE_6) +public class PluginAnnotationProcessor extends AbstractProcessor { + + private boolean hasMainBeenFound = false; + + private static final DateFormat dFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + + @Override + public boolean process(Set annots, RoundEnvironment rEnv) { + Element main = null; + for(Element el : rEnv.getElementsAnnotatedWith(Main.class)) { + if(main != null){ + raiseError("More than one class with @Main found, aborting!"); + return false; + } + main = el; + } + + if(main == null) return false; + + if(hasMainBeenFound){ + raiseError("More than one class with @Main found, aborting!"); + return false; + } + hasMainBeenFound = true; + + TypeElement mainType; + if(main instanceof TypeElement){ + mainType = (TypeElement) main; + } else { + raiseError("Element annotated with @Main is not a type!"); + return false; + } + + if(!(mainType.getEnclosingElement() instanceof PackageElement) && !mainType.getModifiers().contains(Modifier.STATIC)){ + raiseError("Element annotated with @Main is not top-level or static nested!"); + return false; + } + + if(!processingEnv.getTypeUtils().isSubtype(mainType.asType(), fromClass(JavaPlugin.class))){ + raiseError("Class annotated with @Main is not an subclass of JavaPlugin!"); + } + + Map yml = new HashMap(); + + final String mainName = mainType.getQualifiedName().toString(); + yml.put("main", mainName); + + processAndPut(yml, "name", mainType, mainName.substring(mainName.lastIndexOf('.') + 1), Name.class, String.class); + + processAndPut(yml, "version", mainType, Version.DEFAULT_VERSION, Version.class, String.class); + + processAndPut(yml, "description", mainType, null, Description.class, String.class); + + processAndPut(yml, "load", mainType, null, LoadOn.class, String.class); + + { + String[] authors = process(mainType, new String[0], Author.class, String[].class); + switch(authors.length) { + case 0: break; + case 1: yml.put("author", authors[0]); break; + default: yml.put("authors", authors); break; + } + } + + processAndPut(yml, "website", mainType, null, Website.class, String.class); + + if(mainType.getAnnotation(UsesDatabase.class) != null) yml.put("database", true); + + processAndPut(yml, "depend", mainType, null, DependsOn.class, String[].class); + + processAndPut(yml, "softdepend", mainType, null, SoftDependsOn.class, String[].class); + + processAndPut(yml, "prefix", mainType, null, LogPrefix.class, String.class); + + processAndPut(yml, "loadbefore", mainType, null, LoadBefore.class, String[].class); + + Commands.Cmd[] commands = process(mainType, new Commands.Cmd[0], Commands.class, Commands.Cmd[].class); + + Map commandMap = new HashMap(); + + for(Commands.Cmd cmd : commands) { + String name = cmd.value(); + Map desc = new HashMap(); + if(!cmd.desc().isEmpty()) desc.put("description", cmd.desc()); + if(cmd.aliases().length != 0) desc.put("aliases", cmd.aliases()); + if(!cmd.permission().isEmpty()) desc.put("permission", cmd.permission()); + if(!cmd.permissionMessage().isEmpty()) desc.put("permission-message", cmd.permissionMessage()); + if(!cmd.usage().isEmpty()) desc.put("usage", cmd.usage()); + commandMap.put(name, desc); + } + + if(!commandMap.isEmpty()) yml.put("commands", commandMap); + + Permissions.Perm[] perms = process(mainType, new Permissions.Perm[0], Permissions.class, Permissions.Perm[].class); + + Map permMap = new HashMap(); + + for(Permissions.Perm perm : perms) { + String name = perm.value(); + Map desc = new HashMap(); + if(!perm.desc().isEmpty()) desc.put("description", perm.desc()); + desc.put("default", perm.defaultValue().toString()); + Map children = new HashMap(); + for(String p : perm.children()) children.put(p, true); + for(String p : perm.antichildren()) children.put(p, false); + if(!children.isEmpty()) desc.put("children", children); + permMap.put(name, desc); + } + + if(!permMap.isEmpty()) yml.put("permissions", permMap); + + Yaml yaml = new Yaml(); + + try { + FileObject file = this.processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", "plugin.yml"); + Writer w = file.openWriter(); + try{ + w.append("# Auto-generated plugin.yml, generated at ").append(dFormat.format(new Date())).append(" by ").append(this.getClass().getName()).append("\n\n"); + yaml.dump(yml, w); + } finally { + w.flush(); + w.close(); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + + processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, "NOTE: You are using org.bukkit.plugin.java.annotation, an experimental API!"); + + return true; + } + + private void raiseError(String message) { + this.processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, message); + } + + private TypeMirror fromClass(Class clazz) { + return processingEnv.getElementUtils().getTypeElement(clazz.getName()).asType(); + } + + private R processAndPut( + Map map, String name, Element el, R defaultVal, Class annotationType, Class returnType) { + R result = process(el, defaultVal, annotationType, returnType); + if(result != null) + map.put(name, result); + return result; + } + private R process(Element el, R defaultVal, Class annotationType, Class returnType) { + R result; + A ann = el.getAnnotation(annotationType); + if(ann == null) result = defaultVal; + else { + try { + Method value = annotationType.getMethod("value"); + Object res = value.invoke(ann); + result = (R) (returnType == String.class ? res.toString() : returnType.cast(res)); + } catch (Exception e) { + throw new RuntimeException(e); // shouldn't happen in theory + } + } + return result; + } +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/SoftDependsOn.java b/src/main/java/org/bukkit/plugin/java/annotation/SoftDependsOn.java new file mode 100644 index 0000000..81e8662 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/SoftDependsOn.java @@ -0,0 +1,17 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the plugin's soft dependencies. + */ + +@Target(ElementType.TYPE) +public @interface SoftDependsOn { + + public String[] value(); + +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/UsesDatabase.java b/src/main/java/org/bukkit/plugin/java/annotation/UsesDatabase.java new file mode 100644 index 0000000..e73ebfc --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/UsesDatabase.java @@ -0,0 +1,13 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Denotes this plugin as using Bukkit's bundled database system. + */ + +@Target(ElementType.TYPE) +public @interface UsesDatabase {} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Version.java b/src/main/java/org/bukkit/plugin/java/annotation/Version.java new file mode 100644 index 0000000..2d7ab66 --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Version.java @@ -0,0 +1,20 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the version of the plugin. + *

+ * If not present in a class annotated with {@link Main} the name defaults to "v0.0" and will emmit a warning. + */ + +@Target(ElementType.TYPE) +public @interface Version { + + public String value(); + + public static final String DEFAULT_VERSION = "v0.0"; +} diff --git a/src/main/java/org/bukkit/plugin/java/annotation/Website.java b/src/main/java/org/bukkit/plugin/java/annotation/Website.java new file mode 100644 index 0000000..385483f --- /dev/null +++ b/src/main/java/org/bukkit/plugin/java/annotation/Website.java @@ -0,0 +1,17 @@ +package org.bukkit.plugin.java.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Part of the plugin annotations framework. + *

+ * Represents the website of the plugin. + */ + +@Target(ElementType.TYPE) +public @interface Website { + + public String value(); + +} \ No newline at end of file diff --git a/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/src/main/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 0000000..387e75c --- /dev/null +++ b/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +org.bukkit.plugin.java.annotation.PluginAnnotationProcessor diff --git a/target/classes/META-INF/services/javax.annotation.processing.Processor b/target/classes/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 0000000..387e75c --- /dev/null +++ b/target/classes/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +org.bukkit.plugin.java.annotation.PluginAnnotationProcessor diff --git a/target/classes/org/bukkit/plugin/java/annotation/Author.class b/target/classes/org/bukkit/plugin/java/annotation/Author.class new file mode 100644 index 0000000000000000000000000000000000000000..1cc34d54de14565b9f708f10cfab5358b60da809 GIT binary patch literal 332 zcmZutyG}wu5Iuw7D)^wWurMYT1{*iAwW5H^L;^P^hH5XFtP9I7x$KhoYZiWhA7vad zfm>M2BXiE2lbNsYk52#(I9F&8da<&)%!`FfdgZfqLC?*`XcIzACb<}NKc}}?DKrV) zE#^(I`njC*EGZlkuJ_aW+D?Jc+8CdiaM8P)KJD3)RJmXu3GGSD)r^PE3#s#Gc>l{I zT#j={Zpklh?Ml!6o$8u!Rnw|D7pAhDME2%?eBgP>Ar?gae6|{D$OG Yg(K-2INs(qI#RoWpGc@Fh;fRuA5_L%%>V!Z literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/Commands$Cmd.class b/target/classes/org/bukkit/plugin/java/annotation/Commands$Cmd.class new file mode 100644 index 0000000000000000000000000000000000000000..2dc72f54654710c6877d848459d09d0ed038de65 GIT binary patch literal 565 zcma)3%T5A85Ul3m$^r@sDhK1m5b(ezUOgF%iHXKUj2BJ=jGKYkS+XZoim*n2Lo6gfX!bPQ@nZ$5ABA z#Gdz~iH8EAwqj^u!r*ZI)vgv=u{FKo$h@`9=JrA@QP5FNINFf zvymJ5DpKtTAb3J6VWlNBJKf=5^Zr~Wk+PO|W|i#mAgvW4`xevh?hoQL8OvLx8LY0) z>n&Fzw4PGqR3u-NRU<94W!U+2!*=7wXOV=`@dcGTV`S3T!t$aXjtLk4kC%|=fZN2k z=DCXeNjn_2hg~c~FL5XMjOH!M3{+5E1H%<#Z=12d4b*-CY*S~s91d{Ez07J2E|1mF NixdC= literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/Commands.class b/target/classes/org/bukkit/plugin/java/annotation/Commands.class new file mode 100644 index 0000000000000000000000000000000000000000..3d32d724e9bae91d1babeef2956002455f7d2f7c GIT binary patch literal 455 zcmb7BO-sW-5Pj1RV`HmTPaZ@NDe9pMdh{frf>2O22-4H09m2MoO-VKd|C$GXfImu{ z3R(|6=wWt;_jcZ!nSK9weFJcT{Qxz>d0wO{sb(|d)!bI8acZg;T50EUuf55git;Se zZc+wl5V~Ki)h<Y5PcI9SEI%>78W8{h$6UPYb7LBLc|<`q}q$avdL!dxZ4f**DU-2{wQ%x zk-NfTKA89BJ!ZatKED9m;aH(VxG5^D^SE5Ppi3XE6TL8Nqm4)rOmKzh5tl6Q^+Xi9 zgy9DEMy#IX3!VpsUBY=YZEZemMF_pM@sSB9SJ$(rhCL0H6MIkSPm5U1`O*1A8f-mp z|EPr1mngxl_|?@e_uL5AgtL}h%RDoc<&cyw{>R6jS1cj>C^?b3+1vB@l0eu=(Munq bbgaT&>N?opY5Qg80iKp@F3L6U%EJO=ku(c8rD?u@bAXaZi$AY9kMs4^`UHmb%YW4)T|l~&sOI_hX^uO{49!8YqW z!;p|~0H?iCPvxAem|>f6)>V76_kS{k(Mr3-gyYMr#}1ywV7<8`jAwNU6+c)fOx|01 zvxW&LFUd!{9)9z3qh#hNEbo|KFcFUb2tHN5cXQi?`?L1%a?7Hj*ci aT$^D>vH^BCevCbdx%BtNvUd>U0EfT#ZeX1N literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/LoadBefore.class b/target/classes/org/bukkit/plugin/java/annotation/LoadBefore.class new file mode 100644 index 0000000000000000000000000000000000000000..9b5f5a107b86785e19d6e7da326655a4cd792fe0 GIT binary patch literal 340 zcmZutyGlbr5IqwUuf|8xSXhW)AqwJxt(AdT1r&1;B-P$HE}Lw2!)7<&uUYs3ev~+- z@ZQ2=9?Us&4l`fhAD;kj&@0d)T!m;*OQIt` bBDuD}j&v>TZgLlUQu~7MOB53j;{b<0=E+}` literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/LoadOn.class b/target/classes/org/bukkit/plugin/java/annotation/LoadOn.class new file mode 100644 index 0000000000000000000000000000000000000000..f260a92f8a22143374bc46028723024440447103 GIT binary patch literal 348 zcmZvY%}PTt5QWdw)@bWbw=P5wl)5qC)|HF8y3nE*L0sjw!zFE+lr$;$YA$>LA4(jr zUwW7=&2sD$nOO>7~oH^?GL3MjP)#GRX$7i(sZBuh1s+ z8_gMC>rpl1NmAG)oNaFZ*zSHO5ISq)G7~NaSH*wexZyUKIOTXt=st!VCwy<6n0h}8 zTz^vtClA>tyWl6gvX$cvWkonGwr*0ISaXuG=iBw6;|2RvzAjms+U4_jcu64aNOa_{ bNM5e6Cshmk&Dljya$ocV3H1VE9OCE;(I8^h literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/LogPrefix.class b/target/classes/org/bukkit/plugin/java/annotation/LogPrefix.class new file mode 100644 index 0000000000000000000000000000000000000000..e678a7844cda043939c41763f06c5a65cbb0f17c GIT binary patch literal 337 zcmZutJxfDD5S)#Pr%_`H8w(LEL=il&wX%p+z+fJNSltWjamnQ_yxax-YZmzd{wQ%x zk@pIV{a|NyhTZR94oX4H?gw1%(IzGdf~HmK~K%fXcIzACb<~&FxpYY@9smP zP3Ui6Z-UiN<&-B$VV7`TPaB<M&`r`hnSZP&a#8fI1AV+AtFIt*d%%UA{ zZGZxy{dIq!;fE)bmx)WaJXV?srB_|=#SoecXRJE#N}W`s`OBOLt;yfsP^K~40U>{u w+WEfD|J+FPfsG9>NA}@dxSo%?1VYv;@Barf2;Q@ZlHU#Qm%S<*5TlCP6NcAQZvX%Q literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/Name.class b/target/classes/org/bukkit/plugin/java/annotation/Name.class new file mode 100644 index 0000000000000000000000000000000000000000..8119a13b08e41a9667c3dab34bf913618c9cffcc GIT binary patch literal 327 zcmZutJ4*vW5dJ0)H;Eck*jR{Q5wvl^*2*GQq9Hj1vDyp6vdP|Fxa|%@(-XQ|;}a9kZ*HG!@;p{9*ayO3UZ!fnPtFUczu$JZXAv%D zDMVNBo7=eDb8WdHTsE8j$(TKKR)qXaERIGnuXNK-lvl>fzX!d%3DazROm_9 VLjRBlIF>pR{6s>1fEcG3{sOXeT8RJv literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/Permissions$Perm.class b/target/classes/org/bukkit/plugin/java/annotation/Permissions$Perm.class new file mode 100644 index 0000000000000000000000000000000000000000..28fc5c734a8215f2435a5c70d50a8670317920a2 GIT binary patch literal 648 zcmb7CT}uK{5Iv*W`mvRkRu<7qh(@*GYfn)GL7-&#;?s4#ZCBT8?A`Up_0SLKM@6%0 z?FK>gFwC99nZucx`~LCz2B3{Y3mHOt7I@AunoLyay!er)v@;fS;Rvl~p$OGXJ6#z} zl`;G@C-K|D8lk*k`9gb6XE>H_XkndjoS-Rzt8XnrZZ7;t5~|JCeM0VqfzsY3VQnOh zOQ<9*H}XkDenY5Pg#m&zwu}q)9Qm!+W!D-pqdge0~Aw<0L?Xa8s07oL2L>_VL10nYQsvEmf?nExhu&u<@A7 zTstSJ3(z7&e+5R_EPhUBJoN!~2UuKTs_kWM;f@f#7F9Xr zM{PtVTJv>VHz%CFRMzX9-?Y=I;Z<`-I2&y=n5Z&iFWMKI`Jv&QtxrA{EJdy4eLN&| zpRDEb!6@fgc5+1MZ$FQy)f4mxgr-DWeuZSc0d^&8q9bPmA@<~sgzriO6A)t`2RIZo K6r^U3d!1i-LWx)a literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.class b/target/classes/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.class new file mode 100644 index 0000000000000000000000000000000000000000..2fb1a5c1b3fc8c99877661bda7d4cf52b5c99489 GIT binary patch literal 12125 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 a|D0duSIR3;@BEZsT~q;n#`sr@D*g`kNixI$ literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/SoftDependsOn.class b/target/classes/org/bukkit/plugin/java/annotation/SoftDependsOn.class new file mode 100644 index 0000000000000000000000000000000000000000..bb83d970653a2685e253300b22168c5605076635 GIT binary patch literal 346 zcmZvYO-lnY5Qg8WtlW@F03I;MJ4RdMZ@hMUbAdbqs0KWZ6v${xuK&0DqJi zd+4sRgM;+sGCaZxL%u}wl-GAsTJ>7v2%6cU}~r4Ui>2m*6bxm zMi}f9mR+S@^h%Z?#~I=F;2xD9{yBu+YaN@VJQ*v5>tk&3*Ch;R(FL=SH{*@Aa_D-( z&GSiq$xS8Up3vE`jfs1AIybSh5f{pjt)y^PzE3A30->GMNqYb-`{i3VYqq>&Tmn~hM;F3uw%oi!_%!=y|UQzDU0z|%~# z34>sl!#>oBppLbRXQ=^kwe92kz2)Ts#qa^UCC@RLJO#(78`! zrkGR#i*w$>DZwblqcNdb>^p@1?eLJX?In4-;xiFzjrEs!wEuxHSmsiREe}K{!kAaF zGQwqTSuMKH(ugY^==$*7jro>K<$vtB78(BQvwK4z9BDK)1~Adme4;PiKpUh_XQ5M8 UXXV?4t=ZO^a}Dba#L>gWFY#w@hyVZp literal 0 HcmV?d00001 diff --git a/target/classes/org/bukkit/plugin/java/annotation/Website.class b/target/classes/org/bukkit/plugin/java/annotation/Website.class new file mode 100644 index 0000000000000000000000000000000000000000..fb2dc7f67d8fbc357c7ae69c63247bfa9aecb6d2 GIT binary patch literal 333 zcmZutJxc>Y5PcJqti~8q*jR{QA*OM`*2*GQf+0B!!D=rI%O;z>aJL)quUYs5{88c< z#Jj>`KA89BJ!U??-ai1`;Z&hT7!{?}d0MYs)LWmd3wmXCMw<|dXre2Eo^xKg$O>)3 za1VMDtbWc{yo?H6!eu>e>^=NR5IQ^K6BEvEMo%?)7E2fGJ)t)%Qn}H z63(Y7M7QA=SGnACty&Q-8e$FS%#@a+=wAJgk3DZV#O!U$LTYD=$@rQ;IFRVbb4V^# YIFzo1qkZn-Sn5#lzJz)OF-|b}2GcEFGXMYp literal 0 HcmV?d00001 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..4716c8f --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Fri Feb 20 19:51:13 EST 2015 +version=1.0.0-SNAPSHOT +groupId=org.bukkit +artifactId=plugin-annotations diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..d1fddfb --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,17 @@ +org/bukkit/plugin/java/annotation/Version.class +org/bukkit/plugin/java/annotation/Commands$Cmd.class +org/bukkit/plugin/java/annotation/Permissions.class +org/bukkit/plugin/java/annotation/Main.class +org/bukkit/plugin/java/annotation/DependsOn.class +org/bukkit/plugin/java/annotation/Author.class +org/bukkit/plugin/java/annotation/Permissions$Perm.class +org/bukkit/plugin/java/annotation/Description.class +org/bukkit/plugin/java/annotation/Name.class +org/bukkit/plugin/java/annotation/Commands.class +org/bukkit/plugin/java/annotation/UsesDatabase.class +org/bukkit/plugin/java/annotation/SoftDependsOn.class +org/bukkit/plugin/java/annotation/LoadOn.class +org/bukkit/plugin/java/annotation/LogPrefix.class +org/bukkit/plugin/java/annotation/Website.class +org/bukkit/plugin/java/annotation/LoadBefore.class +org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..a87a200 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,15 @@ +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/PluginAnnotationProcessor.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Main.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/LogPrefix.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/UsesDatabase.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/LoadOn.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Permissions.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Website.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Description.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/LoadBefore.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Commands.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/DependsOn.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Name.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Author.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/Version.java +/Users/xor/PluginsWorkspace/misc/PluginAnnotations/src/main/java/org/bukkit/plugin/java/annotation/SoftDependsOn.java diff --git a/target/plugin-annotations-1.0.0-SNAPSHOT.jar b/target/plugin-annotations-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..6cedd203b3d6152fea1ba9533f3a758dda287184 GIT binary patch literal 15456 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 literal 0 HcmV?d00001