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 5ca7e86b5..72823cdb5 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -16,9 +16,8 @@ public class Action implements IAction { protected final ScriptedActionManager manager; protected final String name; protected int startAfterTicks; - protected int count; - protected int duration; - protected int maxDuration = -1; + protected int count, maxCount = -1; + protected int duration, maxDuration = -1; protected int updateEveryXTick = 5; protected Consumer task; protected boolean done; @@ -78,7 +77,7 @@ public class Action implements IAction { startAfterTicks--; return; } - if (maxDuration > -1 && duration >= maxDuration) { + if (maxDuration > -1 && duration >= maxDuration || maxCount == 0) { markDone(); return; } @@ -88,6 +87,12 @@ public class Action implements IAction { else executeTask(); } + + if (maxCount > -1 && count >= maxCount) { + markDone(); + return; + } + duration++; } @@ -105,7 +110,6 @@ public class Action implements IAction { t.printStackTrace(); markDone(); } - duration++; } @Override @@ -139,6 +143,23 @@ public class Action implements IAction { return this; } + @Override + public int getMaxCount() { + return maxCount; + } + + @Override + public IAction times(int x) { + this.maxCount = Math.max(-1, x); + return this; + } + + @Override + public IAction once() { + this.maxCount = 1; + return this; + } + @Override public void markDone() { done = true; @@ -181,12 +202,12 @@ public class Action implements IAction { } @Override - public int getUpdateEveryXTick() { + public int getUpdateEvery() { return updateEveryXTick; } @Override - public IAction setUpdateEveryXTick(int x) { + public IAction updateEvery(int x) { this.updateEveryXTick = Math.max(1, x); return this; } diff --git a/src/main/java/noppes/npcs/controllers/data/action/ConditionalAction.java b/src/main/java/noppes/npcs/controllers/data/action/ConditionalAction.java index c61b9cf6b..a578c0d12 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/ConditionalAction.java +++ b/src/main/java/noppes/npcs/controllers/data/action/ConditionalAction.java @@ -18,7 +18,7 @@ public class ConditionalAction extends Action implements IConditionalAction { private boolean taskExecuted; public ConditionalAction(ScriptedActionManager manager, Function condition, Consumer task) { - super(manager, "conditional", task); + super(manager, task); this.condition = condition; } @@ -52,7 +52,7 @@ public class ConditionalAction extends Action implements IConditionalAction { if (done) return; - if (maxChecks > -1 && checkCount > maxChecks) { + if (maxChecks > -1 && checkCount > maxChecks || maxCount == 0) { markDone(); return; } @@ -78,6 +78,12 @@ public class ConditionalAction extends Action implements IConditionalAction { checkCount++; } + + if (maxCount > -1 && count >= maxCount) { + markDone(); + return; + } + duration++; }