Skip to content
This repository has been archived by the owner on Jul 27, 2019. It is now read-only.

Commit

Permalink
Remove reflection code and just use command preprocessor.
Browse files Browse the repository at this point in the history
  • Loading branch information
cnaude committed Jun 27, 2015
1 parent 8d3289a commit 80f0a77
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 91 deletions.
33 changes: 0 additions & 33 deletions src/main/java/com/cnaude/purpleirc/CommandHandlers.java
Expand Up @@ -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<String> 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<String> 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;
Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
57 changes: 1 addition & 56 deletions src/main/java/com/cnaude/purpleirc/PurpleIRC.java
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand All @@ -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<PluginCommand> 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;
}

}
2 changes: 1 addition & 1 deletion src/main/java/com/cnaude/purpleirc/TemplateName.java
Expand Up @@ -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";

}
Expand Up @@ -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;
Expand Down

0 comments on commit 80f0a77

Please sign in to comment.