Files
2026-03-09 16:20:07 -04:00

90 lines
2.4 KiB
Java

package noppes.npcs.api.event;
import noppes.npcs.api.IDamageSource;
import noppes.npcs.api.ability.IChainedAbility;
import noppes.npcs.api.entity.ICustomNpc;
import noppes.npcs.api.entity.IEntityLivingBase;
import noppes.npcs.api.entity.IPlayer;
/**
* Events related to chained ability execution lifecycle.
* These fire at chain-level transitions, not per-ability.
* Unified for both NPCs and Players.
*/
public interface IChainEvent extends ICustomNPCsEvent {
/**
* Get the entity executing the chain (NPC or Player).
* @return the entity executing the chain
*/
IEntityLivingBase getEntity();
/**
* Get the player executing the chain, or null if the caster is an NPC.
* @return the player executing the chain, or null if NPC
*/
IPlayer getPlayer();
/**
* Get the NPC executing the chain, or null if the caster is a player.
* @return the NPC executing the chain, or null if player
*/
ICustomNpc<?> getNpc();
/**
* Whether the entity executing the chain is an NPC.
* @return true if the executor is an NPC
*/
boolean isNPC();
/**
* Get the chained ability being executed.
* @return the chained ability being executed
*/
IChainedAbility getChain();
/**
* Get the target of the chain, or null if no target.
* @return the current target entity
*/
IEntityLivingBase getTarget();
/**
* Get the current entry index within the chain (0-based).
* @return the current entry index in the chain
*/
int getEntryIndex();
/**
* Fired when a chained ability sequence starts executing.
*/
interface StartEvent extends IChainEvent {}
/**
* Fired when the chain advances to the next entry in the sequence.
*/
interface NextEvent extends IChainEvent {}
/**
* Fired when a chained ability sequence completes all entries.
*/
interface CompleteEvent extends IChainEvent {}
/**
* Fired when a chained ability is interrupted by damage.
*/
interface InterruptEvent extends IChainEvent {
/**
* Get the damage source that caused the interruption.
* @return the damage source used for this hit
*/
IDamageSource getDamageSource();
/**
* Get the amount of damage that caused the interruption.
* @return the damage amount
*/
float getDamage();
}
}