package org.bukkit.projectiles; import org.bukkit.entity.Projectile; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Represents a valid source of a projectile. */ public interface ProjectileSource { /** * Launches a {@link Projectile} from the ProjectileSource. * * @param a projectile subclass * @param projectile class of the projectile to launch * @return the launched projectile */ @NotNull public T launchProjectile(@NotNull Class projectile); /** * Launches a {@link Projectile} from the ProjectileSource with an * initial velocity. * * @param a projectile subclass * @param projectile class of the projectile to launch * @param velocity the velocity with which to launch * @return the launched projectile */ @NotNull public T launchProjectile(@NotNull Class projectile, @Nullable Vector velocity); }