mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 06:07:27 +00:00
Fix some concurrent mod issues
This commit is contained in:
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
|
||||
|
||||
Reference in new issue
Block a user