001    package org.bukkit.event.player;
002    
003    import org.bukkit.Material;
004    import org.bukkit.block.Block;
005    import org.bukkit.block.BlockFace;
006    import org.bukkit.entity.Player;
007    import org.bukkit.event.Cancellable;
008    import org.bukkit.inventory.ItemStack;
009    
010    /**
011     * Called when a player interacts with a Bucket
012     */
013    public abstract class PlayerBucketEvent extends PlayerEvent implements Cancellable {
014        private ItemStack itemStack;
015        private boolean cancelled = false;
016        private final Block blockClicked;
017        private final BlockFace blockFace;
018        private final Material bucket;
019    
020        public PlayerBucketEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand) {
021            super(who);
022            this.blockClicked = blockClicked;
023            this.blockFace = blockFace;
024            this.itemStack = itemInHand;
025            this.bucket = bucket;
026        }
027    
028        /**
029         * Returns the bucket used in this event
030         *
031         * @return the used bucket
032         */
033        public Material getBucket() {
034            return bucket;
035        }
036    
037        /**
038         * Get the resulting item in hand after the bucket event
039         *
040         * @return Itemstack hold in hand after the event.
041         */
042        public ItemStack getItemStack() {
043            return itemStack;
044        }
045    
046        /**
047         * Set the item in hand after the event
048         *
049         * @param itemStack the new held itemstack after the bucket event.
050         */
051        public void setItemStack(ItemStack itemStack) {
052            this.itemStack = itemStack;
053        }
054    
055        /**
056         * Return the block clicked
057         *
058         * @return the blicked block
059         */
060        public Block getBlockClicked() {
061            return blockClicked;
062        }
063    
064        /**
065         * Get the face on the clicked block
066         *
067         * @return the clicked face
068         */
069        public BlockFace getBlockFace() {
070            return blockFace;
071        }
072    
073        public boolean isCancelled() {
074            return cancelled;
075        }
076    
077        public void setCancelled(boolean cancel) {
078            this.cancelled = cancel;
079        }
080    }