package tc.oc.pgm.projectile;

import org.bukkit.entity.Entity;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
import org.bukkit.projectiles.ProjectileSource;

/**
 * Called when a projectile is launched. Difference from the Bukkit version
 * is that the projectile can be any Entity, not necessarily a Projectile.
 */
public class EntityLaunchEvent extends EntityEvent implements Cancellable, EntityAction {

    private final ProjectileSource source;
    private boolean cancelled;

    public EntityLaunchEvent(Entity launched, ProjectileSource source) {
        super(launched);
        this.source = source;
    }

    public ProjectileSource getSource() {
        return source;
    }

    @Override
    public Entity getActor() {
        return source instanceof Entity ? (Entity) source : null;
    }

    public boolean isCancelled() {
        return cancelled;
    }

    public void setCancelled(boolean cancel) {
        cancelled = cancel;
    }

    private static final HandlerList handlers = new HandlerList();

    @Override
    public HandlerList getHandlers() {
        return handlers;
    }

    public static HandlerList getHandlerList() {
        return handlers;
    }
}
