Fix some concurrent mod issues

This commit is contained in:
Kam committed 2025-05-19 22:07:57 -04:00
1 parent 871748a27c
commit 15efdc06c5
3 files changed
+37 -17

No files matched your search

@@ -163,6 +163,4 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData {
hasChanges = false;
}
}
}
@@ -163,16 +163,28 @@ public class Action implements IAction {
@Override
public IAction getNext() {
int idx = manager.getIndex(this);
LinkedList<IAction> list = (LinkedList<IAction>) 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<IAction> list = (LinkedList<IAction>) 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
@@ -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<IAction> actionQueue = new LinkedList<>();
private final List<IAction> parallelActions = new LinkedList<>();
private final List<IConditionalAction> conditionalActions = new LinkedList<>();
private final Deque<IAction> actionQueue = new ConcurrentLinkedDeque<>();
private final Deque<IAction> parallelActions = new ConcurrentLinkedDeque<>();
private final Deque<IConditionalAction> 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<IAction>) actionQueue).add(index, action);
List<IAction> 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<IAction>) 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<IConditionalAction> getConditionalActions() {
return conditionalActions;
return new ArrayList<>(conditionalActions);
}
@Override