summaryrefslogtreecommitdiffstats
path: root/EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java
diff options
context:
space:
mode:
Diffstat (limited to 'EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java')
-rw-r--r--EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java159
1 files changed, 159 insertions, 0 deletions
diff --git a/EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java b/EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java
new file mode 100644
index 000000000..ae8fce4a1
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java
@@ -0,0 +1,159 @@
+package net.ess3.chat;
+
+import static net.ess3.I18n._;
+import net.ess3.api.ChargeException;
+import net.ess3.api.IEssentials;
+import net.ess3.api.IRanks;
+import net.ess3.api.ISettings;
+import net.ess3.api.IUser;
+import net.ess3.economy.Trade;
+import net.ess3.permissions.Permissions;
+import net.ess3.utils.Util;
+import java.util.Locale;
+import java.util.Map;
+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;
+
+//TODO: Translate the local/spy tags
+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 transient Map<PlayerChatEvent, ChatStore> chatStorage;
+
+ public EssentialsChatPlayer(final Server server,
+ final IEssentials ess,
+ final Map<PlayerChatEvent, ChatStore> chatStorage)
+ {
+ this.ess = ess;
+ this.server = server;
+ this.chatStorage = chatStorage;
+ }
+
+ public void onPlayerChat(final PlayerChatEvent event)
+ {
+ }
+
+ public ChatStore getChatStore(final PlayerChatEvent event)
+ {
+ return chatStorage.get(event);
+ }
+
+ public void setChatStore(final PlayerChatEvent event, final ChatStore chatStore)
+ {
+ chatStorage.put(event, chatStore);
+ }
+
+ public ChatStore delChatStore(final PlayerChatEvent event)
+ {
+ return chatStorage.remove(event);
+ }
+
+ protected void chargeChat(final PlayerChatEvent event, final ChatStore chatStore)
+ {
+ try
+ {
+ charge(chatStore.getUser(), chatStore.getCharge());
+ }
+ catch (ChargeException e)
+ {
+ ess.getCommandHandler().showCommandError(chatStore.getUser(), chatStore.getLongType(), e);
+ event.setCancelled(true);
+ }
+ }
+
+ protected void charge(final CommandSender sender, final Trade charge) throws ChargeException
+ {
+ if (sender instanceof Player)
+ {
+ charge.charge(ess.getUser((Player)sender));
+ }
+ }
+
+ protected void formatChat(final PlayerChatEvent event, final ChatStore chatStore)
+ {
+ final IUser user = chatStore.getUser();
+ if (Permissions.CHAT_COLOR.isAuthorized(user))
+ {
+ event.setMessage(Util.stripColor(event.getMessage()));
+ }
+ String group = ess.getRanks().getMainGroup(user);
+ String world = user.getWorld().getName();
+
+ IRanks groupSettings = ess.getRanks();
+ event.setFormat(groupSettings.getChatFormat(user).format(new Object[]
+ {
+ group, world, world.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 "admin";
+ default:
+ return "";
+ }
+ }
+
+ protected void handleLocalChat(final PlayerChatEvent event, final ChatStore chatStore)
+ {
+
+ long radius = 0;
+ ISettings settings = ess.getSettings();
+ settings.acquireReadLock();
+ try
+ {
+ radius = settings.getData().getChat().getLocalRadius();
+ }
+ finally
+ {
+ settings.unlock();
+ }
+
+ if (radius < 1)
+ {
+ return;
+ }
+
+ radius *= radius;
+
+ final IUser user = chatStore.getUser();
+
+ if (event.getMessage().length() > 1 && chatStore.getType().length() > 0)
+ {
+ if (ChatPermissions.getPermission(chatStore.getType()).isAuthorized(user))
+ {
+ final StringBuilder format = new StringBuilder();
+ format.append(chatStore.getType()).append("Format");
+ event.setMessage(event.getMessage().substring(1));
+ event.setFormat(_(format.toString(), event.getFormat()));
+ 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);
+ ess.getServer().getPluginManager().callEvent(localChat);
+ }
+}