From eca6013716c3c6d548f0546be434631d7a67be67 Mon Sep 17 00:00:00 2001 From: Pepich Date: Mon, 15 Jan 2018 18:47:19 +0100 Subject: Hotfix for unknown command error on click command --- src/main/java/net/nemez/chatapi/ChatAPI.java | 98 +++++++++++++++------------- 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/src/main/java/net/nemez/chatapi/ChatAPI.java b/src/main/java/net/nemez/chatapi/ChatAPI.java index 6aaa1c8..446c7b5 100644 --- a/src/main/java/net/nemez/chatapi/ChatAPI.java +++ b/src/main/java/net/nemez/chatapi/ChatAPI.java @@ -12,8 +12,9 @@ import net.nemez.chatapi.click.CallbackCommand; import net.nemez.chatapi.click.Message; import net.nemez.chatapi.click.PlayerQuitListener; -public class ChatAPI { - +public class ChatAPI +{ + /* message coloring permission */ public static final String PERMISSION_CHAT_COLOR = "chat.color"; /* message formatting permission */ @@ -29,104 +30,109 @@ public class ChatAPI { /* the actual command name for use in click callbacks */ private static String internalCommandName; - /** - * Initializes ChatAPI and registers the required commands for clickable chat to function. - */ - public static void initialize(JavaPlugin plugin) { - if (internalCommandName != null) { + /** Initializes ChatAPI and registers the required commands for clickable chat to function. */ + public static void initialize(JavaPlugin plugin) + { + if (internalCommandName != null) + { return; } Random rand = new Random(System.currentTimeMillis()); internalCommandName = "chatapi-exec-" + Integer.toHexString(rand.nextInt(0xEFFF) + 0x1000); - try { + try + { final Field cmdMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); cmdMap.setAccessible(true); CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); map.register("net/nemez/chatapi", new CallbackCommand(internalCommandName)); - } catch (Exception e) { + } + catch (Exception e) + { plugin.getLogger().severe("Failed to register internal command '" + internalCommandName + "'"); e.printStackTrace(); } - internalCommandName = "chatapi:" + internalCommandName; + // For some reason the "chatapi:..." cmd is no longer registered. Disabling this until further investigation and fixing. + // internalCommandName = "chatapi:" + internalCommandName; plugin.getServer().getPluginManager().registerEvents(new PlayerQuitListener(), plugin); plugin.getLogger().info("ChatAPI initialized"); } - /** - * Colorifies a message using &format codes. Respects permissions. + /** Colorifies a message using &format codes. Respects permissions. * * @param sender the command sender whose permissions to use. null if permissions are to be ignored. * @param message the message to color - * @return colored message - */ - public static String colorify(CommandSender sender, String message) { - if (sender == null || sender.hasPermission(PERMISSION_CHAT_COLOR)) { + * @return colored message */ + public static String colorify(CommandSender sender, String message) + { + if (sender == null || sender.hasPermission(PERMISSION_CHAT_COLOR)) + { message = message.replaceAll("&([0-9a-fA-FrR])", "§$1"); } - if (sender == null || sender.hasPermission(PERMISSION_CHAT_FORMAT)) { + if (sender == null || sender.hasPermission(PERMISSION_CHAT_FORMAT)) + { message = message.replaceAll("&([l-oL-OrR])", "§$1"); } - if (sender == null || sender.hasPermission(PERMISSION_CHAT_MAGIC)) { + if (sender == null || sender.hasPermission(PERMISSION_CHAT_MAGIC)) + { message = message.replaceAll("&([kKrR])", "§$1"); } return message; } - /** - * Sends a colorified message to the command sender. + /** Sends a colorified message to the command sender. * * @param sender the command sender to whom to send the message. - * @param message the message to send. - */ - public static void send(CommandSender sender, String message) { - if (sender == null) { + * @param message the message to send. */ + public static void send(CommandSender sender, String message) + { + if (sender == null) + { return; } sender.sendMessage(colorify(null, message)); } - /** - * Checks if a command sender has the permission node required to send chat messages. + /** Checks if a command sender has the permission node required to send chat messages. * * @param sender the command sender to check. - * @return true/false if sender can chat or is null. - */ - public static boolean canChat(CommandSender sender) { - if (sender == null) { + * @return true/false if sender can chat or is null. */ + public static boolean canChat(CommandSender sender) + { + if (sender == null) + { return true; - }else{ + } + else + { return sender.hasPermission(PERMISSION_CHAT_USE); } } - /** - * Creates a new message object that will be sent to the given command sender with regards to the second command sender's permissions. + /** Creates a new message object that will be sent to the given command sender with regards to the second command sender's permissions. * * @param sender the command sender to whom to send the message. * @param permissionSender the command sender whose permissions to use. - * @return message object - */ - public static Message createMessage(CommandSender sender, CommandSender permissionSender) { + * @return message object */ + public static Message createMessage(CommandSender sender, CommandSender permissionSender) + { return new Message(sender, permissionSender); } - /** - * Creates a new message object that will be sent to the given command sender. + /** Creates a new message object that will be sent to the given command sender. * * @param sender the command sender to whom to send the message. - * @return message object. - */ - public static Message createMessage(CommandSender sender) { + * @return message object. */ + public static Message createMessage(CommandSender sender) + { return createMessage(sender, null); } - /** - * Gets the name of the internal ChatAPI command used for click callbacks. + /** Gets the name of the internal ChatAPI command used for click callbacks. * This function is used internally and you don't need to worry about it. * - * @return callback command name - */ - public static String getInternalCallbackCommand() { + * @return callback command name */ + public static String getInternalCallbackCommand() + { return internalCommandName; } } -- cgit v1.2.3