diff options
Diffstat (limited to 'EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java')
-rw-r--r-- | EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java new file mode 100644 index 000000000..401fa1142 --- /dev/null +++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsLocalChatEventListener.java @@ -0,0 +1,71 @@ +package com.earth2me.essentials.chat; + +import static com.earth2me.essentials.I18n._; +import com.earth2me.essentials.api.IEssentials; +import com.earth2me.essentials.api.IUser; +import com.earth2me.essentials.permissions.Permissions; +import java.util.logging.Logger; +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; + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + + 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); + //TODO: remove reference to op + if (user.isIgnoringPlayer(sender.getName()) && !sender.isOp()) + { + continue; + } + if (!user.equals(sender)) + { + final Location playerLoc = user.getLocation(); + if (playerLoc.getWorld() != world) + { + continue; + } + final double delta = playerLoc.distanceSquared(loc); + + if (delta > event.getRadius()) + { + if (Permissions.CHAT_SPY.isAuthorized(user)) + { + type = type.concat(_("chatTypeSpy")); + } + else + { + continue; + } + } + } + + final String message = type.concat(String.format(event.getFormat(), sender.getDisplayName(), event.getMessage())); + user.sendMessage(message); + } + } +}
\ No newline at end of file |