diff options
author | snowleo <schneeleo@gmail.com> | 2011-06-07 00:24:39 +0200 |
---|---|---|
committer | snowleo <schneeleo@gmail.com> | 2011-06-07 00:24:39 +0200 |
commit | 4f16c8b5a781b7df47ceaf239895c2ecec30ab53 (patch) | |
tree | 1e16f3097bef9b1a2db500be87e9cf365bcedcdc /EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java | |
parent | a45e620946c8e748b35258b7f8813d1c788bae37 (diff) | |
download | Essentials-4f16c8b5a781b7df47ceaf239895c2ecec30ab53.tar Essentials-4f16c8b5a781b7df47ceaf239895c2ecec30ab53.tar.gz Essentials-4f16c8b5a781b7df47ceaf239895c2ecec30ab53.tar.lz Essentials-4f16c8b5a781b7df47ceaf239895c2ecec30ab53.tar.xz Essentials-4f16c8b5a781b7df47ceaf239895c2ecec30ab53.zip |
Permissions 3.1.4
Added Code for Perm2, Perm3 and Config Permissions
Cleaned EssentialsChat
Diffstat (limited to 'EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java')
-rw-r--r-- | EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java | 116 |
1 files changed, 90 insertions, 26 deletions
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java index d3dff8538..211733818 100644 --- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java +++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java @@ -1,7 +1,14 @@ package com.earth2me.essentials.chat; import com.earth2me.essentials.Essentials; +import com.earth2me.essentials.IEssentials; +import com.earth2me.essentials.User; +import com.earth2me.essentials.Util; +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.player.PlayerChatEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerListener; @@ -10,52 +17,109 @@ import org.bukkit.event.player.PlayerRespawnEvent; public class EssentialsChatPlayerListener extends PlayerListener { - private final Server server; + private static final Logger LOGGER = Logger.getLogger("Minecraft"); + private final transient IEssentials ess = Essentials.getStatic(); + private final transient Server server; - public EssentialsChatPlayerListener(Server server) + public EssentialsChatPlayerListener(final Server server) { this.server = server; } @Override - @SuppressWarnings("CallToThreadDumpStack") - public void onPlayerJoin(PlayerJoinEvent event) + public void onPlayerJoin(final PlayerJoinEvent event) { - try + final User user = ess.getUser(event.getPlayer()); + updateDisplayName(user); + } + + private void updateDisplayName(final User user) + { + final String prefix = ess.getPermissionsHandler().getPrefix(user).replace('&', '§').replace("{WORLDNAME}", user.getWorld().getName()); + final String suffix = ess.getPermissionsHandler().getSuffix(user).replace('&', '§').replace("{WORLDNAME}", user.getWorld().getName()); + + user.setDisplayName(prefix + user.getNick() + suffix + (suffix.length() > 1 && suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§") ? "" : "§f")); + } + + @Override + public void onPlayerChat(final PlayerChatEvent event) + { + if (event.isCancelled()) { - EssentialsChatWorker.onPlayerJoin(server, event); + return; } - catch (Throwable ex) + final User user = ess.getUser(event.getPlayer()); + updateDisplayName(user); + + if (user.isAuthorized("essentials.chat.color")) { - ex.printStackTrace(); + event.setMessage(event.getMessage().replaceAll("&([0-9a-f])", "§$1")); } - } - @Override - @SuppressWarnings("CallToThreadDumpStack") - public void onPlayerRespawn(PlayerRespawnEvent event) - { - try + event.setFormat(ess.getSettings().getChatFormat(user.getGroup()).replace('&', '§').replace("§§", "&").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())); + + final int radius = ess.getSettings().getChatRadius(); + if (radius < 1) { - EssentialsChatWorker.onPlayerRespawn(server, event); + return; } - catch (Throwable ex) + + if (event.getMessage().startsWith("!") && event.getMessage().length() > 1) { - ex.printStackTrace(); + if (user.isAuthorized("essentials.chat.shout")) + { + event.setMessage(event.getMessage().substring(1)); + event.setFormat(Util.format("shoutFormat", event.getFormat())); + return; + } + user.sendMessage(Util.i18n("notAllowedToShout")); + event.setCancelled(true); + return; } - } - @Override - @SuppressWarnings("CallToThreadDumpStack") - public void onPlayerChat(PlayerChatEvent event) - { - try + if (event.getMessage().startsWith("?") && event.getMessage().length() > 1) { - EssentialsChatWorker.onPlayerChat(server, event); + if (user.isAuthorized("essentials.chat.question")) + { + event.setMessage(event.getMessage().substring(1)); + event.setFormat(Util.format("questionFormat", event.getFormat())); + return; + } + user.sendMessage(Util.i18n("notAllowedToQuestion")); + event.setCancelled(true); + return; } - catch (Throwable ex) + + event.setCancelled(true); + LOGGER.info(Util.format("localFormat", user.getName(), event.getMessage())); + + final Location loc = user.getLocation(); + final World world = loc.getWorld(); + final int x = loc.getBlockX(); + final int y = loc.getBlockY(); + final int z = loc.getBlockZ(); + + for (Player p : server.getOnlinePlayers()) { - ex.printStackTrace(); + final User u = ess.getUser(p); + if (u.isIgnoredPlayer(user.getName()) && !user.isOp()) + { + continue; + } + if (u.equals(user) && !u.isAuthorized("essentials.chat.spy")) + { + final Location l = u.getLocation(); + final int dx = Math.abs(x - l.getBlockX()); + final int dy = Math.abs(y - l.getBlockY()); + final int dz = Math.abs(z - l.getBlockZ()); + final int delta = dx + dy + dz; + if (delta > radius || world != l.getWorld()) + { + continue; + } + } + + u.sendMessage(String.format(event.getFormat(), user.getDisplayName(), event.getMessage())); } } } |