001    package org.bukkit.event.player;
002    
003    import java.util.HashSet;
004    import java.util.Set;
005    
006    import org.apache.commons.lang.Validate;
007    import org.bukkit.Warning;
008    import org.bukkit.entity.Player;
009    import org.bukkit.event.Cancellable;
010    import org.bukkit.event.HandlerList;
011    
012    /**
013     * Holds information for player chat and commands
014     *
015     * @deprecated This event will fire from the main thread and allows the use of
016     *     all of the Bukkit API, unlike the {@link AsyncPlayerChatEvent}.
017     *     <p>
018     *     Listening to this event forces chat to wait for the main thread which
019     *     causes delays for chat. {@link AsyncPlayerChatEvent} is the encouraged
020     *     alternative for thread safe implementations.
021     */
022    @Deprecated
023    @Warning(reason="Listening to this event forces chat to wait for the main thread, delaying chat messages.")
024    public class PlayerChatEvent extends PlayerEvent implements Cancellable {
025        private static final HandlerList handlers = new HandlerList();
026        private boolean cancel = false;
027        private String message;
028        private String format;
029        private final Set<Player> recipients;
030    
031        public PlayerChatEvent(final Player player, final String message) {
032            super(player);
033            this.message = message;
034            this.format = "<%1$s> %2$s";
035            this.recipients = new HashSet<Player>(player.getServer().getOnlinePlayers());
036        }
037    
038        public PlayerChatEvent(final Player player, final String message, final String format, final Set<Player> recipients) {
039            super(player);
040            this.message = message;
041            this.format = format;
042            this.recipients = recipients;
043        }
044    
045        public boolean isCancelled() {
046            return cancel;
047        }
048    
049        public void setCancelled(boolean cancel) {
050            this.cancel = cancel;
051        }
052    
053        /**
054         * Gets the message that the player is attempting to send
055         *
056         * @return Message the player is attempting to send
057         */
058        public String getMessage() {
059            return message;
060        }
061    
062        /**
063         * Sets the message that the player will send
064         *
065         * @param message New message that the player will send
066         */
067        public void setMessage(String message) {
068            this.message = message;
069        }
070    
071        /**
072         * Sets the player that this message will display as, or command will be
073         * executed as
074         *
075         * @param player New player which this event will execute as
076         */
077        public void setPlayer(final Player player) {
078            Validate.notNull(player, "Player cannot be null");
079            this.player = player;
080        }
081    
082        /**
083         * Gets the format to use to display this chat message
084         *
085         * @return String.Format compatible format string
086         */
087        public String getFormat() {
088            return format;
089        }
090    
091        /**
092         * Sets the format to use to display this chat message
093         *
094         * @param format String.Format compatible format string
095         */
096        public void setFormat(final String format) {
097            // Oh for a better way to do this!
098            try {
099                String.format(format, player, message);
100            } catch (RuntimeException ex) {
101                ex.fillInStackTrace();
102                throw ex;
103            }
104    
105            this.format = format;
106        }
107    
108        /**
109         * Gets a set of recipients that this chat message will be displayed to
110         *
111         * @return All Players who will see this chat message
112         */
113        public Set<Player> getRecipients() {
114            return recipients;
115        }
116    
117        @Override
118        public HandlerList getHandlers() {
119            return handlers;
120        }
121    
122        public static HandlerList getHandlerList() {
123            return handlers;
124        }
125    }