001    package org.bukkit.entity;
002    
003    import org.bukkit.projectiles.ProjectileSource;
004    
005    /**
006     * Represents a shootable entity.
007     */
008    public interface Projectile extends Entity {
009    
010        /**
011         * This method exists for legacy reasons to provide backwards
012         * compatibility. It will not exist at runtime and should not be used
013         * under any circumstances.
014         */
015        @Deprecated
016        public LivingEntity _INVALID_getShooter();
017    
018        /**
019         * Retrieve the shooter of this projectile.
020         *
021         * @return the {@link ProjectileSource} that shot this projectile
022         */
023        public ProjectileSource getShooter();
024    
025        /**
026         * This method exists for legacy reasons to provide backwards
027         * compatibility. It will not exist at runtime and should not be used
028         * under any circumstances.
029         */
030        @Deprecated
031        public void _INVALID_setShooter(LivingEntity shooter);
032    
033        /**
034         * Set the shooter of this projectile.
035         *
036         * @param source the {@link ProjectileSource} that shot this projectile
037         */
038        public void setShooter(ProjectileSource source);
039    
040        /**
041         * Determine if this projectile should bounce or not when it hits.
042         * <p>
043         * If a small fireball does not bounce it will set the target on fire.
044         *
045         * @return true if it should bounce.
046         */
047        public boolean doesBounce();
048    
049        /**
050         * Set whether or not this projectile should bounce or not when it hits
051         * something.
052         *
053         * @param doesBounce whether or not it should bounce.
054         */
055        public void setBounce(boolean doesBounce);
056    }