001    package org.bukkit.event.entity;
002    
003    import org.bukkit.entity.Entity;
004    import org.bukkit.entity.LivingEntity;
005    import org.bukkit.entity.Projectile;
006    import org.bukkit.event.Cancellable;
007    import org.bukkit.event.HandlerList;
008    import org.bukkit.inventory.ItemStack;
009    
010    /**
011     * Called when a LivingEntity shoots a bow firing an arrow
012     */
013    public class EntityShootBowEvent extends EntityEvent implements Cancellable {
014        private static final HandlerList handlers = new HandlerList();
015        private final ItemStack bow;
016        private Entity projectile;
017        private final float force;
018        private boolean cancelled;
019    
020        public EntityShootBowEvent(final LivingEntity shooter, final ItemStack bow, final Projectile projectile, final float force) {
021            super(shooter);
022            this.bow = bow;
023            this.projectile = projectile;
024            this.force = force;
025        }
026    
027        @Override
028        public LivingEntity getEntity() {
029            return (LivingEntity) entity;
030        }
031    
032        /**
033         * Gets the bow ItemStack used to fire the arrow.
034         *
035         * @return the bow involved in this event
036         */
037        public ItemStack getBow() {
038            return bow;
039        }
040    
041        /**
042         * Gets the projectile which will be launched by this event
043         *
044         * @return the launched projectile
045         */
046        public Entity getProjectile() {
047            return projectile;
048        }
049    
050        /**
051         * Replaces the projectile which will be launched
052         *
053         * @param projectile the new projectile
054         */
055        public void setProjectile(Entity projectile) {
056            this.projectile = projectile;
057        }
058    
059        /**
060         * Gets the force the arrow was launched with
061         *
062         * @return bow shooting force, up to 1.0
063         */
064        public float getForce() {
065            return force;
066        }
067    
068        public boolean isCancelled() {
069            return cancelled;
070        }
071    
072        public void setCancelled(boolean cancel) {
073            cancelled = cancel;
074        }
075    
076        @Override
077        public HandlerList getHandlers() {
078            return handlers;
079        }
080    
081        public static HandlerList getHandlerList() {
082            return handlers;
083        }
084    }