diff --git a/java/noppes/npcs/api/ability/data/IEnergyDisplayData.java b/java/noppes/npcs/api/ability/data/IEnergyDisplayData.java index 269f094..e1b9097 100644 --- a/java/noppes/npcs/api/ability/data/IEnergyDisplayData.java +++ b/java/noppes/npcs/api/ability/data/IEnergyDisplayData.java @@ -21,6 +21,10 @@ public interface IEnergyDisplayData { void setOuterColorAlpha(float outerColorAlpha); + float getInnerAlpha(); + + void setInnerAlpha(float innerAlpha); + float getRotationSpeed(); void setRotationSpeed(float rotationSpeed); diff --git a/java/noppes/npcs/api/entity/IEnergyAbility.java b/java/noppes/npcs/api/entity/IEnergyAbility.java new file mode 100644 index 0000000..b4b18b9 --- /dev/null +++ b/java/noppes/npcs/api/entity/IEnergyAbility.java @@ -0,0 +1,66 @@ +package noppes.npcs.api.entity; + +import net.minecraft.entity.Entity; + +/** + * Base interface for all energy ability entities (Projectiles, Barriers). + * Contains shared display, lightning, owner, and charging properties. + */ +public interface IEnergyAbility extends IEntity { + + // ==================== OWNER ==================== + + int getOwnerEntityId(); + + IEntity getOwner(); + + // ==================== DISPLAY ==================== + + int getInnerColor(); + + void setInnerColor(int color); + + float getInnerAlpha(); + + void setInnerAlpha(float alpha); + + 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); + + int getLightningFadeTime(); + + void setLightningFadeTime(int ticks); + + // ==================== STATE ==================== + + boolean isCharging(); + + float getChargeProgress(); +} diff --git a/java/noppes/npcs/api/entity/IEnergyBarrier.java b/java/noppes/npcs/api/entity/IEnergyBarrier.java new file mode 100644 index 0000000..ddce946 --- /dev/null +++ b/java/noppes/npcs/api/entity/IEnergyBarrier.java @@ -0,0 +1,64 @@ +package noppes.npcs.api.entity; + +import net.minecraft.entity.Entity; + +/** + * Base interface for energy barrier entities (Dome, Panel). + * Barriers are defensive structures that block incoming energy projectiles. + * Extends IEnergyAbility for shared display/lightning/owner/charging methods. + */ +public interface IEnergyBarrier extends IEnergyAbility { + + // ==================== HEALTH ==================== + + float getCurrentHealth(); + + void setCurrentHealth(float health); + + float getHealthPercent(); + + float getMaxHealth(); + + void setMaxHealth(float maxHealth); + + boolean isUseHealth(); + + void setUseHealth(boolean useHealth); + + // ==================== DURATION ==================== + + int getDuration(); + + void setDuration(int ticks); + + boolean isUseDuration(); + + void setUseDuration(boolean useDuration); + + // ==================== STATE (BARRIER-SPECIFIC) ==================== + + int getTicksAlive(); + + // ==================== BARRIER ==================== + + float getDefaultMultiplier(); + + void setDefaultMultiplier(float multiplier); + + boolean isKnockbackEnabled(); + + void setKnockbackEnabled(boolean enabled); + + float getKnockbackStrength(); + + void setKnockbackStrength(float strength); + + int getKnockbackTarget(); + + void setKnockbackTarget(int target); + + /** + * Returns the barrier type: 0=Dome, 1=Panel + */ + int getBarrierType(); +} diff --git a/java/noppes/npcs/api/entity/IEnergyDome.java b/java/noppes/npcs/api/entity/IEnergyDome.java new file mode 100644 index 0000000..0a6fcbf --- /dev/null +++ b/java/noppes/npcs/api/entity/IEnergyDome.java @@ -0,0 +1,13 @@ +package noppes.npcs.api.entity; + +import net.minecraft.entity.Entity; + +/** + * Represents an energy dome barrier - a spherical shield centered on the caster. + */ +public interface IEnergyDome extends IEnergyBarrier { + + float getDomeRadius(); + + void setDomeRadius(float radius); +} diff --git a/java/noppes/npcs/api/entity/IEnergyPanel.java b/java/noppes/npcs/api/entity/IEnergyPanel.java new file mode 100644 index 0000000..122dab3 --- /dev/null +++ b/java/noppes/npcs/api/entity/IEnergyPanel.java @@ -0,0 +1,26 @@ +package noppes.npcs.api.entity; + +import net.minecraft.entity.Entity; + +/** + * Represents an energy panel barrier - a flat rectangular shield (Wall or Shield mode). + */ +public interface IEnergyPanel extends IEnergyBarrier { + + float getPanelWidth(); + + void setPanelWidth(float width); + + float getPanelHeight(); + + void setPanelHeight(float height); + + float getPanelYaw(); + + /** + * Panel mode: 0=PLACED, 1=HELD, 2=LAUNCHED + */ + int getPanelMode(); + + boolean isLaunched(); +} diff --git a/java/noppes/npcs/api/entity/IEnergyProjectile.java b/java/noppes/npcs/api/entity/IEnergyProjectile.java index b55ca94..36e6575 100644 --- a/java/noppes/npcs/api/entity/IEnergyProjectile.java +++ b/java/noppes/npcs/api/entity/IEnergyProjectile.java @@ -4,16 +4,12 @@ import net.minecraft.entity.Entity; /** * Represents an energy projectile entity (Orb, Beam, Disc, Laser). - * Extends IEntity so scripts have full access to both entity and energy-specific methods. + * Extends IEnergyAbility for shared display/lightning/owner/charging methods. */ -public interface IEnergyProjectile extends IEntity { +public interface IEnergyProjectile extends IEnergyAbility { // ==================== OWNER & TARGET ==================== - int getOwnerEntityId(); - - IEntity getOwner(); - void setOwner(IEntity owner); int getTargetEntityId(); @@ -28,27 +24,7 @@ public interface IEnergyProjectile extends IEntity { void setSize(float size); - // ==================== DISPLAY ==================== - - 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); + // ==================== DISPLAY (PROJECTILE-SPECIFIC) ==================== float getRotationSpeed(); @@ -64,24 +40,6 @@ public interface IEnergyProjectile extends IEntity { float getInterpolatedSize(float partialTicks); - // ==================== LIGHTNING ==================== - - boolean hasLightningEffect(); - - void setLightningEffect(boolean enabled); - - float getLightningDensity(); - - void setLightningDensity(float density); - - float getLightningRadius(); - - void setLightningRadius(float radius); - - int getLightningFadeTime(); - - void setLightningFadeTime(int ticks); - // ==================== LIFESPAN ==================== float getMaxDistance(); @@ -158,10 +116,6 @@ public interface IEnergyProjectile extends IEntity { boolean hasHit(); - boolean isCharging(); - - float getChargeProgress(); - /** * Returns the energy projectile sub-type. * 0=Orb, 1=Beam, 2=Disc, 3=Laser diff --git a/java/noppes/npcs/api/entity/IEnergySlicer.java b/java/noppes/npcs/api/entity/IEnergySlicer.java new file mode 100644 index 0000000..b3fec49 --- /dev/null +++ b/java/noppes/npcs/api/entity/IEnergySlicer.java @@ -0,0 +1,18 @@ +package noppes.npcs.api.entity; + +import net.minecraft.entity.Entity; + +/** + * Represents an energy slicer projectile - a thin, wide blade that slices through targets. + */ +public interface IEnergySlicer extends IEnergyProjectile { + + float getSliceWidth(); + void setSliceWidth(float width); + + float getSliceThickness(); + void setSliceThickness(float thickness); + + boolean isPiercing(); + void setPiercing(boolean piercing); +} diff --git a/java/noppes/npcs/api/event/IEnergyBarrierEvent.java b/java/noppes/npcs/api/event/IEnergyBarrierEvent.java new file mode 100644 index 0000000..3b7f602 --- /dev/null +++ b/java/noppes/npcs/api/event/IEnergyBarrierEvent.java @@ -0,0 +1,41 @@ +package noppes.npcs.api.event; + +import noppes.npcs.api.entity.IEnergyBarrier; +import noppes.npcs.api.entity.IEnergyProjectile; +import noppes.npcs.api.entity.IEntity; + +public interface IEnergyBarrierEvent extends ICustomNPCsEvent { + + IEnergyBarrier getBarrier(); + + IEntity getOwner(); + + /** + * @hookName energyBarrierSpawned + */ + interface SpawnedEvent extends IEnergyBarrierEvent { + } + + /** + * @hookName energyBarrierTick + */ + interface UpdateEvent extends IEnergyBarrierEvent { + } + + /** + * @hookName energyBarrierHit + */ + interface HitEvent extends IEnergyBarrierEvent { + IEnergyProjectile getProjectile(); + + float getDamage(); + + void setDamage(float damage); + } + + /** + * @hookName energyBarrierDestroyed + */ + interface DestroyedEvent extends IEnergyBarrierEvent { + } +}