001 package org.bukkit.event.block;
002
003 import org.bukkit.block.Block;
004 import org.bukkit.entity.Entity;
005 import org.bukkit.entity.Player;
006 import org.bukkit.event.Cancellable;
007 import org.bukkit.event.HandlerList;
008
009 /**
010 * Called when a block is ignited. If you want to catch when a Player places
011 * fire, you need to use {@link BlockPlaceEvent}.
012 * <p>
013 * If a Block Ignite event is cancelled, the block will not be ignited.
014 */
015 public class BlockIgniteEvent extends BlockEvent implements Cancellable {
016 private static final HandlerList handlers = new HandlerList();
017 private final IgniteCause cause;
018 private final Entity ignitingEntity;
019 private final Block ignitingBlock;
020 private boolean cancel;
021
022 /**
023 * @deprecated use {@link BlockIgniteEvent#BlockIgniteEvent(Block,
024 * IgniteCause, Entity)} instead.
025 */
026 @Deprecated
027 public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Player thePlayer) {
028 this(theBlock, cause, (Entity) thePlayer);
029 }
030
031 public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Entity ignitingEntity) {
032 this(theBlock, cause, ignitingEntity, null);
033 }
034
035 public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Block ignitingBlock) {
036 this(theBlock, cause, null, ignitingBlock);
037 }
038
039 public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Entity ignitingEntity, final Block ignitingBlock) {
040 super(theBlock);
041 this.cause = cause;
042 this.ignitingEntity = ignitingEntity;
043 this.ignitingBlock = ignitingBlock;
044 this.cancel = false;
045 }
046
047 public boolean isCancelled() {
048 return cancel;
049 }
050
051 public void setCancelled(boolean cancel) {
052 this.cancel = cancel;
053 }
054
055 /**
056 * Gets the cause of block ignite.
057 *
058 * @return An IgniteCause value detailing the cause of block ignition
059 */
060 public IgniteCause getCause() {
061 return cause;
062 }
063
064 /**
065 * Gets the player who ignited this block
066 *
067 * @return The Player that placed/ignited the fire block, or null if not ignited by a Player.
068 */
069 public Player getPlayer() {
070 if (ignitingEntity instanceof Player) {
071 return (Player) ignitingEntity;
072 }
073
074 return null;
075 }
076
077 /**
078 * Gets the entity who ignited this block
079 *
080 * @return The Entity that placed/ignited the fire block, or null if not ignited by a Entity.
081 */
082 public Entity getIgnitingEntity() {
083 return ignitingEntity;
084 }
085
086 /**
087 * Gets the block who ignited this block
088 *
089 * @return The Block that placed/ignited the fire block, or null if not ignited by a Block.
090 */
091 public Block getIgnitingBlock() {
092 return ignitingBlock;
093 }
094
095 /**
096 * An enum to specify the cause of the ignite
097 */
098 public enum IgniteCause {
099
100 /**
101 * Block ignition caused by lava.
102 */
103 LAVA,
104 /**
105 * Block ignition caused by a player or dispenser using flint-and-steel.
106 */
107 FLINT_AND_STEEL,
108 /**
109 * Block ignition caused by dynamic spreading of fire.
110 */
111 SPREAD,
112 /**
113 * Block ignition caused by lightning.
114 */
115 LIGHTNING,
116 /**
117 * Block ignition caused by an entity using a fireball.
118 */
119 FIREBALL,
120 /**
121 * Block ignition caused by an Ender Crystal.
122 */
123 ENDER_CRYSTAL,
124 /**
125 * Block ignition caused by explosion.
126 */
127 EXPLOSION,
128 }
129
130 @Override
131 public HandlerList getHandlers() {
132 return handlers;
133 }
134
135 public static HandlerList getHandlerList() {
136 return handlers;
137 }
138 }