From 2b95d3ca47558e804a09e4f7b7f45aeb69fa7861 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 14 Feb 2026 15:21:34 -0500 Subject: [PATCH] Projectile Handling APIs --- .../npcs/api/ability/type/IAbilityDisc.java | 58 ++++------------ .../api/ability/type/IAbilityEnergyBeam.java | 52 ++------------- .../type/IAbilityEnergyProjectile.java | 66 +++++++++++++++++++ .../api/ability/type/IAbilityLaserShot.java | 37 +---------- .../npcs/api/ability/type/IAbilityOrb.java | 52 ++------------- .../npcs/api/entity/IEnergyProjectile.java | 6 -- 6 files changed, 94 insertions(+), 177 deletions(-) create mode 100644 java/noppes/npcs/api/ability/type/IAbilityEnergyProjectile.java diff --git a/java/noppes/npcs/api/ability/type/IAbilityDisc.java b/java/noppes/npcs/api/ability/type/IAbilityDisc.java index 2c86106..62567a6 100644 --- a/java/noppes/npcs/api/ability/type/IAbilityDisc.java +++ b/java/noppes/npcs/api/ability/type/IAbilityDisc.java @@ -1,12 +1,10 @@ package noppes.npcs.api.ability.type; -import noppes.npcs.api.ability.IAbility; - /** * API interface for Disc abilities. * Flat spinning disc projectile with optional boomerang. */ -public interface IAbilityDisc extends IAbility { +public interface IAbilityDisc extends IAbilityEnergyProjectile { float getSpeed(); void setSpeed(float speed); @@ -17,20 +15,14 @@ public interface IAbilityDisc extends IAbility { float getDiscThickness(); void setDiscThickness(float thickness); - float getMaxDistance(); - void setMaxDistance(float distance); + boolean isVertical(); + void setVertical(boolean vertical); - int getMaxLifetime(); - void setMaxLifetime(int ticks); + boolean isBoomerang(); + void setBoomerang(boolean boomerang); - float getDamage(); - void setDamage(float damage); - - float getKnockback(); - void setKnockback(float knockback); - - float getKnockbackUp(); - void setKnockbackUp(float knockback); + int getBoomerangDelay(); + void setBoomerangDelay(int ticks); boolean isHoming(); void setHoming(boolean homing); @@ -41,45 +33,21 @@ public interface IAbilityDisc extends IAbility { float getHomingRange(); void setHomingRange(float range); - boolean isBoomerang(); - void setBoomerang(boolean boomerang); - - int getBoomerangDelay(); - void setBoomerangDelay(int ticks); - - boolean isExplosive(); - void setExplosive(boolean explosive); - - float getExplosionRadius(); - void setExplosionRadius(float radius); - - int getInnerColor(); - void setInnerColor(int color); - - int getOuterColor(); - void setOuterColor(int color); - - boolean isOuterColorEnabled(); - void setOuterColorEnabled(boolean enabled); - float getRotationSpeed(); void setRotationSpeed(float speed); - boolean hasLightningEffect(); - void setLightningEffect(boolean enabled); - - int getAnchorPoint(); - void setAnchorPoint(int point); - - // Dual/Projectile count - int getProjectileCount(); void setProjectileCount(int count); + int getFireDelay(); + void setFireDelay(int delay); + + /** @deprecated Use {@link #getFireDelay()} */ int getDualFireDelay(); + /** @deprecated Use {@link #setFireDelay(int)} */ void setDualFireDelay(int delay); - // Indexed accessors (for dual mode) + // Indexed accessors int getInnerColor(int projectileIndex); void setInnerColor(int projectileIndex, int color); diff --git a/java/noppes/npcs/api/ability/type/IAbilityEnergyBeam.java b/java/noppes/npcs/api/ability/type/IAbilityEnergyBeam.java index e817541..42b0d23 100644 --- a/java/noppes/npcs/api/ability/type/IAbilityEnergyBeam.java +++ b/java/noppes/npcs/api/ability/type/IAbilityEnergyBeam.java @@ -1,37 +1,20 @@ package noppes.npcs.api.ability.type; -import noppes.npcs.api.ability.IAbility; - /** * API interface for Energy Beam abilities. * Homing beam head with trailing path attached to origin. */ -public interface IAbilityEnergyBeam extends IAbility { +public interface IAbilityEnergyBeam extends IAbilityEnergyProjectile { float getSpeed(); void setSpeed(float speed); - float getMaxDistance(); - void setMaxDistance(float distance); - - int getMaxLifetime(); - void setMaxLifetime(int ticks); - float getBeamWidth(); void setBeamWidth(float width); float getHeadSize(); void setHeadSize(float size); - float getDamage(); - void setDamage(float damage); - - float getKnockback(); - void setKnockback(float knockback); - - float getKnockbackUp(); - void setKnockbackUp(float knockback); - boolean isHoming(); void setHoming(boolean homing); @@ -41,42 +24,21 @@ public interface IAbilityEnergyBeam extends IAbility { float getHomingRange(); void setHomingRange(float range); - boolean isExplosive(); - void setExplosive(boolean explosive); - - float getExplosionRadius(); - void setExplosionRadius(float radius); - - int getInnerColor(); - void setInnerColor(int color); - - int getOuterColor(); - void setOuterColor(int color); - - boolean isOuterColorEnabled(); - void setOuterColorEnabled(boolean enabled); - float getRotationSpeed(); void setRotationSpeed(float speed); - boolean hasLightningEffect(); - void setLightningEffect(boolean enabled); - - /** - * Get the anchor point for charging (0-7, see AnchorPoint enum). - */ - int getAnchorPoint(); - void setAnchorPoint(int point); - - // Dual/Projectile count - int getProjectileCount(); void setProjectileCount(int count); + int getFireDelay(); + void setFireDelay(int delay); + + /** @deprecated Use {@link #getFireDelay()} */ int getDualFireDelay(); + /** @deprecated Use {@link #setFireDelay(int)} */ void setDualFireDelay(int delay); - // Indexed accessors (for dual mode) + // Indexed accessors int getInnerColor(int projectileIndex); void setInnerColor(int projectileIndex, int color); diff --git a/java/noppes/npcs/api/ability/type/IAbilityEnergyProjectile.java b/java/noppes/npcs/api/ability/type/IAbilityEnergyProjectile.java new file mode 100644 index 0000000..f4793eb --- /dev/null +++ b/java/noppes/npcs/api/ability/type/IAbilityEnergyProjectile.java @@ -0,0 +1,66 @@ +package noppes.npcs.api.ability.type; + +import noppes.npcs.api.ability.IAbility; + +/** + * Shared API interface for energy projectile abilities (Orb, Disc, Beam, LaserShot). + * Contains methods common to all energy projectile types. + */ +public interface IAbilityEnergyProjectile extends IAbility { + + // Combat + float getDamage(); + void setDamage(float damage); + + float getKnockback(); + void setKnockback(float knockback); + + float getKnockbackUp(); + void setKnockbackUp(float knockback); + + boolean isExplosive(); + void setExplosive(boolean explosive); + + float getExplosionRadius(); + void setExplosionRadius(float radius); + + float getExplosionDamageFalloff(); + void setExplosionDamageFalloff(float falloff); + + // Lifespan + float getMaxDistance(); + void setMaxDistance(float distance); + + int getMaxLifetime(); + void setMaxLifetime(int ticks); + + // Colors + int getInnerColor(); + void setInnerColor(int color); + + int getOuterColor(); + void setOuterColor(int color); + + boolean isOuterColorEnabled(); + void setOuterColorEnabled(boolean enabled); + + float getOuterColorWidth(); + void setOuterColorWidth(float width); + + float getOuterColorAlpha(); + void setOuterColorAlpha(float alpha); + + // Lightning + boolean hasLightningEffect(); + void setLightningEffect(boolean enabled); + + float getLightningDensity(); + void setLightningDensity(float density); + + float getLightningRadius(); + void setLightningRadius(float radius); + + // Anchor + int getAnchorPoint(); + void setAnchorPoint(int point); +} diff --git a/java/noppes/npcs/api/ability/type/IAbilityLaserShot.java b/java/noppes/npcs/api/ability/type/IAbilityLaserShot.java index d82afb7..4f02983 100644 --- a/java/noppes/npcs/api/ability/type/IAbilityLaserShot.java +++ b/java/noppes/npcs/api/ability/type/IAbilityLaserShot.java @@ -1,12 +1,10 @@ package noppes.npcs.api.ability.type; -import noppes.npcs.api.ability.IAbility; - /** * API interface for Laser Shot abilities. * Fast expanding thin line that pierces through targets. */ -public interface IAbilityLaserShot extends IAbility { +public interface IAbilityLaserShot extends IAbilityEnergyProjectile { float getLaserWidth(); void setLaserWidth(float width); @@ -16,37 +14,4 @@ public interface IAbilityLaserShot extends IAbility { int getLingerTicks(); void setLingerTicks(int ticks); - - float getMaxDistance(); - void setMaxDistance(float distance); - - int getMaxLifetime(); - void setMaxLifetime(int ticks); - - float getDamage(); - void setDamage(float damage); - - float getKnockback(); - void setKnockback(float knockback); - - float getKnockbackUp(); - void setKnockbackUp(float knockback); - - boolean isExplosive(); - void setExplosive(boolean explosive); - - float getExplosionRadius(); - void setExplosionRadius(float radius); - - int getInnerColor(); - void setInnerColor(int color); - - int getOuterColor(); - void setOuterColor(int color); - - boolean isOuterColorEnabled(); - void setOuterColorEnabled(boolean enabled); - - boolean hasLightningEffect(); - void setLightningEffect(boolean enabled); } diff --git a/java/noppes/npcs/api/ability/type/IAbilityOrb.java b/java/noppes/npcs/api/ability/type/IAbilityOrb.java index 1ccccdc..2aa451a 100644 --- a/java/noppes/npcs/api/ability/type/IAbilityOrb.java +++ b/java/noppes/npcs/api/ability/type/IAbilityOrb.java @@ -1,12 +1,10 @@ package noppes.npcs.api.ability.type; -import noppes.npcs.api.ability.IAbility; - /** * API interface for Orb abilities. * Homing projectile sphere. */ -public interface IAbilityOrb extends IAbility { +public interface IAbilityOrb extends IAbilityEnergyProjectile { float getOrbSpeed(); void setOrbSpeed(float speed); @@ -14,21 +12,6 @@ public interface IAbilityOrb extends IAbility { float getOrbSize(); void setOrbSize(float size); - float getMaxDistance(); - void setMaxDistance(float distance); - - int getMaxLifetime(); - void setMaxLifetime(int ticks); - - float getDamage(); - void setDamage(float damage); - - float getKnockback(); - void setKnockback(float knockback); - - float getKnockbackUp(); - void setKnockbackUp(float knockback); - boolean isHoming(); void setHoming(boolean homing); @@ -38,42 +21,21 @@ public interface IAbilityOrb extends IAbility { float getHomingRange(); void setHomingRange(float range); - boolean isExplosive(); - void setExplosive(boolean explosive); - - float getExplosionRadius(); - void setExplosionRadius(float radius); - - int getInnerColor(); - void setInnerColor(int color); - - int getOuterColor(); - void setOuterColor(int color); - - boolean isOuterColorEnabled(); - void setOuterColorEnabled(boolean enabled); - float getRotationSpeed(); void setRotationSpeed(float speed); - boolean hasLightningEffect(); - void setLightningEffect(boolean enabled); - - /** - * Get the anchor point for charging (0-7, see AnchorPoint enum). - */ - int getAnchorPoint(); - void setAnchorPoint(int point); - - // Dual/Projectile count - int getProjectileCount(); void setProjectileCount(int count); + int getFireDelay(); + void setFireDelay(int delay); + + /** @deprecated Use {@link #getFireDelay()} */ int getDualFireDelay(); + /** @deprecated Use {@link #setFireDelay(int)} */ void setDualFireDelay(int delay); - // Indexed accessors (for dual mode) + // Indexed accessors int getInnerColor(int projectileIndex); void setInnerColor(int projectileIndex, int color); diff --git a/java/noppes/npcs/api/entity/IEnergyProjectile.java b/java/noppes/npcs/api/entity/IEnergyProjectile.java index f01ebf3..7d40962 100644 --- a/java/noppes/npcs/api/entity/IEnergyProjectile.java +++ b/java/noppes/npcs/api/entity/IEnergyProjectile.java @@ -10,12 +10,6 @@ public interface IEnergyProjectile { IEntity getTarget(); - int getSiblingEntityId(); - - void setSiblingEntityId(int siblingEntityId); - - IEnergyProjectile getSibling(); - float getSize(); double getMotionX();