001    package org.bukkit.event.player;
002    
003    import org.bukkit.Location;
004    import org.bukkit.entity.Player;
005    import org.bukkit.event.HandlerList;
006    
007    /**
008     * Holds information for player teleport events
009     */
010    public class PlayerTeleportEvent extends PlayerMoveEvent {
011        private static final HandlerList handlers = new HandlerList();
012        private TeleportCause cause = TeleportCause.UNKNOWN;
013    
014        public PlayerTeleportEvent(final Player player, final Location from, final Location to) {
015            super(player, from, to);
016        }
017    
018        public PlayerTeleportEvent(final Player player, final Location from, final Location to, final TeleportCause cause) {
019            this(player, from, to);
020    
021            this.cause = cause;
022        }
023    
024        /**
025         * Gets the cause of this teleportation event
026         *
027         * @return Cause of the event
028         */
029        public TeleportCause getCause() {
030            return cause;
031        }
032    
033        public enum TeleportCause {
034            /**
035             * Indicates the teleporation was caused by a player throwing an Ender
036             * Pearl
037             */
038            ENDER_PEARL,
039            /**
040             * Indicates the teleportation was caused by a player executing a
041             * command
042             */
043            COMMAND,
044            /**
045             * Indicates the teleportation was caused by a plugin
046             */
047            PLUGIN,
048            /**
049             * Indicates the teleportation was caused by a player entering a
050             * Nether portal
051             */
052            NETHER_PORTAL,
053            /**
054             * Indicates the teleportation was caused by a player entering an End
055             * portal
056             */
057            END_PORTAL,
058            /**
059             * Indicates the teleportation was caused by an event not covered by
060             * this enum
061             */
062            UNKNOWN;
063        }
064    
065        @Override
066        public HandlerList getHandlers() {
067            return handlers;
068        }
069    
070        public static HandlerList getHandlerList() {
071            return handlers;
072        }
073    }