001    package org.bukkit.event.player;
002    
003    import org.bukkit.Location;
004    import org.bukkit.TravelAgent;
005    import org.bukkit.entity.Player;
006    import org.bukkit.event.HandlerList;
007    
008    /**
009     * Called when a player is about to teleport because it is in contact with a
010     * portal.
011     * <p>
012     * For other entities see {@link org.bukkit.event.entity.EntityPortalEvent}
013     */
014    public class PlayerPortalEvent extends PlayerTeleportEvent {
015        private static final HandlerList handlers = new HandlerList();
016        protected boolean useTravelAgent = true;
017        protected TravelAgent travelAgent;
018    
019        public PlayerPortalEvent(final Player player, final Location from, final Location to, final TravelAgent pta) {
020            super(player, from, to);
021            this.travelAgent = pta;
022        }
023    
024        public PlayerPortalEvent(Player player, Location from, Location to, TravelAgent pta, TeleportCause cause) {
025            super(player, from, to, cause);
026            this.travelAgent = pta;
027        }
028    
029        /**
030         * Sets whether or not the Travel Agent will be used.
031         * <p>
032         * If this is set to true, the TravelAgent will try to find a Portal at
033         * the {@link #getTo()} Location, and will try to create one if there is
034         * none.
035         * <p>
036         * If this is set to false, the {@link #getPlayer()} will only be
037         * teleported to the {@link #getTo()} Location.
038         *
039         * @param useTravelAgent whether to use the Travel Agent
040         */
041        public void useTravelAgent(boolean useTravelAgent) {
042            this.useTravelAgent = useTravelAgent;
043        }
044    
045        /**
046         * Gets whether or not the Travel Agent will be used.
047         * <p>
048         * If this is set to true, the TravelAgent will try to find a Portal at
049         * the {@link #getTo()} Location, and will try to create one if there is
050         * none.
051         * <p>
052         * If this is set to false, the {@link #getPlayer()}} will only be
053         * teleported to the {@link #getTo()} Location.
054         *
055         * @return whether to use the Travel Agent
056         */
057        public boolean useTravelAgent() {
058            return useTravelAgent && travelAgent != null;
059        }
060    
061        /**
062         * Gets the Travel Agent used (or not) in this event.
063         *
064         * @return the Travel Agent used (or not) in this event
065         */
066        public TravelAgent getPortalTravelAgent() {
067            return this.travelAgent;
068        }
069    
070        /**
071         * Sets the Travel Agent used (or not) in this event.
072         *
073         * @param travelAgent the Travel Agent used (or not) in this event
074         */
075        public void setPortalTravelAgent(TravelAgent travelAgent) {
076            this.travelAgent = travelAgent;
077        }
078    
079        @Override
080        public HandlerList getHandlers() {
081            return handlers;
082        }
083    
084        public static HandlerList getHandlerList() {
085            return handlers;
086        }
087    }