001    package org.bukkit.event.server;
002    
003    import org.bukkit.command.CommandSender;
004    import org.bukkit.event.HandlerList;
005    
006    /**
007     * This event is called when a command is run from the server console. It is
008     * called early in the command handling process, and modifications in this
009     * event (via {@link #setCommand(String)}) will be shown in the behavior.
010     * <p>
011     * Many plugins will have <b>no use for this event</b>, and you should
012     * attempt to avoid using it if it is not necessary.
013     * <p>
014     * Some examples of valid uses for this event are:
015     * <ul>
016     * <li>Logging executed commands to a separate file
017     * <li>Variable substitution. For example, replacing <code>${ip:Steve}</code>
018     *     with the connection IP of the player named Steve, or simulating the
019     *     <code>@a</code> and <code>@p</code> decorators used by Command Blocks
020     *     for plugins that do not handle it.
021     * <li>Conditionally blocking commands belonging to other plugins.
022     * <li>Per-sender command aliases. For example, after the console runs the
023     *     command <code>/calias cr gamemode creative</code>, the next time they
024     *     run <code>/cr</code>, it gets replaced into
025     *     <code>/gamemode creative</code>. (Global command aliases should be
026     *     done by registering the alias.)
027     * </ul>
028     * <p>
029     * Examples of incorrect uses are:
030     * <ul>
031     * <li>Using this event to run command logic
032     * </ul>
033     * <p>
034     * If the event is cancelled, processing of the command will halt.
035     * <p>
036     * The state of whether or not there is a slash (<code>/</code>) at the
037     * beginning of the message should be preserved. If a slash is added or
038     * removed, unexpected behavior may result.
039     */
040    public class ServerCommandEvent extends ServerEvent {
041        private static final HandlerList handlers = new HandlerList();
042        private String command;
043        private final CommandSender sender;
044    
045        public ServerCommandEvent(final CommandSender sender, final String command) {
046            this.command = command;
047            this.sender = sender;
048        }
049    
050        /**
051         * Gets the command that the user is attempting to execute from the
052         * console
053         *
054         * @return Command the user is attempting to execute
055         */
056        public String getCommand() {
057            return command;
058        }
059    
060        /**
061         * Sets the command that the server will execute
062         *
063         * @param message New message that the server will execute
064         */
065        public void setCommand(String message) {
066            this.command = message;
067        }
068    
069        /**
070         * Get the command sender.
071         *
072         * @return The sender
073         */
074        public CommandSender getSender() {
075            return sender;
076        }
077    
078        @Override
079        public HandlerList getHandlers() {
080            return handlers;
081        }
082    
083        public static HandlerList getHandlerList() {
084            return handlers;
085        }
086    }