001    package org.bukkit.event.world;
002    
003    import org.bukkit.block.Block;
004    import org.bukkit.World;
005    import org.bukkit.event.Cancellable;
006    import org.bukkit.event.HandlerList;
007    
008    import java.util.ArrayList;
009    import java.util.Collection;
010    
011    /**
012     * Called when a portal is created
013     */
014    public class PortalCreateEvent extends WorldEvent implements Cancellable {
015        private static final HandlerList handlers = new HandlerList();
016        private boolean cancel = false;
017        private final ArrayList<Block> blocks = new ArrayList<Block>();
018        private CreateReason reason = CreateReason.FIRE;
019    
020        public PortalCreateEvent(final Collection<Block> blocks, final World world, CreateReason reason) {
021            super(world);
022    
023            this.blocks.addAll(blocks);
024            this.reason = reason;
025        }
026    
027        /**
028         * Gets an array list of all the blocks associated with the created portal
029         *
030         * @return array list of all the blocks associated with the created portal
031         */
032        public ArrayList<Block> getBlocks() {
033            return this.blocks;
034        }
035    
036        public boolean isCancelled() {
037            return cancel;
038        }
039    
040        public void setCancelled(boolean cancel) {
041            this.cancel = cancel;
042        }
043    
044        /**
045         * Gets the reason for the portal's creation
046         *
047         * @return CreateReason for the portal's creation
048         */
049        public CreateReason getReason() {
050            return reason;
051        }
052    
053        @Override
054        public HandlerList getHandlers() {
055            return handlers;
056        }
057    
058        public static HandlerList getHandlerList() {
059            return handlers;
060        }
061    
062        /**
063         * An enum to specify the various reasons for a portal's creation
064         */
065        public enum CreateReason {
066            /**
067             * When a portal is created 'traditionally' due to a portal frame
068             * being set on fire.
069             */
070            FIRE,
071            /**
072             * When a portal is created as a destination for an existing portal
073             * when using the custom PortalTravelAgent
074             */
075            OBC_DESTINATION
076        }
077    }