001    package org.bukkit.event.block;
002    
003    import org.bukkit.block.Block;
004    import org.bukkit.entity.Player;
005    import org.bukkit.event.Cancellable;
006    import org.bukkit.event.HandlerList;
007    import org.bukkit.inventory.ItemStack;
008    
009    /**
010     * Called when a block is damaged by a player.
011     * <p>
012     * If a Block Damage event is cancelled, the block will not be damaged.
013     */
014    public class BlockDamageEvent extends BlockEvent implements Cancellable {
015        private static final HandlerList handlers = new HandlerList();
016        private final Player player;
017        private boolean instaBreak;
018        private boolean cancel;
019        private final ItemStack itemstack;
020    
021        public BlockDamageEvent(final Player player, final Block block, final ItemStack itemInHand, final boolean instaBreak) {
022            super(block);
023            this.instaBreak = instaBreak;
024            this.player = player;
025            this.itemstack = itemInHand;
026            this.cancel = false;
027        }
028    
029        /**
030         * Gets the player damaging the block involved in this event.
031         *
032         * @return The player damaging the block involved in this event
033         */
034        public Player getPlayer() {
035            return player;
036        }
037    
038        /**
039         * Gets if the block is set to instantly break when damaged by the player.
040         *
041         * @return true if the block should instantly break when damaged by the
042         *     player
043         */
044        public boolean getInstaBreak() {
045            return instaBreak;
046        }
047    
048        /**
049         * Sets if the block should instantly break when damaged by the player.
050         *
051         * @param bool true if you want the block to instantly break when damaged
052         *     by the player
053         */
054        public void setInstaBreak(boolean bool) {
055            this.instaBreak = bool;
056        }
057    
058        /**
059         * Gets the ItemStack for the item currently in the player's hand.
060         *
061         * @return The ItemStack for the item currently in the player's hand
062         */
063        public ItemStack getItemInHand() {
064            return itemstack;
065        }
066    
067        public boolean isCancelled() {
068            return cancel;
069        }
070    
071        public void setCancelled(boolean cancel) {
072            this.cancel = cancel;
073        }
074    
075        @Override
076        public HandlerList getHandlers() {
077            return handlers;
078        }
079    
080        public static HandlerList getHandlerList() {
081            return handlers;
082        }
083    }