diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java index 89439bc0c..04cce9dc3 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java @@ -163,6 +163,4 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData { hasChanges = false; } } - - } 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 fc237d6b1..0ff50dbee 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -163,16 +163,28 @@ public class Action implements IAction { @Override public IAction getNext() { - int idx = manager.getIndex(this); - LinkedList list = (LinkedList) manager.getActionQueue(); - return (idx >= 0 && idx + 1 < list.size()) ? list.get(idx + 1) : null; + boolean seenMe = false; + for (IAction a : manager.getActionQueue()) { + if (seenMe) { + return a; + } + if (a == this) { + seenMe = true; + } + } + return null; } @Override public IAction getPrevious() { - int idx = manager.getIndex(this); - LinkedList list = (LinkedList) manager.getActionQueue(); - return (idx > 0) ? list.get(idx - 1) : null; + IAction prev = null; + for (IAction a : manager.getActionQueue()) { + if (a == this) { + return prev; + } + prev = a; + } + return null; } @Override diff --git a/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java b/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java index 33ff81283..9d62fffac 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java +++ b/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java @@ -10,6 +10,7 @@ import noppes.npcs.controllers.data.action.ConditionalAction; import noppes.npcs.controllers.data.action.ParallelActionChain; import java.util.*; +import java.util.concurrent.ConcurrentLinkedDeque; import java.util.function.Consumer; import java.util.function.Supplier; @@ -24,9 +25,9 @@ import java.util.function.Supplier; public class ScriptedActionManager implements IActionManager { private boolean isWorking = false; - private final Deque actionQueue = new LinkedList<>(); - private final List parallelActions = new LinkedList<>(); - private final List conditionalActions = new LinkedList<>(); + private final Deque actionQueue = new ConcurrentLinkedDeque<>(); + private final Deque parallelActions = new ConcurrentLinkedDeque<>(); + private final Deque conditionalActions = new ConcurrentLinkedDeque<>(); @Override public IAction create(String name) { @@ -111,19 +112,28 @@ public class ScriptedActionManager implements IActionManager { @Override public IAction scheduleActionAt(int index, IAction action) { - if (index < 0 || index > actionQueue.size()) { + int size = actionQueue.size(); + if (index <= 0) { + actionQueue.addFirst(action); + } else if (index >= size) { actionQueue.addLast(action); } else { - ((LinkedList) actionQueue).add(index, action); + List tmp = new ArrayList<>(actionQueue); + tmp.add(index, action); + actionQueue.clear(); + actionQueue.addAll(tmp); } - return action; } @Override public int getIndex(IAction action) { - if (action == null) return -1; - return ((LinkedList) actionQueue).indexOf(action); + int i = 0; + for (IAction a : actionQueue) { + if (a.equals(action)) return i; + i++; + } + return -1; } @Override @@ -200,7 +210,7 @@ public class ScriptedActionManager implements IActionManager { @Override public List getConditionalActions() { - return conditionalActions; + return new ArrayList<>(conditionalActions); } @Override