Less duplicate code ... I think.

This commit is contained in:
main() 2012-08-18 15:13:09 +02:00
parent d0ea4168bc
commit 4ecb28b3bb
6 changed files with 174 additions and 109 deletions

View File

@ -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();
}
}

View File

@ -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();
}

View File

@ -7,70 +7,28 @@
package com.onarandombox.MultiverseCore.listeners; package com.onarandombox.MultiverseCore.listeners;
import com.onarandombox.MultiverseCore.MultiverseCore; import java.util.logging.Level;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerChatEvent; 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. * Multiverse's {@link org.bukkit.event.Listener} for players.
*/ */
public class MVAsyncPlayerChatListener implements MVChatListener<AsyncPlayerChatEvent> { public class MVAsyncPlayerChatListener extends MVChatListener {
private final MultiverseCore plugin;
private final MVWorldManager worldManager;
private final MVPlayerListener playerListener;
public MVAsyncPlayerChatListener(MultiverseCore plugin, MVPlayerListener playerListener) { public MVAsyncPlayerChatListener(MultiverseCore plugin, MVPlayerListener playerListener) {
this.plugin = plugin; super(plugin, playerListener);
this.worldManager = plugin.getMVWorldManager(); plugin.log(Level.FINE, "Created AsyncPlayerChatEvent listener.");
this.playerListener = playerListener;
plugin.log(Level.FINE, "Registered AsyncPlayerChatEvent listener.");
} }
/** /**
* {@inheritDoc} * This method is called when a player wants to chat.
* @param event The Event that was fired.
*/ */
@Override
@EventHandler @EventHandler
public void playerChat(AsyncPlayerChatEvent event) { public void playerChat(AsyncPlayerChatEvent event) {
if (event.isCancelled()) { this.playerChat(new AsyncChatEvent(event));
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);
}
} }
} }

View File

@ -1,18 +1,66 @@
package com.onarandombox.MultiverseCore.listeners; package com.onarandombox.MultiverseCore.listeners;
import org.bukkit.event.Event; import java.util.logging.Level;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; 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}. * Multiverse's {@link org.bukkit.event.Listener} for players.
* @param <E> The chat event-type.
*/ */
public interface MVChatListener<E extends Event> 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. * This handles a {@link ChatEvent}.
* @param event The Event that was fired. * @param event The {@link ChatEvent}.
*/ */
@EventHandler public void playerChat(ChatEvent event) {
void playerChat(E 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);
}
}
} }

View File

@ -7,27 +7,20 @@
package com.onarandombox.MultiverseCore.listeners; package com.onarandombox.MultiverseCore.listeners;
import com.onarandombox.MultiverseCore.MultiverseCore; import java.util.logging.Level;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerChatEvent; 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. * Multiverse's {@link org.bukkit.event.Listener} for players.
*/ */
public class MVPlayerChatListener implements MVChatListener<PlayerChatEvent> { @SuppressWarnings("deprecation") // this exists only for downwards compatibility
public class MVPlayerChatListener extends MVChatListener {
private final MultiverseCore plugin;
private final MVWorldManager worldManager;
private final MVPlayerListener playerListener;
public MVPlayerChatListener(MultiverseCore plugin, MVPlayerListener playerListener) { public MVPlayerChatListener(MultiverseCore plugin, MVPlayerListener playerListener) {
this.plugin = plugin; super(plugin, playerListener);
this.worldManager = plugin.getMVWorldManager();
this.playerListener = playerListener;
plugin.log(Level.FINE, "Registered PlayerChatEvent listener."); plugin.log(Level.FINE, "Registered PlayerChatEvent listener.");
} }
@ -35,43 +28,8 @@ public class MVPlayerChatListener implements MVChatListener<PlayerChatEvent> {
* This method is called when a player wants to chat. * This method is called when a player wants to chat.
* @param event The Event that was fired. * @param event The Event that was fired.
*/ */
@Override
@EventHandler @EventHandler
public void playerChat(PlayerChatEvent event) { public void playerChat(PlayerChatEvent event) {
if (event.isCancelled()) { this.playerChat(new NormalChatEvent(event));
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);
}
} }
} }

View File

@ -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();
}
}