summaryrefslogtreecommitdiffstats
path: root/EssentialsChat/src/net
diff options
context:
space:
mode:
authorementalo <ementalodev@gmx.co.uk>2012-06-27 13:35:39 +0100
committerementalo <ementalodev@gmx.co.uk>2012-06-27 13:35:39 +0100
commit16d0b5c228dd8d981a0d79944c70248ea813d63b (patch)
treeb76e6966bfc2b4b9b668b89b13e30307e0b81988 /EssentialsChat/src/net
parentc1230bd6ae4e17539e1f6f2c82691fa7a8395e8c (diff)
downloadEssentials-16d0b5c228dd8d981a0d79944c70248ea813d63b.tar
Essentials-16d0b5c228dd8d981a0d79944c70248ea813d63b.tar.gz
Essentials-16d0b5c228dd8d981a0d79944c70248ea813d63b.tar.lz
Essentials-16d0b5c228dd8d981a0d79944c70248ea813d63b.tar.xz
Essentials-16d0b5c228dd8d981a0d79944c70248ea813d63b.zip
package name change to net.ess3
Diffstat (limited to 'EssentialsChat/src/net')
-rw-r--r--EssentialsChat/src/net/ess3/chat/ChatPermissions.java24
-rw-r--r--EssentialsChat/src/net/ess3/chat/ChatStore.java40
-rw-r--r--EssentialsChat/src/net/ess3/chat/EssentialsChat.java48
-rw-r--r--EssentialsChat/src/net/ess3/chat/EssentialsChatPlayer.java159
-rw-r--r--EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEvent.java111
-rw-r--r--EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEventListener.java68
-rw-r--r--EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerHighest.java34
-rw-r--r--EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerLowest.java38
-rw-r--r--EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerNormal.java33
9 files changed, 555 insertions, 0 deletions
diff --git a/EssentialsChat/src/net/ess3/chat/ChatPermissions.java b/EssentialsChat/src/net/ess3/chat/ChatPermissions.java
new file mode 100644
index 000000000..888b85f9d
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/ChatPermissions.java
@@ -0,0 +1,24 @@
+package net.ess3.chat;
+
+import net.ess3.api.IPermission;
+import net.ess3.permissions.BasePermission;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+
+public class ChatPermissions
+{
+ private static Map<String, IPermission> permissions = new HashMap<String, IPermission>();
+
+ public static IPermission getPermission(final String groupName)
+ {
+ IPermission perm = permissions.get(groupName);
+ if (perm == null)
+ {
+ perm = new BasePermission("essentials.chat.", groupName.toLowerCase(Locale.ENGLISH));
+ permissions.put(groupName, perm);
+ }
+ return perm;
+ }
+}
diff --git a/EssentialsChat/src/net/ess3/chat/ChatStore.java b/EssentialsChat/src/net/ess3/chat/ChatStore.java
new file mode 100644
index 000000000..4d696fb36
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/ChatStore.java
@@ -0,0 +1,40 @@
+package net.ess3.chat;
+
+import net.ess3.api.IEssentials;
+import net.ess3.api.IUser;
+import net.ess3.economy.Trade;
+
+
+public class ChatStore
+{
+ private final transient IUser user;
+ private final transient String type;
+ private final transient Trade charge;
+
+ public ChatStore(final IEssentials ess, final IUser user, final String type)
+ {
+ this.user = user;
+ this.type = type;
+ this.charge = new Trade(getLongType(), ess);
+ }
+
+ public IUser getUser()
+ {
+ return user;
+ }
+
+ public Trade getCharge()
+ {
+ return charge;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public final String getLongType()
+ {
+ return type.length() == 0 ? "chat" : "chat-" + type;
+ }
+}
diff --git a/EssentialsChat/src/net/ess3/chat/EssentialsChat.java b/EssentialsChat/src/net/ess3/chat/EssentialsChat.java
new file mode 100644
index 000000000..4c922c45f
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/EssentialsChat.java
@@ -0,0 +1,48 @@
+package net.ess3.chat;
+
+import static net.ess3.I18n._;
+import net.ess3.api.IEssentials;
+import net.ess3.chat.listenerlevel.EssentialsChatPlayerListenerHighest;
+import net.ess3.chat.listenerlevel.EssentialsChatPlayerListenerLowest;
+import net.ess3.chat.listenerlevel.EssentialsChatPlayerListenerNormal;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.java.JavaPlugin;
+
+
+public class EssentialsChat extends JavaPlugin
+{
+ private static final Logger LOGGER = Logger.getLogger("Minecraft");
+
+ @Override
+ public void onEnable()
+ {
+ final PluginManager pluginManager = getServer().getPluginManager();
+ final IEssentials ess = (IEssentials)pluginManager.getPlugin("Essentials-3");
+ if (!this.getDescription().getVersion().equals(ess.getDescription().getVersion()))
+ {
+ LOGGER.log(Level.WARNING, _("versionMismatchAll"));
+ }
+ if (!ess.isEnabled())
+ {
+ this.setEnabled(false);
+ return;
+ }
+
+ final Map<PlayerChatEvent, ChatStore> chatStore = new HashMap<PlayerChatEvent, ChatStore>();
+
+ final EssentialsChatPlayerListenerLowest playerListenerLowest = new EssentialsChatPlayerListenerLowest(getServer(), ess, chatStore);
+ final EssentialsChatPlayerListenerNormal playerListenerNormal = new EssentialsChatPlayerListenerNormal(getServer(), ess, chatStore);
+ final EssentialsChatPlayerListenerHighest playerListenerHighest = new EssentialsChatPlayerListenerHighest(getServer(), ess, chatStore);
+ pluginManager.registerEvents(playerListenerLowest, this);
+ pluginManager.registerEvents(playerListenerNormal, this);
+ pluginManager.registerEvents(playerListenerHighest, this);
+
+ final EssentialsLocalChatEventListener localChatListener = new EssentialsLocalChatEventListener(getServer(), ess);
+ pluginManager.registerEvents(localChatListener, this);
+ }
+}
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);
+ }
+}
diff --git a/EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEvent.java b/EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEvent.java
new file mode 100644
index 000000000..e0ce6602d
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEvent.java
@@ -0,0 +1,111 @@
+package net.ess3.chat;
+
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerChatEvent;
+
+
+public class EssentialsLocalChatEvent extends Event implements Cancellable
+{
+ private Player player;
+ private String message;
+ private String format = "<%1$s> %2$s";
+ private long radius;
+ private boolean cancelled = false;
+ private PlayerChatEvent parentEvent = null;
+ private static final HandlerList handlers = new HandlerList();
+
+ public EssentialsLocalChatEvent(final Player player, final String message, final String format, final long radius)
+ {
+ this.player = player;
+ this.message = message;
+ this.format = format;
+ this.radius = radius;
+ }
+
+ public EssentialsLocalChatEvent(final PlayerChatEvent event, final long radius)
+ {
+ this(event.getPlayer(), event.getMessage(), event.getFormat(), radius);
+ this.parentEvent = event;
+ }
+
+ @Override
+ public boolean isCancelled()
+ {
+ return cancelled;
+ }
+
+ @Override
+ public void setCancelled(final boolean cancel)
+ {
+ this.cancelled = cancel;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public void setMessage(final String message)
+ {
+ this.message = message;
+ }
+
+ public void setPlayer(final Player player)
+ {
+ this.player = player;
+ }
+
+ public Player getPlayer()
+ {
+ return player;
+ }
+
+ public String getFormat()
+ {
+ return format;
+ }
+
+ public void setFormat(final String format)
+ {
+ // Oh for a better way to do this!
+ try
+ {
+ String.format(format, player, message);
+ }
+ catch (RuntimeException ex)
+ {
+ ex.fillInStackTrace();
+ throw ex;
+ }
+ this.format = format;
+ }
+
+ public long getRadius()
+ {
+ return radius;
+ }
+
+ public void setRadius(final long radius)
+ {
+ this.radius = radius;
+ }
+
+ public PlayerChatEvent getParentEvent()
+ {
+ return parentEvent;
+ }
+
+ @Override
+ public HandlerList getHandlers()
+ {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList()
+ {
+ return handlers;
+ }
+}
diff --git a/EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEventListener.java b/EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEventListener.java
new file mode 100644
index 000000000..29bd7e8e8
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/EssentialsLocalChatEventListener.java
@@ -0,0 +1,68 @@
+package net.ess3.chat;
+
+import static net.ess3.I18n._;
+import net.ess3.api.IEssentials;
+import net.ess3.api.IUser;
+import org.bukkit.Location;
+import org.bukkit.Server;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+
+
+public class EssentialsLocalChatEventListener implements Listener
+{
+ protected transient IEssentials ess;
+ protected final transient Server server;
+
+ public EssentialsLocalChatEventListener(final Server server, final IEssentials ess)
+ {
+ this.ess = ess;
+ this.server = server;
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onLocalChat(final EssentialsLocalChatEvent event)
+ {
+ final Player sender = event.getPlayer();
+ final Location loc = sender.getLocation();
+ final World world = loc.getWorld();
+
+ for (Player onlinePlayer : server.getOnlinePlayers())
+ {
+ String type = _("chatTypeLocal");
+ final IUser user = ess.getUser(onlinePlayer);
+ if (user.isIgnoringPlayer(ess.getUser(sender)))
+ {
+ continue;
+ }
+ if (!user.equals(sender))
+ {
+ boolean abort = false;
+ final Location playerLoc = user.getLocation();
+ if (playerLoc.getWorld() != world)
+ {
+ abort = true;
+ }
+ final double delta = playerLoc.distanceSquared(loc);
+
+ if (delta > event.getRadius())
+ {
+ abort = true;
+ }
+
+ if (abort)
+ {
+ if (ChatPermissions.getPermission("spy").isAuthorized(user))
+ {
+ type = type.concat(_("chatTypeSpy"));
+ }
+ }
+ }
+ final String message = type.concat(String.format(event.getFormat(), sender.getDisplayName(), event.getMessage()));
+ user.sendMessage(message);
+ }
+ }
+}
diff --git a/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerHighest.java b/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerHighest.java
new file mode 100644
index 000000000..21f3a188e
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerHighest.java
@@ -0,0 +1,34 @@
+package net.ess3.chat.listenerlevel;
+
+import net.ess3.api.IEssentials;
+import net.ess3.chat.ChatStore;
+import net.ess3.chat.ChatStore;
+import net.ess3.chat.EssentialsChatPlayer;
+import java.util.Map;
+import org.bukkit.Server;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerChatEvent;
+
+
+public class EssentialsChatPlayerListenerHighest extends EssentialsChatPlayer
+{
+ public EssentialsChatPlayerListenerHighest(final Server server,
+ final IEssentials ess,
+ final Map<PlayerChatEvent, ChatStore> chatStorage)
+ {
+ super(server, ess, chatStorage);
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ @Override
+ public void onPlayerChat(final PlayerChatEvent event)
+ {
+ final ChatStore chatStore = delChatStore(event);
+ if (event.isCancelled())
+ {
+ return;
+ }
+ chargeChat(event, chatStore);
+ }
+}
diff --git a/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerLowest.java
new file mode 100644
index 000000000..eb75e3680
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerLowest.java
@@ -0,0 +1,38 @@
+package net.ess3.chat.listenerlevel;
+
+import net.ess3.api.IEssentials;
+import net.ess3.api.IUser;
+import net.ess3.chat.ChatStore;
+import net.ess3.chat.EssentialsChatPlayer;
+import java.util.Map;
+
+import net.ess3.chat.EssentialsChatPlayer;
+import org.bukkit.Server;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerChatEvent;
+
+
+public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer
+{
+ public EssentialsChatPlayerListenerLowest(final Server server,
+ final IEssentials ess,
+ final Map<PlayerChatEvent, ChatStore> chatStorage)
+ {
+ super(server, ess, chatStorage);
+ }
+
+ @EventHandler(priority = EventPriority.LOWEST)
+ @Override
+ public void onPlayerChat(final PlayerChatEvent event)
+ {
+ if (event.isCancelled())
+ {
+ return;
+ }
+ final IUser user = ess.getUser(event.getPlayer());
+ final ChatStore chatStore = new ChatStore(ess, user, getChatType(event.getMessage()));
+ setChatStore(event, chatStore);
+ formatChat(event, chatStore);
+ }
+} \ No newline at end of file
diff --git a/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerNormal.java b/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerNormal.java
new file mode 100644
index 000000000..2e3b44549
--- /dev/null
+++ b/EssentialsChat/src/net/ess3/chat/listenerlevel/EssentialsChatPlayerListenerNormal.java
@@ -0,0 +1,33 @@
+package net.ess3.chat.listenerlevel;
+
+import net.ess3.api.IEssentials;
+import net.ess3.chat.ChatStore;
+import net.ess3.chat.EssentialsChatPlayer;
+import java.util.Map;
+import org.bukkit.Server;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerChatEvent;
+
+
+public class EssentialsChatPlayerListenerNormal extends EssentialsChatPlayer
+{
+ public EssentialsChatPlayerListenerNormal(final Server server,
+ final IEssentials ess,
+ final Map<PlayerChatEvent, ChatStore> chatStorage)
+ {
+ super(server, ess, chatStorage);
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL)
+ @Override
+ public void onPlayerChat(final PlayerChatEvent event)
+ {
+ if (event.isCancelled())
+ {
+ return;
+ }
+ final ChatStore chatStore = getChatStore(event);
+ handleLocalChat(event, chatStore);
+ }
+}