From c0308940c8ef74922ab637d4a4ca2ae6b262d33a Mon Sep 17 00:00:00 2001 From: Brettflan Date: Sun, 11 Mar 2012 11:41:56 -0500 Subject: [PATCH] Connected standard command handler getCommand("f"), for it to work with other plugins which directly execute commands using that interface. --- src/com/massivecraft/factions/P.java | 21 +++++++++++++++++-- .../massivecraft/factions/zcore/MPlugin.java | 13 +++++++++++- .../zcore/MPluginSecretServerListener.java | 16 +------------- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/com/massivecraft/factions/P.java b/src/com/massivecraft/factions/P.java index f9bdc867..7ca3c48d 100644 --- a/src/com/massivecraft/factions/P.java +++ b/src/com/massivecraft/factions/P.java @@ -2,16 +2,18 @@ package com.massivecraft.factions; import java.lang.reflect.Modifier; import java.lang.reflect.Type; +import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.bukkit.block.Block; -import org.bukkit.Location; -import org.bukkit.Material; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerChatEvent; +import org.bukkit.Location; +import org.bukkit.Material; import com.massivecraft.factions.adapters.FFlagTypeAdapter; import com.massivecraft.factions.adapters.FLocToStringSetTypeAdapter; @@ -36,6 +38,7 @@ import com.massivecraft.factions.struct.FPerm; import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.util.AutoLeaveTask; import com.massivecraft.factions.zcore.MPlugin; +import com.massivecraft.factions.zcore.util.TextUtil; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; @@ -112,6 +115,9 @@ public class P extends MPlugin getServer().getPluginManager().registerEvents(blockListener, this); getServer().getPluginManager().registerEvents(serverListener, this); + // since some other plugins execute commands directly through this command interface, provide it + this.getCommand(this.refCommand).setExecutor(this); + postEnable(); this.loadSuccessful = true; } @@ -186,6 +192,17 @@ public class P extends MPlugin return super.handleCommand(sender, commandString, testOnly); } + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] split) + { + // if bare command at this point, it has already been handled by MPlugin's command listeners + if (split == null || split.length == 0) return true; + + // otherwise, needs to be handled; presumably another plugin directly ran the command + String cmd = Conf.baseCommandAliases.isEmpty() ? "/f" : "/" + Conf.baseCommandAliases.get(0); + return handleCommand(sender, cmd + " " + TextUtil.implode(Arrays.asList(split), " "), false); + } + // -------------------------------------------- // diff --git a/src/com/massivecraft/factions/zcore/MPlugin.java b/src/com/massivecraft/factions/zcore/MPlugin.java index c8547255..427da45e 100644 --- a/src/com/massivecraft/factions/zcore/MPlugin.java +++ b/src/com/massivecraft/factions/zcore/MPlugin.java @@ -36,6 +36,7 @@ public abstract class MPlugin extends JavaPlugin protected boolean loadSuccessful = false; public boolean getAutoSave() {return this.autoSave;} public void setAutoSave(boolean val) {this.autoSave = val;} + public String refCommand = ""; // Listeners private MPluginSecretPlayerListener mPluginSecretPlayerListener; @@ -68,7 +69,17 @@ public abstract class MPlugin extends JavaPlugin this.txt = new TextUtil(); initTXT(); - + + // attempt to get first command defined in plugin.yml as reference command, if any commands are defined in there + // reference command will be used to prevent "unknown command" console messages + try + { + Map> refCmd = this.getDescription().getCommands(); + if (refCmd != null && !refCmd.isEmpty()) + this.refCommand = (String)(refCmd.keySet().toArray()[0]); + } + catch (ClassCastException ex) {} + // Create and register listeners this.mPluginSecretPlayerListener = new MPluginSecretPlayerListener(this); this.mPluginSecretServerListener = new MPluginSecretServerListener(this); diff --git a/src/com/massivecraft/factions/zcore/MPluginSecretServerListener.java b/src/com/massivecraft/factions/zcore/MPluginSecretServerListener.java index 6b4c0784..004b85da 100644 --- a/src/com/massivecraft/factions/zcore/MPluginSecretServerListener.java +++ b/src/com/massivecraft/factions/zcore/MPluginSecretServerListener.java @@ -1,7 +1,5 @@ package com.massivecraft.factions.zcore; -import java.util.Map; - import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -10,22 +8,10 @@ import org.bukkit.event.server.ServerCommandEvent; public class MPluginSecretServerListener implements Listener { private MPlugin p; - private String refCommand; public MPluginSecretServerListener(MPlugin p) { this.p = p; - refCommand = ""; - - // attempt to get first command defined in plugin.yml as reference command, if any commands are defined in there - // reference command will be used to prevent "unknown command" console messages - try - { - Map> refCmd = p.getDescription().getCommands(); - if (refCmd != null && !refCmd.isEmpty()) - refCommand = (String)(refCmd.keySet().toArray()[0]); - } - catch (ClassCastException ex) {} } @EventHandler(priority = EventPriority.LOWEST) @@ -35,7 +21,7 @@ public class MPluginSecretServerListener implements Listener if (p.handleCommand(event.getSender(), event.getCommand())) { - event.setCommand(refCommand); + event.setCommand(p.refCommand); } }