From fbfdf8fe23f8d1fcddab57b092bda733a1af0336 Mon Sep 17 00:00:00 2001 From: Brettflan Date: Fri, 9 Mar 2012 21:24:58 -0600 Subject: [PATCH] (donington) Consolidated chat event listeners into a single chat listener class. (Brettflan) Fixed slashless commands not being logged if player was in faction chat or alliance chat mode. Also cleaned up chat code a bit, nothing major. --- src/com/massivecraft/factions/P.java | 8 +- .../listeners/FactionsChatEarlyListener.java | 94 --------- .../listeners/FactionsChatListener.java | 185 ++++++++++++++++++ .../listeners/FactionsPlayerListener.java | 100 ---------- .../massivecraft/factions/zcore/MPlugin.java | 6 +- 5 files changed, 190 insertions(+), 203 deletions(-) delete mode 100644 src/com/massivecraft/factions/listeners/FactionsChatEarlyListener.java create mode 100644 src/com/massivecraft/factions/listeners/FactionsChatListener.java diff --git a/src/com/massivecraft/factions/P.java b/src/com/massivecraft/factions/P.java index ecf2af74..0eab852a 100644 --- a/src/com/massivecraft/factions/P.java +++ b/src/com/massivecraft/factions/P.java @@ -22,7 +22,7 @@ import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.Worldguard; import com.massivecraft.factions.integration.capi.CapiFeatures; import com.massivecraft.factions.listeners.FactionsBlockListener; -import com.massivecraft.factions.listeners.FactionsChatEarlyListener; +import com.massivecraft.factions.listeners.FactionsChatListener; import com.massivecraft.factions.listeners.FactionsEntityListener; import com.massivecraft.factions.listeners.FactionsPlayerListener; import com.massivecraft.factions.listeners.FactionsServerListener; @@ -43,7 +43,7 @@ public class P extends MPlugin // Listeners public final FactionsPlayerListener playerListener; - public final FactionsChatEarlyListener chatEarlyListener; + public final FactionsChatListener chatListener; public final FactionsEntityListener entityListener; public final FactionsBlockListener blockListener; public final FactionsServerListener serverListener; @@ -62,7 +62,7 @@ public class P extends MPlugin { p = this; this.playerListener = new FactionsPlayerListener(this); - this.chatEarlyListener = new FactionsChatEarlyListener(this); + this.chatListener = new FactionsChatListener(this); this.entityListener = new FactionsEntityListener(this); this.blockListener = new FactionsBlockListener(this); this.serverListener = new FactionsServerListener(this); @@ -102,7 +102,7 @@ public class P extends MPlugin // Register Event Handlers getServer().getPluginManager().registerEvents(playerListener, this); - getServer().getPluginManager().registerEvents(chatEarlyListener, this); + getServer().getPluginManager().registerEvents(chatListener, this); getServer().getPluginManager().registerEvents(entityListener, this); getServer().getPluginManager().registerEvents(blockListener, this); getServer().getPluginManager().registerEvents(serverListener, this); diff --git a/src/com/massivecraft/factions/listeners/FactionsChatEarlyListener.java b/src/com/massivecraft/factions/listeners/FactionsChatEarlyListener.java deleted file mode 100644 index 05cad888..00000000 --- a/src/com/massivecraft/factions/listeners/FactionsChatEarlyListener.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.massivecraft.factions.listeners; - -import java.util.logging.Level; - -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerChatEvent; - -import com.massivecraft.factions.Conf; -import com.massivecraft.factions.FPlayer; -import com.massivecraft.factions.FPlayers; -import com.massivecraft.factions.Faction; -import com.massivecraft.factions.P; -import com.massivecraft.factions.struct.ChatMode; -import com.massivecraft.factions.struct.Relation; - - -// this is an addtional PlayerListener for handling slashless command usage and faction chat, to be set at low priority so Factions gets to them first -public class FactionsChatEarlyListener implements Listener -{ - public P p; - public FactionsChatEarlyListener(P p) - { - this.p = p; - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerChat(PlayerChatEvent event) - { - if (event.isCancelled()) return; - - Player talkingPlayer = event.getPlayer(); - String msg = event.getMessage(); - - FPlayer me = FPlayers.i.get(talkingPlayer); - ChatMode chat = me.getChatMode(); - - // slashless factions commands need to be handled here if the user isn't in public chat mode - if (chat != ChatMode.PUBLIC && p.handleCommand(event.getPlayer(), event.getMessage())) - { - event.setCancelled(true); - return; - } - - // Is it a faction chat message? - if (chat == ChatMode.FACTION) - { - Faction myFaction = me.getFaction(); - - String message = String.format(Conf.factionChatFormat, me.describeTo(myFaction), msg); - myFaction.sendMessage(message); - - P.p.log(Level.INFO, ChatColor.stripColor("FactionChat "+myFaction.getTag()+": "+message)); - - //Send to any players who are spying chat - for (FPlayer fplayer : FPlayers.i.getOnline()) - { - if(fplayer.isSpyingChat() && fplayer.getFaction() != myFaction) - fplayer.sendMessage("[FCspy] "+myFaction.getTag()+": "+message); - } - - event.setCancelled(true); - return; - } - else if (chat == ChatMode.ALLIANCE) - { - Faction myFaction = me.getFaction(); - - String message = String.format(Conf.allianceChatFormat, ChatColor.stripColor(me.getNameAndTag()), msg); - - //Send message to our own faction - myFaction.sendMessage(message); - - //Send to all our allies - for (FPlayer fplayer : FPlayers.i.getOnline()) - { - if(myFaction.getRelationTo(fplayer) == Relation.ALLY) - fplayer.sendMessage(message); - - //Send to any players who are spying chat - else if(fplayer.isSpyingChat()) - fplayer.sendMessage("[ACspy]: " + message); - } - - P.p.log(Level.INFO, ChatColor.stripColor("AllianceChat: "+message)); - - event.setCancelled(true); - return; - } - } -} diff --git a/src/com/massivecraft/factions/listeners/FactionsChatListener.java b/src/com/massivecraft/factions/listeners/FactionsChatListener.java new file mode 100644 index 00000000..77b5f36c --- /dev/null +++ b/src/com/massivecraft/factions/listeners/FactionsChatListener.java @@ -0,0 +1,185 @@ +package com.massivecraft.factions.listeners; + +import java.util.logging.Level; +import java.util.UnknownFormatConversionException; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChatEvent; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.ChatMode; +import com.massivecraft.factions.struct.Relation; + + +public class FactionsChatListener implements Listener +{ + public P p; + public FactionsChatListener(P p) + { + this.p = p; + } + + // this is for handling slashless command usage and faction/alliance chat, set at lowest priority so Factions gets to them first + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerEarlyChat(PlayerChatEvent event) + { + if (event.isCancelled()) return; + + Player talkingPlayer = event.getPlayer(); + String msg = event.getMessage(); + FPlayer me = FPlayers.i.get(talkingPlayer); + ChatMode chat = me.getChatMode(); + + // slashless factions commands need to be handled here if the user isn't in public chat mode + if (chat != ChatMode.PUBLIC && p.handleCommand(talkingPlayer, msg)) + { + if (Conf.logPlayerCommands) + Bukkit.getLogger().log(Level.INFO, "[PLAYER_COMMAND] "+talkingPlayer.getName()+": "+msg); + event.setCancelled(true); + return; + } + + // Is it a faction chat message? + if (chat == ChatMode.FACTION) + { + Faction myFaction = me.getFaction(); + + String message = String.format(Conf.factionChatFormat, me.describeTo(myFaction), msg); + myFaction.sendMessage(message); + + Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("FactionChat "+myFaction.getTag()+": "+message)); + + //Send to any players who are spying chat + for (FPlayer fplayer : FPlayers.i.getOnline()) + { + if(fplayer.isSpyingChat() && fplayer.getFaction() != myFaction) + fplayer.sendMessage("[FCspy] "+myFaction.getTag()+": "+message); + } + + event.setCancelled(true); + return; + } + else if (chat == ChatMode.ALLIANCE) + { + Faction myFaction = me.getFaction(); + + String message = String.format(Conf.allianceChatFormat, ChatColor.stripColor(me.getNameAndTag()), msg); + + //Send message to our own faction + myFaction.sendMessage(message); + + //Send to all our allies + for (FPlayer fplayer : FPlayers.i.getOnline()) + { + if(myFaction.getRelationTo(fplayer) == Relation.ALLY) + fplayer.sendMessage(message); + + //Send to any players who are spying chat + else if(fplayer.isSpyingChat()) + fplayer.sendMessage("[ACspy]: " + message); + } + + Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("AllianceChat: "+message)); + + event.setCancelled(true); + return; + } + } + + // this is for handling insertion of the player's faction tag, set at highest priority to give other plugins a chance to modify chat first + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerChat(PlayerChatEvent event) + { + if (event.isCancelled()) return; + + // Are we to insert the Faction tag into the format? + // If we are not to insert it - we are done. + if ( ! Conf.chatTagEnabled || Conf.chatTagHandledByAnotherPlugin) return; + + Player talkingPlayer = event.getPlayer(); + String msg = event.getMessage(); + String eventFormat = event.getFormat(); + FPlayer me = FPlayers.i.get(talkingPlayer); + int InsertIndex = 0; + + if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString)) + { + // we're using the "replace" method of inserting the faction tags + // if they stuck "[FACTION_TITLE]" in there, go ahead and do it too + if (eventFormat.contains("[FACTION_TITLE]")) + { + eventFormat = eventFormat.replace("[FACTION_TITLE]", me.getTitle()); + } + InsertIndex = eventFormat.indexOf(Conf.chatTagReplaceString); + eventFormat = eventFormat.replace(Conf.chatTagReplaceString, ""); + Conf.chatTagPadAfter = false; + Conf.chatTagPadBefore = false; + } + else if (!Conf.chatTagInsertAfterString.isEmpty() && eventFormat.contains(Conf.chatTagInsertAfterString)) + { + // we're using the "insert after string" method + InsertIndex = eventFormat.indexOf(Conf.chatTagInsertAfterString) + Conf.chatTagInsertAfterString.length(); + } + else if (!Conf.chatTagInsertBeforeString.isEmpty() && eventFormat.contains(Conf.chatTagInsertBeforeString)) + { + // we're using the "insert before string" method + InsertIndex = eventFormat.indexOf(Conf.chatTagInsertBeforeString); + } + else + { + // we'll fall back to using the index place method + InsertIndex = Conf.chatTagInsertIndex; + if (InsertIndex > eventFormat.length()) + return; + } + + String formatStart = eventFormat.substring(0, InsertIndex) + ((Conf.chatTagPadBefore && !me.getChatTag().isEmpty()) ? " " : ""); + String formatEnd = ((Conf.chatTagPadAfter && !me.getChatTag().isEmpty()) ? " " : "") + eventFormat.substring(InsertIndex); + + String nonColoredMsgFormat = formatStart + me.getChatTag().trim() + formatEnd; + + // Relation Colored? + if (Conf.chatTagRelationColored) + { + // We must choke the standard message and send out individual messages to all players + // Why? Because the relations will differ. + event.setCancelled(true); + + for (Player listeningPlayer : event.getRecipients()) + { + FPlayer you = FPlayers.i.get(listeningPlayer); + String yourFormat = formatStart + me.getChatTag(you).trim() + formatEnd; + try + { + listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg)); + } + catch (UnknownFormatConversionException ex) + { + Conf.chatTagInsertIndex = 0; + P.p.log(Level.SEVERE, "Critical error in chat message formatting!"); + P.p.log(Level.SEVERE, "NOTE: This has been automatically fixed right now by setting chatTagInsertIndex to 0."); + P.p.log(Level.SEVERE, "For a more proper fix, please read this regarding chat configuration: http://massivecraft.com/plugins/factions/config#Chat_configuration"); + return; + } + } + + // Write to the log... We will write the non colored message. + String nonColoredMsg = ChatColor.stripColor(String.format(nonColoredMsgFormat, talkingPlayer.getDisplayName(), msg)); + Bukkit.getLogger().log(Level.INFO, nonColoredMsg); + } + else + { + // No relation color. + event.setFormat(nonColoredMsgFormat); + } + } +} diff --git a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java index 89e5474f..1fcce737 100644 --- a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java +++ b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java @@ -1,10 +1,7 @@ package com.massivecraft.factions.listeners; -import java.util.logging.Logger; import java.util.Iterator; -import java.util.UnknownFormatConversionException; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -16,7 +13,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; @@ -38,9 +34,6 @@ import com.massivecraft.factions.struct.Relation; import com.massivecraft.factions.struct.Role; import com.massivecraft.factions.zcore.util.TextUtil; -import java.util.logging.Level; - - public class FactionsPlayerListener implements Listener { @@ -49,100 +42,7 @@ public class FactionsPlayerListener implements Listener { this.p = p; } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerChat(PlayerChatEvent event) - { - if (event.isCancelled()) return; - - Player talkingPlayer = event.getPlayer(); - String msg = event.getMessage(); - - // ... it was not a command. This means that it is a chat message! - FPlayer me = FPlayers.i.get(talkingPlayer); - - // Are we to insert the Faction tag into the format? - // If we are not to insert it - we are done. - if ( ! Conf.chatTagEnabled || Conf.chatTagHandledByAnotherPlugin) - { - return; - } - int InsertIndex = 0; - String eventFormat = event.getFormat(); - - if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString)) - { - // we're using the "replace" method of inserting the faction tags - // if they stuck "[FACTION_TITLE]" in there, go ahead and do it too - if (eventFormat.contains("[FACTION_TITLE]")) - { - eventFormat = eventFormat.replace("[FACTION_TITLE]", me.getTitle()); - } - InsertIndex = eventFormat.indexOf(Conf.chatTagReplaceString); - eventFormat = eventFormat.replace(Conf.chatTagReplaceString, ""); - Conf.chatTagPadAfter = false; - Conf.chatTagPadBefore = false; - } - else if (!Conf.chatTagInsertAfterString.isEmpty() && eventFormat.contains(Conf.chatTagInsertAfterString)) - { - // we're using the "insert after string" method - InsertIndex = eventFormat.indexOf(Conf.chatTagInsertAfterString) + Conf.chatTagInsertAfterString.length(); - } - else if (!Conf.chatTagInsertBeforeString.isEmpty() && eventFormat.contains(Conf.chatTagInsertBeforeString)) - { - // we're using the "insert before string" method - InsertIndex = eventFormat.indexOf(Conf.chatTagInsertBeforeString); - } - else - { - // we'll fall back to using the index place method - InsertIndex = Conf.chatTagInsertIndex; - if (InsertIndex > eventFormat.length()) - return; - } - - String formatStart = eventFormat.substring(0, InsertIndex) + ((Conf.chatTagPadBefore && !me.getChatTag().isEmpty()) ? " " : ""); - String formatEnd = ((Conf.chatTagPadAfter && !me.getChatTag().isEmpty()) ? " " : "") + eventFormat.substring(InsertIndex); - - String nonColoredMsgFormat = formatStart + me.getChatTag().trim() + formatEnd; - - // Relation Colored? - if (Conf.chatTagRelationColored) - { - // We must choke the standard message and send out individual messages to all players - // Why? Because the relations will differ. - event.setCancelled(true); - - for (Player listeningPlayer : event.getRecipients()) - { - FPlayer you = FPlayers.i.get(listeningPlayer); - String yourFormat = formatStart + me.getChatTag(you).trim() + formatEnd; - try - { - listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg)); - } - catch (UnknownFormatConversionException ex) - { - Conf.chatTagInsertIndex = 0; - P.p.log(Level.SEVERE, "Critical error in chat message formatting!"); - P.p.log(Level.SEVERE, "NOTE: This has been automatically fixed right now by setting chatTagInsertIndex to 0."); - P.p.log(Level.SEVERE, "For a more proper fix, please read this regarding chat configuration: http://massivecraft.com/plugins/factions/config#Chat_configuration"); - return; - } - } - - // Write to the log... We will write the non colored message. - String nonColoredMsg = ChatColor.stripColor(String.format(nonColoredMsgFormat, talkingPlayer.getDisplayName(), msg)); - Logger.getLogger("Minecraft").info(nonColoredMsg); - } - else - { - // No relation color. - event.setFormat(nonColoredMsgFormat); - } - } - @EventHandler(priority = EventPriority.NORMAL) public void onPlayerJoin(PlayerJoinEvent event) { diff --git a/src/com/massivecraft/factions/zcore/MPlugin.java b/src/com/massivecraft/factions/zcore/MPlugin.java index 94ece828..0d48d3a8 100644 --- a/src/com/massivecraft/factions/zcore/MPlugin.java +++ b/src/com/massivecraft/factions/zcore/MPlugin.java @@ -5,13 +5,9 @@ import java.lang.reflect.Type; import java.util.*; import java.util.Map.Entry; import java.util.logging.Level; -import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; -import org.bukkit.event.Event; -import org.bukkit.event.Listener; -import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import com.google.gson.Gson; @@ -242,6 +238,6 @@ public abstract class MPlugin extends JavaPlugin public void log(Level level, Object msg) { - Logger.getLogger("Minecraft").log(level, "["+this.getDescription().getFullName()+"] "+msg); + Bukkit.getLogger().log(level, "["+this.getDescription().getFullName()+"] "+msg); } }