From 1ed7a494873331e1aeeb61fb6f59f9690c424cc3 Mon Sep 17 00:00:00 2001 From: Steve Anton Date: Fri, 26 Apr 2013 22:31:07 -0700 Subject: [PATCH 1/3] Move pagination to the core framework. --- .gitignore | 5 +++ .../util/commands/CommandCooldown.java | 31 +++++++++++++++++++ .../util}/pagination/PaginatedResult.java | 9 +++--- .../pagination/SimplePaginatedResult.java | 4 +-- 4 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java rename {bukkit/src/main/java/com/sk89q/bukkit => core/src/main/java/com/sk89q/minecraft/util}/pagination/PaginatedResult.java (85%) rename {bukkit/src/main/java/com/sk89q/bukkit => core/src/main/java/com/sk89q/minecraft/util}/pagination/SimplePaginatedResult.java (84%) diff --git a/.gitignore b/.gitignore index 9bf9e31..7cba35d 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,8 @@ dependency-reduced-pom.xml *.xcworkspace xcuserdata *class + +# IntelliJ IDEA generated files +*.iml +*.ipr +*.iws diff --git a/core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java b/core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java new file mode 100644 index 0000000..344e2e7 --- /dev/null +++ b/core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java @@ -0,0 +1,31 @@ +package com.sk89q.minecraft.util.commands; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Indicates a usage cooldown that should be enforced. + * + * @author Isaac Moore + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface CommandCooldown { + /** + * The time (in seconds) of the cooldown. Should be a positive integer greater than 0. Can be a decimal. + */ + double time(); + + /** + * The message to be displayed to the user on an unsuccessful command execution.
Important: Use @s + * where you would like the number of seconds remaining in the cooldown to be displayed.
Default message is + * You must wait @s more seconds to use that command again. + */ + String message() default "You must wait @s more seconds to use that command again."; + + + /** + * Whether or not to add to the cooldown time on an unsuccessful command execution. Defaults to false. + * TODO: Finish documentation + */ + boolean addTimeOnAttempt() default false; +} diff --git a/bukkit/src/main/java/com/sk89q/bukkit/pagination/PaginatedResult.java b/core/src/main/java/com/sk89q/minecraft/util/pagination/PaginatedResult.java similarity index 85% rename from bukkit/src/main/java/com/sk89q/bukkit/pagination/PaginatedResult.java rename to core/src/main/java/com/sk89q/minecraft/util/pagination/PaginatedResult.java index 39a6dee..926021c 100644 --- a/bukkit/src/main/java/com/sk89q/bukkit/pagination/PaginatedResult.java +++ b/core/src/main/java/com/sk89q/minecraft/util/pagination/PaginatedResult.java @@ -16,15 +16,14 @@ * along with this program. If not, see . */ -package com.sk89q.bukkit.pagination; +package com.sk89q.minecraft.util.pagination; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.bukkit.command.CommandSender; - import com.sk89q.minecraft.util.commands.CommandException; +import com.sk89q.minecraft.util.commands.WrappedCommandSender; /** * Commands that wish to display a paginated list of results can use this class to do @@ -42,11 +41,11 @@ public PaginatedResult(int resultsPerPage) { this.resultsPerPage = resultsPerPage; } - public void display(CommandSender sender, Collection results, int page) throws CommandException { + public void display(WrappedCommandSender sender, Collection results, int page) throws CommandException { this.display(sender, new ArrayList(results), page); } - public void display(CommandSender sender, List results, int page) throws CommandException { + public void display(WrappedCommandSender sender, List results, int page) throws CommandException { if (results.size() == 0) throw new CommandException("No results match!"); int maxPages = results.size() / this.resultsPerPage + 1; diff --git a/bukkit/src/main/java/com/sk89q/bukkit/pagination/SimplePaginatedResult.java b/core/src/main/java/com/sk89q/minecraft/util/pagination/SimplePaginatedResult.java similarity index 84% rename from bukkit/src/main/java/com/sk89q/bukkit/pagination/SimplePaginatedResult.java rename to core/src/main/java/com/sk89q/minecraft/util/pagination/SimplePaginatedResult.java index 8d69ef8..69c1eae 100644 --- a/bukkit/src/main/java/com/sk89q/bukkit/pagination/SimplePaginatedResult.java +++ b/core/src/main/java/com/sk89q/minecraft/util/pagination/SimplePaginatedResult.java @@ -1,6 +1,6 @@ -package com.sk89q.bukkit.pagination; +package com.sk89q.minecraft.util.pagination; -import org.bukkit.ChatColor; +import com.sk89q.minecraft.util.commands.ChatColor; public abstract class SimplePaginatedResult extends PaginatedResult { From 31bf4a3ea3d5139808e2bed7639e4386103b6728 Mon Sep 17 00:00:00 2001 From: Isaac Moore Date: Tue, 2 Jul 2013 18:35:33 -0500 Subject: [PATCH 2/3] Add checkSender() to enforce @Console annotation --- .../sk89q/bukkit/util/BukkitCommandsManager.java | 12 ++++++++++++ .../sk89q/bungee/util/BungeeCommandsManager.java | 7 +++++++ .../minecraft/util/commands/CommandsManager.java | 14 ++++++-------- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java b/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java index 41ee940..522f815 100644 --- a/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java +++ b/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java @@ -1,12 +1,24 @@ package com.sk89q.bukkit.util; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandsManager; +import com.sk89q.minecraft.util.commands.Console; + +import java.lang.reflect.Method; public class BukkitCommandsManager extends CommandsManager { @Override public boolean hasPermission(CommandSender player, String perm) { return player.hasPermission(perm); } + + @Override + public void checkSender(CommandSender sender, Method method) throws CommandException { + if (!method.isAnnotationPresent(Console.class) && sender instanceof ConsoleCommandSender) { + throw new CommandException("You must be a player to execute this command."); + } + } } diff --git a/bungee/src/main/java/com/sk89q/bungee/util/BungeeCommandsManager.java b/bungee/src/main/java/com/sk89q/bungee/util/BungeeCommandsManager.java index dc48966..23a4a96 100644 --- a/bungee/src/main/java/com/sk89q/bungee/util/BungeeCommandsManager.java +++ b/bungee/src/main/java/com/sk89q/bungee/util/BungeeCommandsManager.java @@ -4,7 +4,14 @@ import com.sk89q.minecraft.util.commands.CommandsManager; +import java.lang.reflect.Method; + public class BungeeCommandsManager extends CommandsManager { + @Override + public void checkSender(CommandSender sender, Method method) { + // Sender will never be the console + } + @Override public boolean hasPermission(CommandSender player, String perm) { return player.hasPermission(perm); diff --git a/core/src/main/java/com/sk89q/minecraft/util/commands/CommandsManager.java b/core/src/main/java/com/sk89q/minecraft/util/commands/CommandsManager.java index 5774726..0f73ae1 100644 --- a/core/src/main/java/com/sk89q/minecraft/util/commands/CommandsManager.java +++ b/core/src/main/java/com/sk89q/minecraft/util/commands/CommandsManager.java @@ -19,20 +19,15 @@ package com.sk89q.minecraft.util.commands; +import com.sk89q.util.StringUtil; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; -import com.sk89q.util.StringUtil; - /** *

Manager for handling commands. This allows you to easily process commands, * including nested commands, by correctly annotating methods of a class.

@@ -425,6 +420,8 @@ public void execute(String[] args, T player, executeMethod(null, args, player, newMethodArgs, 0); } + public abstract void checkSender(T sender, Method method) throws CommandException; + /** * Attempt to execute a command. * @@ -453,6 +450,7 @@ public void executeMethod(Method parent, String[] args, } checkPermission(player, method); + checkSender(player, method); int argsCount = args.length - 1 - level; From d1c5aa1665b517e3705cd70e6b02251bf701ee48 Mon Sep 17 00:00:00 2001 From: Isaac Moore Date: Tue, 2 Jul 2013 18:36:54 -0500 Subject: [PATCH 3/3] Bump to 0.4.1-SNAPSHOT, update dependencies --- .gitignore | 5 --- bukkit/pom.xml | 6 ++-- .../bukkit/util/BukkitCommandsManager.java | 3 +- bungee/pom.xml | 6 ++-- core/pom.xml | 2 +- .../util/commands/CommandCooldown.java | 31 ------------------- .../commands/ConsoleCommandException.java | 7 +++++ 7 files changed, 16 insertions(+), 44 deletions(-) delete mode 100644 core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java create mode 100644 core/src/main/java/com/sk89q/minecraft/util/commands/ConsoleCommandException.java diff --git a/.gitignore b/.gitignore index 7cba35d..9bf9e31 100644 --- a/.gitignore +++ b/.gitignore @@ -25,8 +25,3 @@ dependency-reduced-pom.xml *.xcworkspace xcuserdata *class - -# IntelliJ IDEA generated files -*.iml -*.ipr -*.iws diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 65dc0aa..756c92e 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -7,7 +7,7 @@ command-framework-bukkit jar - 0.4-SNAPSHOT + 0.4.1-SNAPSHOT Sk89q Command Framework for Bukkit Supporting classes for running the command framework on Bukkit servers. @@ -22,12 +22,12 @@ com.sk89q command-framework-core - 0.4-SNAPSHOT + 0.4.1-SNAPSHOT org.bukkit bukkit - 1.4.7-R1.0 + 1.5.2-R1.0 diff --git a/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java b/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java index 522f815..3b3f8c0 100644 --- a/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java +++ b/bukkit/src/main/java/com/sk89q/bukkit/util/BukkitCommandsManager.java @@ -1,5 +1,6 @@ package com.sk89q.bukkit.util; +import com.sk89q.minecraft.util.commands.ConsoleCommandException; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; @@ -18,7 +19,7 @@ public boolean hasPermission(CommandSender player, String perm) { @Override public void checkSender(CommandSender sender, Method method) throws CommandException { if (!method.isAnnotationPresent(Console.class) && sender instanceof ConsoleCommandSender) { - throw new CommandException("You must be a player to execute this command."); + throw new ConsoleCommandException(); } } } diff --git a/bungee/pom.xml b/bungee/pom.xml index 88982c4..4a9a5ef 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -7,7 +7,7 @@ command-framework-bungee jar - 0.4-SNAPSHOT + 0.4.1-SNAPSHOT Sk89q Command Framework for BungeeCord Supporting classes for using the command framework on BungeeCord. @@ -22,12 +22,12 @@ com.sk89q command-framework-core - 0.4-SNAPSHOT + 0.4.1-SNAPSHOT net.md-5 bungeecord-api - 1.5-SNAPSHOT + 1.6.1-SNAPSHOT diff --git a/core/pom.xml b/core/pom.xml index 2072e51..8282ea6 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -7,7 +7,7 @@ command-framework-core jar - 0.4-SNAPSHOT + 0.4.1-SNAPSHOT Sk89q Command Fraework Core Core classes for the sk89q command framework. diff --git a/core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java b/core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java deleted file mode 100644 index 344e2e7..0000000 --- a/core/src/main/java/com/sk89q/minecraft/util/commands/CommandCooldown.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sk89q.minecraft.util.commands; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * Indicates a usage cooldown that should be enforced. - * - * @author Isaac Moore - */ -@Retention(RetentionPolicy.RUNTIME) -public @interface CommandCooldown { - /** - * The time (in seconds) of the cooldown. Should be a positive integer greater than 0. Can be a decimal. - */ - double time(); - - /** - * The message to be displayed to the user on an unsuccessful command execution.
Important: Use @s - * where you would like the number of seconds remaining in the cooldown to be displayed.
Default message is - * You must wait @s more seconds to use that command again. - */ - String message() default "You must wait @s more seconds to use that command again."; - - - /** - * Whether or not to add to the cooldown time on an unsuccessful command execution. Defaults to false. - * TODO: Finish documentation - */ - boolean addTimeOnAttempt() default false; -} diff --git a/core/src/main/java/com/sk89q/minecraft/util/commands/ConsoleCommandException.java b/core/src/main/java/com/sk89q/minecraft/util/commands/ConsoleCommandException.java new file mode 100644 index 0000000..76a7529 --- /dev/null +++ b/core/src/main/java/com/sk89q/minecraft/util/commands/ConsoleCommandException.java @@ -0,0 +1,7 @@ +package com.sk89q.minecraft.util.commands; + +/** + * Raised when the console attempts to execute a command not annotated with {@link Console}. + */ +public class ConsoleCommandException extends CommandException { +}