summaryrefslogtreecommitdiffstats
path: root/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
diff options
context:
space:
mode:
Diffstat (limited to 'EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java')
-rw-r--r--EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java171
1 files changed, 86 insertions, 85 deletions
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
index ddf928725..0315408f7 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java
@@ -2,14 +2,18 @@ package com.earth2me.essentials.chat;
import com.earth2me.essentials.ChargeException;
import static com.earth2me.essentials.I18n._;
-import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.Trade;
-import com.earth2me.essentials.User;
+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 com.earth2me.essentials.perm.Permissions;
+import java.util.Locale;
import java.util.Map;
import java.util.logging.Logger;
-import org.bukkit.Location;
import org.bukkit.Server;
-import org.bukkit.World;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
@@ -18,18 +22,15 @@ import org.bukkit.event.player.PlayerChatEvent;
public abstract class EssentialsChatPlayer implements Listener
{
protected transient IEssentials ess;
- protected final static Logger logger = Logger.getLogger("Minecraft");
- protected final transient Map<String, IEssentialsChatListener> listeners;
+ 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<String, IEssentialsChatListener> listeners,
final Map<PlayerChatEvent, ChatStore> chatStorage)
{
this.ess = ess;
- this.listeners = listeners;
this.server = server;
this.chatStorage = chatStorage;
}
@@ -38,35 +39,6 @@ public abstract class EssentialsChatPlayer implements Listener
{
}
- public boolean isAborted(final PlayerChatEvent event)
- {
- if (event.isCancelled())
- {
- return true;
- }
- for (IEssentialsChatListener listener : listeners.values())
- {
- if (listener.shouldHandleThisChat(event))
- {
- return true;
- }
- }
- return false;
- }
-
- public String getChatType(final String message)
- {
- switch (message.charAt(0))
- {
- case '!':
- return "shout";
- case '?':
- return "question";
- default:
- return "";
- }
- }
-
public ChatStore getChatStore(final PlayerChatEvent event)
{
return chatStorage.get(event);
@@ -82,12 +54,7 @@ public abstract class EssentialsChatPlayer implements Listener
return chatStorage.remove(event);
}
- protected void charge(final User user, final Trade charge) throws ChargeException
- {
- charge.charge(user);
- }
-
- protected boolean charge(final PlayerChatEvent event, final ChatStore chatStore)
+ protected void chargeChat(final PlayerChatEvent event, final ChatStore chatStore)
{
try
{
@@ -95,63 +62,97 @@ public abstract class EssentialsChatPlayer implements Listener
}
catch (ChargeException e)
{
- ess.showError(chatStore.getUser(), e, chatStore.getLongType());
+ ess.getCommandHandler().showCommandError(chatStore.getUser(), chatStore.getLongType(), e);
event.setCancelled(true);
- return false;
}
- return true;
}
- protected void sendLocalChat(final PlayerChatEvent event, final ChatStore chatStore)
+ protected void charge(final CommandSender sender, final Trade charge) throws ChargeException
{
- event.setCancelled(true);
- final User sender = chatStore.getUser();
- logger.info(_("localFormat", sender.getName(), event.getMessage()));
- final Location loc = sender.getLocation();
- final World world = loc.getWorld();
+ if (sender instanceof Player)
+ {
+ charge.charge(ess.getUser((Player)sender));
+ }
+ }
- if (charge(event, chatStore) == false)
+ 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.getGroups().getMainGroup(user);
+ String world = user.getWorld().getName();
+
+ IGroups groupSettings = ess.getGroups();
+ 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;
}
- for (Player onlinePlayer : server.getOnlinePlayers())
+ radius *= radius;
+
+ final IUser user = chatStore.getUser();
+
+ if (event.getMessage().length() > 1 && chatStore.getType().length() > 0)
{
- String type = _("chatTypeLocal");
- final User onlineUser = ess.getUser(onlinePlayer);
- //TODO: remove reference to op
- if (onlineUser.isIgnoredPlayer(sender.getName()) && !sender.isOp())
+ if (ChatPermissions.getPermission(chatStore.getType()).isAuthorized(user))
{
- continue;
+ final StringBuilder format = new StringBuilder();
+ format.append(chatStore.getType()).append("Format");
+ event.setMessage(event.getMessage().substring(1));
+ event.setFormat(_(format.toString(), event.getFormat()));
+ return;
}
- if (!onlineUser.equals(sender))
- {
- final Location playerLoc = onlineUser.getLocation();
- if (playerLoc.getWorld() != world)
- {
- continue;
- }
- final double delta = playerLoc.distanceSquared(loc);
- if (delta > chatStore.getRadius())
- {
- if (onlineUser.isAuthorized("essentials.chat.spy"))
- {
- type = type.concat(_("chatTypeSpy"));
- }
- else
- {
- continue;
- }
- }
- }
+ final StringBuilder errorMsg = new StringBuilder();
+ errorMsg.append("notAllowedTo").append(chatStore.getType().substring(0, 1).toUpperCase(Locale.ENGLISH)).append(chatStore.getType().substring(1));
- String message = String.format(event.getFormat(), type.concat(sender.getDisplayName()), event.getMessage());
- for (IEssentialsChatListener listener : listeners.values())
- {
- message = listener.modifyMessage(event, onlinePlayer, message);
- }
- onlineUser.sendMessage(message);
+ user.sendMessage(_(errorMsg.toString()));
+ event.setCancelled(true);
+ return;
}
+
+ event.setCancelled(true);
+ final EssentialsLocalChatEvent localChat = new EssentialsLocalChatEvent(event, radius);
+ ess.getServer().getPluginManager().callEvent(localChat);
}
}