diff --git a/src/main/java/com/cnaude/purpleirc/CommandHandlers.java b/src/main/java/com/cnaude/purpleirc/CommandHandlers.java index 58710f3..8640a1f 100644 --- a/src/main/java/com/cnaude/purpleirc/CommandHandlers.java +++ b/src/main/java/com/cnaude/purpleirc/CommandHandlers.java @@ -128,39 +128,6 @@ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, return true; } } - } else if (commandLabel.equalsIgnoreCase("msg")) { - if (!sender.hasPermission("irc.smsg")) { - sender.sendMessage(plugin.noPermission); - return true; - } - if (args.length >= 1) { - ArrayList list = new ArrayList<>(); - list.add("smsg"); - list.addAll(Arrays.asList(args)); - plugin.logDebug("MSG: " + list); - commands.get("smsg").dispatch(sender, list.toArray(new String[list.size()])); - return true; - } - } else if (commandLabel.equalsIgnoreCase("r")) { - if (!sender.hasPermission("irc.smsg")) { - sender.sendMessage(plugin.noPermission); - return true; - } - if (plugin.privateMsgReply.containsKey(sender.getName())) { - if (args.length >= 1) { - ArrayList list = new ArrayList<>(); - list.add("smsg"); - list.add(plugin.privateMsgReply.get(sender.getName())); - list.addAll(Arrays.asList(args)); - plugin.logDebug("R: " + list); - commands.get("smsg").dispatch(sender, list.toArray(new String[list.size()])); - } else { - sender.sendMessage(ChatColor.WHITE + "Usage: " + ChatColor.GOLD + "/r [message]"); - } - } else { - sender.sendMessage(ChatColor.RED + "No messages received."); - } - return true; } commands.get("help").dispatch(sender, args); return true; diff --git a/src/main/java/com/cnaude/purpleirc/GameListeners/GamePlayerCommandPreprocessingListener.java b/src/main/java/com/cnaude/purpleirc/GameListeners/GamePlayerCommandPreprocessingListener.java index 49da875..eef0294 100644 --- a/src/main/java/com/cnaude/purpleirc/GameListeners/GamePlayerCommandPreprocessingListener.java +++ b/src/main/java/com/cnaude/purpleirc/GameListeners/GamePlayerCommandPreprocessingListener.java @@ -18,6 +18,10 @@ import com.cnaude.purpleirc.PurpleBot; import com.cnaude.purpleirc.PurpleIRC; +import java.util.ArrayList; +import java.util.Arrays; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -43,11 +47,12 @@ public GamePlayerCommandPreprocessingListener(PurpleIRC plugin) { * * @param event */ - @EventHandler(priority = EventPriority.NORMAL) + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent event) { if (event.isCancelled()) { return; } + Player player = event.getPlayer(); String message = event.getMessage(); String cmd; String action; @@ -82,6 +87,34 @@ public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent event) { } } } + if (plugin.overrideMsgCmd) { + if (cmd.equalsIgnoreCase("/msg")) { + event.setCancelled(true); //prevent other plugins from using /msg + if (player.hasPermission("irc.smsg")) { + String newCmd[] = message.replaceFirst(cmd, "smsg").split(" "); + plugin.commandHandlers.commands.get("smsg").dispatch(player, newCmd); + } else { + player.sendMessage(plugin.noPermission); + } + } else if (cmd.equalsIgnoreCase("/r")) { + event.setCancelled(true); //prevent other plugins from using /msg + if (player.hasPermission("irc.smsg")) { + String pName = player.getName(); + if (plugin.privateMsgReply.containsKey(pName)) { + String args[] = message.replaceFirst(cmd, "smsg " + plugin.privateMsgReply.get(pName)).split(" "); + if (args.length >= 1) { + plugin.commandHandlers.commands.get("smsg").dispatch(player, args); + } else { + player.sendMessage(ChatColor.WHITE + "Usage: " + ChatColor.GOLD + "/r [message]"); + } + } else { + player.sendMessage(ChatColor.RED + "No messages received."); + } + } else { + player.sendMessage(plugin.noPermission); + } + } + } for (PurpleBot ircBot : plugin.ircBots.values()) { if (!ircBot.channelCmdNotifyEnabled) { continue; diff --git a/src/main/java/com/cnaude/purpleirc/PurpleIRC.java b/src/main/java/com/cnaude/purpleirc/PurpleIRC.java index 3581a3a..60fbe56 100644 --- a/src/main/java/com/cnaude/purpleirc/PurpleIRC.java +++ b/src/main/java/com/cnaude/purpleirc/PurpleIRC.java @@ -71,14 +71,10 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.management.ManagementFactory; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.Collator; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -88,17 +84,13 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.codec.binary.Base64; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; -import org.bukkit.command.PluginCommand; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.SimplePluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.pircbotx.IdentServer; @@ -297,11 +289,6 @@ public void onEnable() { ircTabCompleter = new PurpleTabCompleter(this); getCommand("irc").setExecutor(commandHandlers); getCommand("irc").setTabCompleter(ircTabCompleter); - if (overrideMsgCmd) { - registerCommand("msg", "r"); - getCommand("msg").setExecutor(commandHandlers); - getCommand("r").setExecutor(commandHandlers); - } regexGlobber = new RegexGlobber(); tokenizer = new ChatTokenizer(this); loadBots(); @@ -1615,6 +1602,7 @@ public String encodeLinkMsg(String cmd, String msg) { /** * Generic player counter. CB uses Player[] and Spigot uses List<>(). + * @return */ public int getOnlinePlayerCount() { int count = 0; @@ -1624,47 +1612,4 @@ public int getOnlinePlayerCount() { return count; } - /* - * https://bukkit.org/threads/tutorial-registering-commands-at-runtime.158461/ - */ - public void registerCommand(String... aliases) { - PluginCommand command = getCommand(aliases[0], this); - - command.setAliases(Arrays.asList(aliases)); - getCommandMap().register(this.getDescription().getName(), command); - } - - private PluginCommand getCommand(String name, Plugin plugin) { - logInfo("Registering command: " + name); - PluginCommand command = null; - - try { - Constructor c = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class); - c.setAccessible(true); - - command = c.newInstance(name, plugin); - } catch (SecurityException | IllegalArgumentException | IllegalAccessException | InstantiationException | InvocationTargetException | NoSuchMethodException e) { - logError(e.getMessage()); - } - - return command; - } - - private CommandMap getCommandMap() { - CommandMap commandMap = null; - - try { - if (Bukkit.getPluginManager() instanceof SimplePluginManager) { - Field f = SimplePluginManager.class.getDeclaredField("commandMap"); - f.setAccessible(true); - - commandMap = (CommandMap) f.get(Bukkit.getPluginManager()); - } - } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - logError(e.getMessage()); - } - - return commandMap; - } - } diff --git a/src/main/java/com/cnaude/purpleirc/TemplateName.java b/src/main/java/com/cnaude/purpleirc/TemplateName.java index a43e9f3..389a43a 100644 --- a/src/main/java/com/cnaude/purpleirc/TemplateName.java +++ b/src/main/java/com/cnaude/purpleirc/TemplateName.java @@ -141,5 +141,5 @@ public class TemplateName { public final static String IRC_FLOOD_WARNING = "irc-flood-warning"; public final static String CROSS_CHAT = "cross-chat"; - + } diff --git a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java index 59a775f..9c5fd6d 100644 --- a/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java +++ b/src/main/java/com/cnaude/purpleirc/Utilities/NetPackets.java @@ -18,6 +18,7 @@ import com.cnaude.purpleirc.PurpleBot; import com.cnaude.purpleirc.PurpleIRC; +import com.cnaude.purpleirc.TemplateName; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.Packets; import com.comphenix.protocol.ProtocolLibrary;