diff options
author | KHobbits <rob@khobbits.co.uk> | 2012-01-24 22:08:20 +0000 |
---|---|---|
committer | KHobbits <rob@khobbits.co.uk> | 2012-01-24 22:08:20 +0000 |
commit | bdc695c85b97a31694c75716f33566b171a9559f (patch) | |
tree | 24bd4dda334bbbe38344beb9efb5e2d08275fa98 /EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java | |
parent | 8c54f370922b4d5f13741ee6b06ecc307e2b6e7f (diff) | |
download | Essentials-bdc695c85b97a31694c75716f33566b171a9559f.tar Essentials-bdc695c85b97a31694c75716f33566b171a9559f.tar.gz Essentials-bdc695c85b97a31694c75716f33566b171a9559f.tar.lz Essentials-bdc695c85b97a31694c75716f33566b171a9559f.tar.xz Essentials-bdc695c85b97a31694c75716f33566b171a9559f.zip |
First sweep over Essentials Chat, to implement 2.8 changes.
Formatting cache still needs reimplemented.
Diffstat (limited to 'EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java')
-rw-r--r-- | EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java | 141 |
1 files changed, 60 insertions, 81 deletions
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java index d55cfe9cb..6ab845b72 100644 --- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java +++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java @@ -3,7 +3,9 @@ package com.earth2me.essentials.chat; import com.earth2me.essentials.ChargeException; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.Trade; +import com.earth2me.essentials.Util; import com.earth2me.essentials.api.IEssentials; +import com.earth2me.essentials.api.IGroups; import com.earth2me.essentials.api.ISettings; import com.earth2me.essentials.api.IUser; import java.util.Locale; @@ -12,119 +14,98 @@ import java.util.logging.Logger; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChatEvent; -import org.bukkit.event.player.PlayerListener; //TODO: Translate the local/spy tags -public abstract class EssentialsChatPlayer extends PlayerListener +public abstract class EssentialsChatPlayer implements Listener { protected transient IEssentials ess; - protected final static Logger logger = Logger.getLogger("Minecraft"); - protected final transient Server server; + protected final static Logger LOGGER = Logger.getLogger("Minecraft"); + protected final transient Server server; + protected final transient Map<PlayerChatEvent, ChatStore> chatStorage; - public EssentialsChatPlayer(final Server server, final IEssentials ess) + public EssentialsChatPlayer(final Server server, + final IEssentials ess, + final Map<PlayerChatEvent, ChatStore> chatStorage) { this.ess = ess; this.server = server; + this.chatStorage = chatStorage; } - @Override public void onPlayerChat(final PlayerChatEvent event) { } - public boolean isAborted(final PlayerChatEvent event) + public ChatStore getChatStore(final PlayerChatEvent event) { - return isAborted(event, "chat"); + return chatStorage.get(event); } - public boolean isAborted(final PlayerChatEvent event, final String command) + public void setChatStore(final PlayerChatEvent event, final ChatStore chatStore) { - if (event.isCancelled()) - { - return true; - } + chatStorage.put(event, chatStore); + } - final IUser user = ess.getUser(event.getPlayer()); - if (!isAffordableFor(user, command)) - { - event.setCancelled(true); - return true; - } - return false; + public ChatStore delChatStore(final PlayerChatEvent event) + { + return chatStorage.remove(event); } - - protected void chargeChat (final PlayerChatEvent event, final Map<PlayerChatEvent, String> charges) { - - final IUser user = ess.getUser(event.getPlayer()); - - String charge = charges.remove(event); - if (charge == null) - { - charge = "chat"; - } + protected void chargeChat(final PlayerChatEvent event, final ChatStore chatStore) + { try { - charge(user, charge); + charge(chatStore.getUser(), chatStore.getCharge()); } catch (ChargeException e) { - ess.getCommandHandler().showCommandError(user, charge, e); + ess.getCommandHandler().showCommandError(chatStore.getUser(), chatStore.getLongType(), e); event.setCancelled(true); } } - protected void charge(final CommandSender sender, final String command) throws ChargeException + protected void charge(final CommandSender sender, final Trade charge) throws ChargeException { if (sender instanceof Player) { - final Trade charge = new Trade(command, ess); charge.charge(ess.getUser((Player)sender)); } } - protected boolean isAffordableFor(final CommandSender sender, final String command) + protected void formatChat(final PlayerChatEvent event, final ChatStore chatStore) { - if (sender instanceof Player) + final IUser user = chatStore.getUser(); + if (user.isAuthorized("essentials.chat.color")) { - try - { - final Trade charge = new Trade(command, ess); - charge.isAffordableFor(ess.getUser((Player)sender)); - } - catch (ChargeException e) - { - return false; - } + event.setMessage(Util.stripColor(event.getMessage())); } - else - { - return false; + String group = user.getGroup(); + String world = user.getWorld().getName(); + + IGroups groupSettings = ess.getGroups(); + groupSettings.acquireReadLock(); + try + { + event.setFormat(groupSettings.getChatFormat(user).format(new Object[] {group, world, world.substring(0, 1).toUpperCase(Locale.ENGLISH)})); } - - return true; - } - - protected void formatChat(final PlayerChatEvent event) - { - final IUser user = ess.getUser(event.getPlayer()); - if (user.isAuthorized("essentials.chat.color")) + finally { - event.setMessage(event.getMessage().replaceAll("&([0-9a-f])", "\u00a7$1")); + groupSettings.unlock(); } - String format = ess.getGroups().getChatFormat(user); - event.setFormat(format.replace('&', '\u00a7').replace("\u00a7\u00a7", "&").replace("{DISPLAYNAME}", "%1$s").replace("{GROUP}", user.getGroup()).replace("{MESSAGE}", "%2$s").replace("{WORLDNAME}", user.getWorld().getName()).replace("{SHORTWORLDNAME}", user.getWorld().getName().substring(0, 1).toUpperCase(Locale.ENGLISH))); + } - + + //TODO: Flesh this out - '?' trigger is too easily accidentally triggered protected String getChatType(final String message) { switch (message.charAt(0)) { case '!': return "shout"; - case '?': - return "question"; + //case '?': + //return "question"; //case '@': // return "admin"; default: @@ -132,50 +113,48 @@ public abstract class EssentialsChatPlayer extends PlayerListener } } - protected void handleLocalChat(final Map<PlayerChatEvent, String> charges, final PlayerChatEvent event) + protected void handleLocalChat(final PlayerChatEvent event, final ChatStore chatStore) { long radius = 0; ISettings settings = ess.getSettings(); settings.acquireReadLock(); - try { + try + { radius = settings.getData().getChat().getLocalRadius(); - } finally { + } + finally + { settings.unlock(); } radius *= radius; + chatStore.setRadius(radius); - final IUser user = ess.getUser(event.getPlayer()); - final String chatType = getChatType(event.getMessage()); - final StringBuilder command = new StringBuilder(); - command.append("chat"); + final IUser user = chatStore.getUser(); - if (event.getMessage().length() > 0 && chatType.length() > 0) + if (event.getMessage().length() > 1 && chatStore.getType().length() > 0) { - command.append("-").append(chatType); final StringBuilder permission = new StringBuilder(); - permission.append("essentials.chat.").append(chatType); - - final StringBuilder format = new StringBuilder(); - format.append(chatType).append("Format"); - - final StringBuilder errorMsg = new StringBuilder(); - errorMsg.append("notAllowedTo").append(chatType.substring(0, 1).toUpperCase(Locale.ENGLISH)).append(chatType.substring(1)); + permission.append("essentials.chat.").append(chatStore.getType()); if (user.isAuthorized(permission.toString())) { + final StringBuilder format = new StringBuilder(); + format.append(chatStore.getType()).append("Format"); event.setMessage(event.getMessage().substring(1)); event.setFormat(_(format.toString(), event.getFormat())); - charges.put(event, command.toString()); return; } + final StringBuilder errorMsg = new StringBuilder(); + errorMsg.append("notAllowedTo").append(chatStore.getType().substring(0, 1).toUpperCase(Locale.ENGLISH)).append(chatStore.getType().substring(1)); + user.sendMessage(_(errorMsg.toString())); event.setCancelled(true); return; } - + event.setCancelled(true); - final EssentialsLocalChatEvent localChat = new EssentialsLocalChatEvent(event, radius); + final EssentialsLocalChatEvent localChat = new EssentialsLocalChatEvent(event, chatStore); ess.getServer().getPluginManager().callEvent(localChat); } } |