mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-22 17:27:38 +00:00
Synchronise access to the PriorityQueue used for effect queuing in AbstractWorld
- Makes it thread-safe
This commit is contained in:
parent
0ccae19ded
commit
d3696f91d4
@ -111,14 +111,18 @@ public abstract class AbstractWorld implements World {
|
||||
public boolean queueBlockBreakEffect(Platform server, BlockVector3 position, BlockType blockType, double priority) {
|
||||
if (taskId == -1) {
|
||||
taskId = server.schedule(0, 1, () -> {
|
||||
int max = Math.max(1, Math.min(30, effectQueue.size() / 3));
|
||||
for (int i = 0; i < max; ++i) {
|
||||
if (effectQueue.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
//FAWE start - access to PriorityQueue is not thread-safe
|
||||
synchronized (effectQueue) {
|
||||
int max = Math.max(1, Math.min(30, effectQueue.size() / 3));
|
||||
for (int i = 0; i < max; ++i) {
|
||||
if (effectQueue.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
effectQueue.poll().play();
|
||||
effectQueue.poll().play();
|
||||
}
|
||||
}
|
||||
//FAWE end
|
||||
});
|
||||
}
|
||||
|
||||
@ -126,7 +130,11 @@ public abstract class AbstractWorld implements World {
|
||||
return false;
|
||||
}
|
||||
|
||||
effectQueue.offer(new QueuedEffect(position.toVector3(), blockType, priority));
|
||||
//FAWE start - access to PriorityQueue is not thread-safe
|
||||
synchronized (effectQueue) {
|
||||
effectQueue.offer(new QueuedEffect(position.toVector3(), blockType, priority));
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user