From 28c0ca840f3d726c07b47aafa29d97b51a69a0cd Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 18 Feb 2026 04:00:07 -0500 Subject: [PATCH] IAbilityAction for Abilities and Chained Actions --- java/noppes/npcs/api/ability/IAbility.java | 2 +- .../npcs/api/ability/IAbilityAction.java | 25 ++++++++++++++ .../npcs/api/ability/IChainedAbility.java | 18 ++++++++++ .../npcs/api/handler/IAbilityHandler.java | 33 +++++++++++++++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 java/noppes/npcs/api/ability/IAbilityAction.java create mode 100644 java/noppes/npcs/api/ability/IChainedAbility.java diff --git a/java/noppes/npcs/api/ability/IAbility.java b/java/noppes/npcs/api/ability/IAbility.java index 7a178f5..bd43061 100644 --- a/java/noppes/npcs/api/ability/IAbility.java +++ b/java/noppes/npcs/api/ability/IAbility.java @@ -6,7 +6,7 @@ import noppes.npcs.api.INbt; * Interface for NPC abilities. * Abilities are special attacks or actions that NPCs can perform during combat. */ -public interface IAbility { +public interface IAbility extends IAbilityAction { /** * Get the unique ID (UUID for custom abilities, registry key for built-in). diff --git a/java/noppes/npcs/api/ability/IAbilityAction.java b/java/noppes/npcs/api/ability/IAbilityAction.java new file mode 100644 index 0000000..560b04e --- /dev/null +++ b/java/noppes/npcs/api/ability/IAbilityAction.java @@ -0,0 +1,25 @@ +package noppes.npcs.api.ability; + +/** + * Common API interface for all combat actions (abilities and chained abilities). + * Both {@link IAbility} and {@link IChainedAbility} extend this interface. + */ +public interface IAbilityAction { + + String getName(); + + boolean isEnabled(); + + int getWeight(); + + int getCooldownTicks(); + + float getMinRange(); + + float getMaxRange(); + + /** + * Whether this action is a chained ability (sequence) vs an individual ability. + */ + boolean isChain(); +} diff --git a/java/noppes/npcs/api/ability/IChainedAbility.java b/java/noppes/npcs/api/ability/IChainedAbility.java new file mode 100644 index 0000000..4d6e111 --- /dev/null +++ b/java/noppes/npcs/api/ability/IChainedAbility.java @@ -0,0 +1,18 @@ +package noppes.npcs.api.ability; + +/** + * API interface for chained abilities - ordered sequences of ability references + * that execute one after another with configurable delays. + */ +public interface IChainedAbility extends IAbilityAction { + + boolean isWindUpAll(); + + int getEntryCount(); + + String getEntryReference(int index); + + int getEntryDelay(int index); + + boolean isEntryInline(int index); +} diff --git a/java/noppes/npcs/api/handler/IAbilityHandler.java b/java/noppes/npcs/api/handler/IAbilityHandler.java index c7ccda5..2c51777 100644 --- a/java/noppes/npcs/api/handler/IAbilityHandler.java +++ b/java/noppes/npcs/api/handler/IAbilityHandler.java @@ -1,5 +1,7 @@ package noppes.npcs.api.handler; +import noppes.npcs.api.ability.IChainedAbility; + /** * Handler for ability management. Allows scripts to query ability types, * built-in abilities, and custom ability presets. @@ -44,4 +46,35 @@ public interface IAbilityHandler { * @return true if deleted successfully */ boolean deleteCustomAbilityByName(String name); + + /** + * Get all chained ability names. + */ + String[] getChainedAbilityNames(); + + /** + * Check if a chained ability exists by name. + */ + boolean hasChainedAbilityName(String name); + + /** + * Delete a chained ability by name. + * + * @return true if deleted successfully + */ + boolean deleteChainedAbilityByName(String name); + + /** + * Get a chained ability by name. + * + * @return the chained ability, or null if not found + */ + IChainedAbility getChainedAbility(String name); + + /** + * Save a chained ability. If a chain with the same name exists, it is overwritten. + * + * @return true if saved successfully + */ + boolean saveChainedAbility(IChainedAbility chain); }