package tc.oc.pgm.projectile; import java.util.List; import javax.annotation.Nullable; import org.bukkit.entity.Entity; import org.bukkit.potion.PotionEffect; import java.time.Duration; import tc.oc.pgm.features.FeatureDefinition; import tc.oc.pgm.features.FeatureInfo; import tc.oc.pgm.filters.Filter; @FeatureInfo(name = "projectile") public interface ProjectileDefinition extends FeatureDefinition { @Nullable String getName(); @Nullable Double damage(); double velocity(); ClickAction clickAction(); Class<? extends Entity> projectile(); List<PotionEffect> potion(); Filter destroyFilter(); Duration cooldown(); boolean throwable(); } class ProjectileDefinitionImpl extends FeatureDefinition.Impl implements ProjectileDefinition { private @Inspect @Nullable String name; private @Inspect @Nullable Double damage; private @Inspect double velocity; private @Inspect ClickAction clickAction; private @Inspect Class<? extends Entity> projectile; private @Inspect List<PotionEffect> potion; private @Inspect Filter destroyFilter; private @Inspect Duration coolDown; private @Inspect boolean throwable; public ProjectileDefinitionImpl(@Nullable String name, @Nullable Double damage, double velocity, ClickAction clickAction, Class<? extends Entity> entity, List<PotionEffect> potion, Filter destroyFilter, Duration coolDown, boolean throwable) { this.name = name; this.damage = damage; this.velocity = velocity; this.clickAction = clickAction; this.projectile = entity; this.potion = potion; this.destroyFilter = destroyFilter; this.coolDown = coolDown; this.throwable = throwable; } @Override public @Nullable String getName() { return name; } @Override @Nullable public Double damage() { return damage; } @Override public double velocity() { return velocity; } @Override public ClickAction clickAction() { return clickAction; } @Override public Class<? extends Entity> projectile() { return projectile; } @Override public List<PotionEffect> potion() { return potion; } @Override public Filter destroyFilter() { return destroyFilter; } @Override public Duration cooldown() { return coolDown; } @Override public boolean throwable() { return throwable; } }