From a6665b1de8cc9be79ec0e7dcdb2865260931677d Mon Sep 17 00:00:00 2001 From: Kam Date: Sun, 27 Apr 2025 23:10:55 -0400 Subject: [PATCH] Add a chain builder to action manager --- src/api | 2 +- .../npcs/scripted/ScriptedActionManager.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/api b/src/api index 581cf4268..c3e21bf8c 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 581cf4268b0af6a1e6cbb60ccac343cfced8ca13 +Subproject commit c3e21bf8c215e603eb0a2d995ab9f67dd79c31a7 diff --git a/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java b/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java index 804fb081d..3c363b746 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java +++ b/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java @@ -2,6 +2,7 @@ package noppes.npcs.scripted; import noppes.npcs.api.handler.IActionManager; import noppes.npcs.api.handler.data.IAction; +import noppes.npcs.api.handler.data.IActionChain; import java.util.Deque; import java.util.LinkedList; @@ -126,6 +127,30 @@ public class ScriptedActionManager implements IActionManager { } } + @Override + public IActionChain chain() { + return new ActionChain(this); + } + + /** helper to build a back‐to‐back chain of one‐shot actions */ + public static class ActionChain implements IActionChain { + private final IActionManager mgr; + private int offset = 0, index = 0; + + private ActionChain(IActionManager mgr) { + this.mgr = mgr; + } + + /** schedule the next task ‘delay’ ticks after the previous one */ + @Override + public IActionChain after(int delay, Consumer task) { + offset += delay; + IAction a = mgr.create("chain#" + (index++), 1, offset, task); + mgr.scheduleAction(a); + return this; + } + } + // ──── base class for all custom actions ────────────────────────────────── private abstract class ActionBase implements IAction {