From 4ecb28b3bb0eb4639585dd1f011b4c85a833c999 Mon Sep 17 00:00:00 2001 From: "main()" Date: Sat, 18 Aug 2012 15:13:09 +0200 Subject: [PATCH] Less duplicate code ... I think. --- .../listeners/AsyncChatEvent.java | 35 ++++++++++ .../MultiverseCore/listeners/ChatEvent.java | 29 ++++++++ .../listeners/MVAsyncPlayerChatListener.java | 60 +++-------------- .../listeners/MVChatListener.java | 66 ++++++++++++++++--- .../listeners/MVPlayerChatListener.java | 56 ++-------------- .../listeners/NormalChatEvent.java | 37 +++++++++++ 6 files changed, 174 insertions(+), 109 deletions(-) create mode 100644 src/main/java/com/onarandombox/MultiverseCore/listeners/AsyncChatEvent.java create mode 100644 src/main/java/com/onarandombox/MultiverseCore/listeners/ChatEvent.java create mode 100644 src/main/java/com/onarandombox/MultiverseCore/listeners/NormalChatEvent.java diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/AsyncChatEvent.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/AsyncChatEvent.java new file mode 100644 index 00000000..38d48bef --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/AsyncChatEvent.java @@ -0,0 +1,35 @@ +package com.onarandombox.MultiverseCore.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +/** + * A wrapper for the {@link AsyncPlayerChatEvent}. + */ +public class AsyncChatEvent implements ChatEvent { + private final AsyncPlayerChatEvent event; + + public AsyncChatEvent(AsyncPlayerChatEvent event) { + this.event = event; + } + + @Override + public boolean isCancelled() { + return event.isCancelled(); + } + + @Override + public String getFormat() { + return event.getFormat(); + } + + @Override + public void setFormat(String s) { + event.setFormat(s); + } + + @Override + public Player getPlayer() { + return event.getPlayer(); + } +} diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/ChatEvent.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/ChatEvent.java new file mode 100644 index 00000000..16cafb81 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/ChatEvent.java @@ -0,0 +1,29 @@ +package com.onarandombox.MultiverseCore.listeners; + +import org.bukkit.entity.Player; + +/** + * A wrapper for the two chat-events in Bukkit. + */ +public interface ChatEvent { + /** + * @return Whether this event is cancelled. + */ + boolean isCancelled(); + + /** + * @return The format. + */ + String getFormat(); + + /** + * Sets the format. + * @param s The new format. + */ + void setFormat(String s); + + /** + * @return The player. + */ + Player getPlayer(); +} diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVAsyncPlayerChatListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVAsyncPlayerChatListener.java index bc3c0fac..eae4df20 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVAsyncPlayerChatListener.java +++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVAsyncPlayerChatListener.java @@ -7,70 +7,28 @@ package com.onarandombox.MultiverseCore.listeners; -import com.onarandombox.MultiverseCore.MultiverseCore; -import com.onarandombox.MultiverseCore.api.MVWorldManager; -import com.onarandombox.MultiverseCore.api.MultiverseWorld; +import java.util.logging.Level; + import org.bukkit.event.EventHandler; import org.bukkit.event.player.AsyncPlayerChatEvent; -import java.util.logging.Level; +import com.onarandombox.MultiverseCore.MultiverseCore; /** * Multiverse's {@link org.bukkit.event.Listener} for players. */ -public class MVAsyncPlayerChatListener implements MVChatListener { - - private final MultiverseCore plugin; - private final MVWorldManager worldManager; - private final MVPlayerListener playerListener; - +public class MVAsyncPlayerChatListener extends MVChatListener { public MVAsyncPlayerChatListener(MultiverseCore plugin, MVPlayerListener playerListener) { - this.plugin = plugin; - this.worldManager = plugin.getMVWorldManager(); - this.playerListener = playerListener; - plugin.log(Level.FINE, "Registered AsyncPlayerChatEvent listener."); + super(plugin, playerListener); + plugin.log(Level.FINE, "Created AsyncPlayerChatEvent listener."); } /** - * {@inheritDoc} + * This method is called when a player wants to chat. + * @param event The Event that was fired. */ - @Override @EventHandler public void playerChat(AsyncPlayerChatEvent event) { - if (event.isCancelled()) { - return; - } - // Check whether the Server is set to prefix the chat with the World name. - // If not we do nothing, if so we need to check if the World has an Alias. - if (plugin.getMVConfig().getPrefixChat()) { - String world; - Thread thread = Thread.currentThread(); - if (playerListener.getWorldsLock().isLocked()) { - plugin.log(Level.FINEST, "worldsLock is locked when attempting to handle player chat on thread: " + thread); - } - playerListener.getWorldsLock().lock(); - try { - plugin.log(Level.FINEST, "Handling player chat on thread: " + thread); - world = playerListener.getPlayerWorld().get(event.getPlayer().getName()); - if (world == null) { - world = event.getPlayer().getWorld().getName(); - playerListener.getPlayerWorld().put(event.getPlayer().getName(), world); - } - } finally { - playerListener.getWorldsLock().unlock(); - } - String prefix = ""; - // If we're not a MV world, don't do anything - if (!this.worldManager.isMVWorld(world)) { - return; - } - MultiverseWorld mvworld = this.worldManager.getMVWorld(world); - if (mvworld.isHidden()) { - return; - } - prefix = mvworld.getColoredWorldString(); - String format = event.getFormat(); - event.setFormat("[" + prefix + "]" + format); - } + this.playerChat(new AsyncChatEvent(event)); } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVChatListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVChatListener.java index 614ae3c2..497492c8 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVChatListener.java +++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVChatListener.java @@ -1,18 +1,66 @@ package com.onarandombox.MultiverseCore.listeners; -import org.bukkit.event.Event; -import org.bukkit.event.EventHandler; +import java.util.logging.Level; + import org.bukkit.event.Listener; +import com.onarandombox.MultiverseCore.MultiverseCore; +import com.onarandombox.MultiverseCore.api.MVWorldManager; +import com.onarandombox.MultiverseCore.api.MultiverseWorld; + /** - * This interface is implemented by {@link MVPlayerChatListener} and {@link MVAsyncPlayerChatListener}. - * @param The chat event-type. + * Multiverse's {@link org.bukkit.event.Listener} for players. */ -public interface MVChatListener extends Listener { +public abstract class MVChatListener implements Listener { + private final MultiverseCore plugin; + private final MVWorldManager worldManager; + private final MVPlayerListener playerListener; + + public MVChatListener(MultiverseCore plugin, MVPlayerListener playerListener) { + this.plugin = plugin; + this.worldManager = plugin.getMVWorldManager(); + this.playerListener = playerListener; + } + /** - * This method is called when a player wants to chat. - * @param event The Event that was fired. + * This handles a {@link ChatEvent}. + * @param event The {@link ChatEvent}. */ - @EventHandler - void playerChat(E event); + public void playerChat(ChatEvent event) { + if (event.isCancelled()) { + return; + } + // Check whether the Server is set to prefix the chat with the World name. + // If not we do nothing, if so we need to check if the World has an Alias. + if (plugin.getMVConfig().getPrefixChat()) { + String world; + Thread thread = Thread.currentThread(); + if (playerListener.getWorldsLock().isLocked()) { + plugin.log(Level.FINEST, "worldsLock is locked when attempting to handle player chat on thread: " + thread); + } + playerListener.getWorldsLock().lock(); + try { + plugin.log(Level.FINEST, "Handling player chat on thread: " + thread); + world = playerListener.getPlayerWorld().get(event.getPlayer().getName()); + if (world == null) { + world = event.getPlayer().getWorld().getName(); + playerListener.getPlayerWorld().put(event.getPlayer().getName(), world); + } + } finally { + playerListener.getWorldsLock().unlock(); + } + String prefix = ""; + // If we're not a MV world, don't do anything + if (!this.worldManager.isMVWorld(world)) { + return; + } + MultiverseWorld mvworld = this.worldManager.getMVWorld(world); + if (mvworld.isHidden()) { + return; + } + prefix = mvworld.getColoredWorldString(); + String format = event.getFormat(); + event.setFormat("[" + prefix + "]" + format); + } + } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerChatListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerChatListener.java index 407bf8a8..fc110522 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerChatListener.java +++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerChatListener.java @@ -7,27 +7,20 @@ package com.onarandombox.MultiverseCore.listeners; -import com.onarandombox.MultiverseCore.MultiverseCore; -import com.onarandombox.MultiverseCore.api.MVWorldManager; -import com.onarandombox.MultiverseCore.api.MultiverseWorld; +import java.util.logging.Level; + import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerChatEvent; -import java.util.logging.Level; +import com.onarandombox.MultiverseCore.MultiverseCore; /** * Multiverse's {@link org.bukkit.event.Listener} for players. */ -public class MVPlayerChatListener implements MVChatListener { - - private final MultiverseCore plugin; - private final MVWorldManager worldManager; - private final MVPlayerListener playerListener; - +@SuppressWarnings("deprecation") // this exists only for downwards compatibility +public class MVPlayerChatListener extends MVChatListener { public MVPlayerChatListener(MultiverseCore plugin, MVPlayerListener playerListener) { - this.plugin = plugin; - this.worldManager = plugin.getMVWorldManager(); - this.playerListener = playerListener; + super(plugin, playerListener); plugin.log(Level.FINE, "Registered PlayerChatEvent listener."); } @@ -35,43 +28,8 @@ public class MVPlayerChatListener implements MVChatListener { * This method is called when a player wants to chat. * @param event The Event that was fired. */ - @Override @EventHandler public void playerChat(PlayerChatEvent event) { - if (event.isCancelled()) { - return; - } - // Check whether the Server is set to prefix the chat with the World name. - // If not we do nothing, if so we need to check if the World has an Alias. - if (plugin.getMVConfig().getPrefixChat()) { - String world; - Thread thread = Thread.currentThread(); - if (playerListener.getWorldsLock().isLocked()) { - plugin.log(Level.FINEST, "worldsLock is locked when attempting to handle player chat on thread: " + thread); - } - playerListener.getWorldsLock().lock(); - try { - plugin.log(Level.FINEST, "Handling player chat on thread: " + thread); - world = playerListener.getPlayerWorld().get(event.getPlayer().getName()); - if (world == null) { - world = event.getPlayer().getWorld().getName(); - playerListener.getPlayerWorld().put(event.getPlayer().getName(), world); - } - } finally { - playerListener.getWorldsLock().unlock(); - } - String prefix = ""; - // If we're not a MV world, don't do anything - if (!this.worldManager.isMVWorld(world)) { - return; - } - MultiverseWorld mvworld = this.worldManager.getMVWorld(world); - if (mvworld.isHidden()) { - return; - } - prefix = mvworld.getColoredWorldString(); - String format = event.getFormat(); - event.setFormat("[" + prefix + "]" + format); - } + this.playerChat(new NormalChatEvent(event)); } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/NormalChatEvent.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/NormalChatEvent.java new file mode 100644 index 00000000..a712c627 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/NormalChatEvent.java @@ -0,0 +1,37 @@ +package com.onarandombox.MultiverseCore.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerChatEvent; + +/** + * A wrapper for the {@link PlayerChatEvent}. + * @deprecated This is deprecated like the {@link PlayerChatEvent}. + */ +@Deprecated +public class NormalChatEvent implements ChatEvent { + private final PlayerChatEvent event; + + public NormalChatEvent(PlayerChatEvent event) { + this.event = event; + } + + @Override + public boolean isCancelled() { + return event.isCancelled(); + } + + @Override + public String getFormat() { + return event.getFormat(); + } + + @Override + public void setFormat(String s) { + event.setFormat(s); + } + + @Override + public Player getPlayer() { + return event.getPlayer(); + } +}