mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-22 17:27:38 +00:00
With "queueing" enabled, FAWE may start attempting to place chunks before the operation is finished.
This is unnacceptable for recursive operations, thus the queue should be disable in these cases Fixes #842
This commit is contained in:
parent
fa8660c7a9
commit
ddb41a9669
@ -26,30 +26,25 @@ public abstract class CharBlocks implements IBlocks {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
protected static final Section EMPTY = new Section() {
|
||||
protected final Section EMPTY = new Section() {
|
||||
@Override
|
||||
public final char[] get(CharBlocks blocks, int layer) {
|
||||
blocks.loadLock.lock();
|
||||
try {
|
||||
char[] arr = blocks.blocks[layer];
|
||||
public final synchronized char[] get(CharBlocks blocks, int layer) {
|
||||
char[] arr = blocks.blocks[layer];
|
||||
if (arr == null) {
|
||||
arr = blocks.blocks[layer] = blocks.update(layer, null);
|
||||
if (arr == null) {
|
||||
arr = blocks.blocks[layer] = blocks.update(layer, null);
|
||||
if (arr == null) {
|
||||
throw new IllegalStateException("Array cannot be null: " + blocks.getClass());
|
||||
}
|
||||
} else {
|
||||
blocks.blocks[layer] = blocks.update(layer, arr);
|
||||
if (blocks.blocks[layer] == null) {
|
||||
throw new IllegalStateException("Array cannot be null (update): " + blocks.getClass());
|
||||
}
|
||||
throw new IllegalStateException("Array cannot be null: " + blocks.getClass());
|
||||
}
|
||||
if (blocks.blocks[layer] != null) {
|
||||
blocks.sections[layer] = FULL;
|
||||
} else {
|
||||
blocks.blocks[layer] = blocks.update(layer, arr);
|
||||
if (blocks.blocks[layer] == null) {
|
||||
throw new IllegalStateException("Array cannot be null (update): " + blocks.getClass());
|
||||
}
|
||||
return arr;
|
||||
} finally {
|
||||
blocks.loadLock.unlock();
|
||||
}
|
||||
if (blocks.blocks[layer] != null) {
|
||||
blocks.sections[layer] = FULL;
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -59,7 +54,6 @@ public abstract class CharBlocks implements IBlocks {
|
||||
};
|
||||
public final char[][] blocks;
|
||||
public final Section[] sections;
|
||||
private final ReentrantLock loadLock = new ReentrantLock ();
|
||||
|
||||
public CharBlocks() {
|
||||
blocks = new char[16][];
|
||||
|
@ -1179,6 +1179,10 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
|
||||
// Pick how we're going to visit blocks
|
||||
RecursiveVisitor visitor = new DirectionalVisitor(mask, replace, origin, direction, (int) (radius * 2 + 1));
|
||||
|
||||
// With queue enabled, FAWE may start attempting to place chunks before the operation is finished.
|
||||
// This is unnacceptable for recursive operations.
|
||||
disableQueue();
|
||||
|
||||
// Start at the origin
|
||||
visitor.visit(origin);
|
||||
|
||||
@ -1237,6 +1241,10 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
|
||||
visitor = new DownwardVisitor(mask, replace, origin.getBlockY(), (int) (radius * 2 + 1));
|
||||
}
|
||||
|
||||
// With queue enabled, FAWE may start attempting to place chunks before the operation is finished.
|
||||
// This is unnacceptable for recursive operations.
|
||||
disableQueue();
|
||||
|
||||
// Start at the origin
|
||||
visitor.visit(origin);
|
||||
|
||||
@ -1717,6 +1725,10 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
|
||||
}
|
||||
RecursiveVisitor visitor = new RecursiveVisitor(mask, replace, (int) (radius * 2 + 1));
|
||||
|
||||
// With queue enabled, FAWE may start attempting to place chunks before the operation is finished.
|
||||
// This is unnacceptable for recursive operations.
|
||||
disableQueue();
|
||||
|
||||
// Around the origin in a 3x3 block
|
||||
for (BlockVector3 position : CuboidRegion.fromCenter(origin, 1)) {
|
||||
if (mask.test(position)) {
|
||||
@ -1758,6 +1770,10 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
|
||||
BlockReplace replace = new BlockReplace(this, fluid.getDefaultState());
|
||||
NonRisingVisitor visitor = new NonRisingVisitor(mask, replace);
|
||||
|
||||
// With queue enabled, FAWE may start attempting to place chunks before the operation is finished.
|
||||
// This is unnacceptable for recursive operations.
|
||||
disableQueue();
|
||||
|
||||
// Around the origin in a 3x3 block
|
||||
for (BlockVector3 position : CuboidRegion.fromCenter(origin, 1)) {
|
||||
if (liquidMask.test(position)) {
|
||||
|
Loading…
Reference in New Issue
Block a user