From b976cc8e910630a9cf3a0d45813cede508a1c3d3 Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Tue, 17 Aug 2021 01:48:00 -0400 Subject: [PATCH 1/4] Don't push build directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index be3bb25..f414120 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,4 @@ buildNumber.properties # Common working directory run/ +target/ \ No newline at end of file From 34ff104f0980a043900bcb6deeba04aa29c2cf74 Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Tue, 17 Aug 2021 02:02:06 -0400 Subject: [PATCH 2/4] Add and implement QualifiedSubCommand --- .../simpapi/command/CommandManager.java | 15 +++++++++++++-- .../simpapi/command/QualifiedSubCommand.java | 10 ++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java diff --git a/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java b/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java index c600446..8f8e245 100644 --- a/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java +++ b/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java @@ -17,6 +17,10 @@ */ public class CommandManager { + private static boolean isQualifiedSubcommand(Class clazz) { + return clazz.isAnnotationPresent(QualifiedSubCommand.class); + } + /** * @param plugin An instance of your plugin that is using this API. If called within plugin main class, provide this keyword * @param commandName The name of the command @@ -38,8 +42,15 @@ public static void createCoreCommand(JavaPlugin plugin, String commandName, Arrays.stream(subcommands).map(subcommand -> { try{ Constructor constructor = subcommand.getConstructor(); - return constructor.newInstance(); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + SubCommand sub = constructor.newInstance(); + + //Should this subcommand be treated as an independent command in its own right? + if(isQualifiedSubcommand(subcommand)) { + createCoreCommand(plugin, sub.getName(), sub.getDescription(), sub.getSyntax(), commandList, sub.getAliases()); + } + + return sub; + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException | NoSuchFieldException e) { e.printStackTrace(); } return null; diff --git a/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java b/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java new file mode 100644 index 0000000..d744150 --- /dev/null +++ b/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java @@ -0,0 +1,10 @@ +package me.kodysimpson.simpapi.command; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface QualifiedSubCommand {} \ No newline at end of file From f1ab5347a4da1e5fd1aaea849e8998d46181f2b1 Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Tue, 17 Aug 2021 02:08:44 -0400 Subject: [PATCH 3/4] Don't use the subcommand's aliases --- .../me/kodysimpson/simpapi/command/CommandManager.java | 8 +++++++- .../kodysimpson/simpapi/command/QualifiedSubCommand.java | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java b/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java index 8f8e245..1d03787 100644 --- a/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java +++ b/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java @@ -21,6 +21,12 @@ private static boolean isQualifiedSubcommand(Class clazz) return clazz.isAnnotationPresent(QualifiedSubCommand.class); } + private static List fetchAliasesForSubcommand(Class clazz) { + if(!isQualifiedSubcommand(clazz)) return Collections.emptyList(); + QualifiedSubCommand marker = clazz.getAnnotation(QualifiedSubCommand.class); + return Arrays.asList(marker.aliases); + } + /** * @param plugin An instance of your plugin that is using this API. If called within plugin main class, provide this keyword * @param commandName The name of the command @@ -46,7 +52,7 @@ public static void createCoreCommand(JavaPlugin plugin, String commandName, //Should this subcommand be treated as an independent command in its own right? if(isQualifiedSubcommand(subcommand)) { - createCoreCommand(plugin, sub.getName(), sub.getDescription(), sub.getSyntax(), commandList, sub.getAliases()); + createCoreCommand(plugin, sub.getName(), sub.getDescription(), sub.getSyntax(), commandList, fetchAliasesForSubcommand(subcommand)); } return sub; diff --git a/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java b/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java index d744150..95a0318 100644 --- a/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java +++ b/src/main/java/me/kodysimpson/simpapi/command/QualifiedSubCommand.java @@ -7,4 +7,6 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -public @interface QualifiedSubCommand {} \ No newline at end of file +public @interface QualifiedSubCommand { + String[] aliases = { "" }; +} \ No newline at end of file From f72f34e8e42411fd1dd22aa26af7cfc06adc5a8d Mon Sep 17 00:00:00 2001 From: muunitnocQ Date: Tue, 17 Aug 2021 02:09:23 -0400 Subject: [PATCH 4/4] Format the line nicer --- .../me/kodysimpson/simpapi/command/CommandManager.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java b/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java index 1d03787..07a20a7 100644 --- a/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java +++ b/src/main/java/me/kodysimpson/simpapi/command/CommandManager.java @@ -52,7 +52,14 @@ public static void createCoreCommand(JavaPlugin plugin, String commandName, //Should this subcommand be treated as an independent command in its own right? if(isQualifiedSubcommand(subcommand)) { - createCoreCommand(plugin, sub.getName(), sub.getDescription(), sub.getSyntax(), commandList, fetchAliasesForSubcommand(subcommand)); + createCoreCommand( + plugin, + sub.getName(), + sub.getDescription(), + sub.getSyntax(), + commandList, + fetchAliasesForSubcommand(subcommand) + ); } return sub;