001    package org.bukkit.event.entity;
002    
003    import org.bukkit.entity.Creeper;
004    import org.bukkit.entity.LightningStrike;
005    import org.bukkit.event.Cancellable;
006    import org.bukkit.event.HandlerList;
007    
008    /**
009     * Called when a Creeper is struck by lightning.
010     * <p>
011     * If a Creeper Power event is cancelled, the Creeper will not be powered.
012     */
013    public class CreeperPowerEvent extends EntityEvent implements Cancellable {
014        private static final HandlerList handlers = new HandlerList();
015        private boolean canceled;
016        private final PowerCause cause;
017        private LightningStrike bolt;
018    
019        public CreeperPowerEvent(final Creeper creeper, final LightningStrike bolt, final PowerCause cause) {
020            this(creeper, cause);
021            this.bolt = bolt;
022        }
023    
024        public CreeperPowerEvent(final Creeper creeper, final PowerCause cause) {
025            super(creeper);
026            this.cause = cause;
027        }
028    
029        public boolean isCancelled() {
030            return canceled;
031        }
032    
033        public void setCancelled(boolean cancel) {
034            canceled = cancel;
035        }
036    
037        @Override
038        public Creeper getEntity() {
039            return (Creeper) entity;
040        }
041    
042        /**
043         * Gets the lightning bolt which is striking the Creeper.
044         *
045         * @return The Entity for the lightning bolt which is striking the Creeper
046         */
047        public LightningStrike getLightning() {
048            return bolt;
049        }
050    
051        /**
052         * Gets the cause of the creeper being (un)powered.
053         *
054         * @return A PowerCause value detailing the cause of change in power.
055         */
056        public PowerCause getCause() {
057            return cause;
058        }
059    
060        @Override
061        public HandlerList getHandlers() {
062            return handlers;
063        }
064    
065        public static HandlerList getHandlerList() {
066            return handlers;
067        }
068    
069        /**
070         * An enum to specify the cause of the change in power
071         */
072        public enum PowerCause {
073    
074            /**
075             * Power change caused by a lightning bolt
076             * <p>
077             * Powered state: true
078             */
079            LIGHTNING,
080            /**
081             * Power change caused by something else (probably a plugin)
082             * <p>
083             * Powered state: true
084             */
085            SET_ON,
086            /**
087             * Power change caused by something else (probably a plugin)
088             * <p>
089             * Powered state: false
090             */
091            SET_OFF
092        }
093    }