From 5e48063311e1357bb333ea7682980580d433736e Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Sun, 6 Jul 2025 10:56:29 +0300 Subject: [PATCH] Added print debugging dump methods for most IAction framework components --- .../npcs/controllers/data/action/Action.java | 23 +++++++++++-- .../data/action/ActionManager.java | 32 +++++++++++++++++-- .../controllers/data/action/ActionQueue.java | 28 +++++++++++++--- .../data/action/action/ConditionalAction.java | 20 ++++++++++++ 4 files changed, 92 insertions(+), 11 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/data/action/Action.java b/src/main/java/noppes/npcs/controllers/data/action/Action.java index 02ca835df..de48ac9f0 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -8,9 +8,7 @@ import noppes.npcs.controllers.ScriptContainer; import noppes.npcs.scripted.CustomNPCsException; import org.apache.commons.lang3.exception.ExceptionUtils; -import java.util.Deque; import java.util.HashMap; -import java.util.LinkedList; import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; @@ -43,7 +41,7 @@ public class Action implements IAction { } public Action(ActionManager manager, Consumer task) { - this(manager, task.toString(), task); + this(manager, Integer.toHexString(task.hashCode()), task); } public Action(ActionManager manager, String name, Consumer task) { @@ -194,6 +192,22 @@ public class Action implements IAction { return this; } + @Override + public String printData() { + if (dataStore.isEmpty()) { + return String.format("Action[name=%s] dataStore is empty", name); + } + + StringBuilder sb = new StringBuilder(); + sb.append(String.format("Action[name=%s] dataStore contents:\n", name)); + + for (Map.Entry entry : dataStore.entrySet()) { + sb.append(String.format(" %s = %s\n", entry.getKey(), entry.getValue())); + } + + return sb.toString(); + } + @Override public boolean hasData(String key) { return dataStore.containsKey(key); @@ -272,6 +286,9 @@ public class Action implements IAction { done = true; } + public String toString() { + return String.format("Action '%s' [queue='%s', scheduled=%s, done=%s, paused=%s, updateEvery=%s, duration=%d/%d, count=%d/%d, threaded=%s]", name != null ? name : "unnamed", queue != null ? queue.getName() : "null", isScheduled, done, isPaused(), updateEveryXTick, duration, maxDuration, count, maxCount, isThreaded); + } /////////////////////////////////////////////////// ////////////////////////////////////////////////// // Thread diff --git a/src/main/java/noppes/npcs/controllers/data/action/ActionManager.java b/src/main/java/noppes/npcs/controllers/data/action/ActionManager.java index 01f4edd32..95bbeb0de 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/ActionManager.java +++ b/src/main/java/noppes/npcs/controllers/data/action/ActionManager.java @@ -7,9 +7,7 @@ import noppes.npcs.api.handler.data.IActionQueue; import noppes.npcs.api.handler.data.actions.IConditionalAction; import noppes.npcs.controllers.data.action.action.ConditionalAction; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import java.util.*; import java.util.function.Consumer; import java.util.function.Function; @@ -329,6 +327,18 @@ public class ActionManager implements IActionManager { /////////////////////////////////////////////////// // Handling + @Override + public IActionQueue[] getAllQueues() { + ArrayList allQueues = new ArrayList<>(); + + allQueues.add(sequentialQueue); + allQueues.add(parallelQueue); + allQueues.add(conditionalQueue); + + allQueues.addAll(otherQueues.values()); + + return allQueues.toArray(new IActionQueue[0]); + } @Override public boolean hasAny(String name) { return getAny(name) != null; @@ -423,4 +433,20 @@ public class ActionManager implements IActionManager { public IActionChain parallelChain() { return parallelQueue.chain(); } + + @Override + public String printQueues() { + + StringBuilder sb = new StringBuilder(); + sb.append(String.format("ActionManager [working=%s]\n", isWorking)); + + + int i = 0; + for (IActionQueue action : getAllQueues()) { + sb.append(String.format(" [%d] %s\n", i++, action.toString())); + } + + return sb.toString(); + } + } diff --git a/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java b/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java index d611a70fd..d76bfdcb0 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java +++ b/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java @@ -111,11 +111,6 @@ public class ActionQueue implements IActionQueue { public IAction schedule(IAction action) { Action act = (Action) action; - if (act.queue != this) - act.setQueue(this); - - act.isScheduled = true; - if (!isParallel && act.unscheduledList != null) { act.unscheduledList.scheduleAll(this).forEach((act1) -> act1.unscheduledList = null).kill(); return action; @@ -123,6 +118,8 @@ public class ActionQueue implements IActionQueue { queue.addLast(action); + act.queue = this; + act.isScheduled = true; return action; } @@ -319,4 +316,25 @@ public class ActionQueue implements IActionQueue { return new ActionChain(manager, this, isParallel ? "parallel#" : "sequential#"); } + @Override + public String printQueue() { + if (queue.isEmpty()) { + return String.format("ActionQueue[name=%s] is empty", name); + } + + StringBuilder sb = new StringBuilder(); + sb.append(String.format("%s\n", this)); + + int i = 0; + for (IAction action : queue) { + sb.append(String.format(" [%d] %s\n", i++, action.toString())); + } + + return sb.toString(); + } + + public String toString() { + return String.format("ActionQueue '%s' [size=%d, parallel=%s, working=%s, dead=%s, killWhenEmpty=%s, killAfter=%d]", name, queue.size(), isParallel, isWorking, isDead, killWhenEmpty, killWhenEmptyAfter); + } + } diff --git a/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java b/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java index 845f09c54..7d3d695a3 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java +++ b/src/main/java/noppes/npcs/controllers/data/action/action/ConditionalAction.java @@ -159,4 +159,24 @@ public class ConditionalAction extends Action implements IConditionalAction { } } + + public String toString() { + return String.format( + "ConditionalAction '%s' [queue='%s', scheduled=%s, done=%s, paused=%s, updateEvery=%s, duration=%d/%d, count=%d/%d, checks=%d/%d, taskExecuted=%s, threaded=%s]", + name != null ? name : "unnamed", + queue != null ? queue.getName() : "null", + isScheduled, + done, + isPaused(), + updateEveryXTick, + duration, + maxDuration, + count, + maxCount, + checkCount, + maxChecks, + taskExecuted, + isThreaded + ); + } }