package org.bukkit.event.player; import org.apache.commons.lang.Validate; import org.bukkit.Warning; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; import java.util.HashSet; import java.util.Set; /** * Holds information for player chat and commands * * This event will fire from the main thread and allows the use of * all of the Bukkit API, unlike the {@link AsyncPlayerChatEvent}. * <p> * Listening to this event forces chat to wait for the main thread which * causes delays for chat. {@link AsyncPlayerChatEvent} is the encouraged * alternative for thread safe implementations. */ @Warning(reason = "Listening to this event forces chat to wait for the main thread, delaying chat messages.") public class PlayerChatEvent extends PlayerEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancel = false; private String message; private String format; private final Set<Player> recipients; public PlayerChatEvent(final Player player, final String message) { super(player); this.message = message; this.format = "<%1$s> %2$s"; this.recipients = new HashSet<Player>(player.getServer().getOnlinePlayers()); } public PlayerChatEvent(final Player player, final String message, final String format, final Set<Player> recipients) { super(player); this.message = message; this.format = format; this.recipients = recipients; } public boolean isCancelled() { return cancel; } public void setCancelled(boolean cancel) { this.cancel = cancel; } /** * Gets the message that the player is attempting to send * * @return Message the player is attempting to send */ public String getMessage() { return message; } /** * Sets the message that the player will send * * @param message New message that the player will send */ public void setMessage(String message) { this.message = message; } /** * Sets the player that this message will display as, or command will be * executed as * * @param player New player which this event will execute as */ public void setPlayer(final Player player) { Validate.notNull(player, "Player cannot be null"); this.player = player; } /** * Gets the format to use to display this chat message * * @return String.Format compatible format string */ public String getFormat() { return format; } /** * Sets the format to use to display this chat message * * @param format String.Format compatible format string */ 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; } /** * Gets a set of recipients that this chat message will be displayed to * * @return All Players who will see this chat message */ public Set<Player> getRecipients() { return recipients; } @Override public HandlerList getHandlers() { return handlers; } public static HandlerList getHandlerList() { return handlers; } }