mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 01:37:37 +00:00
Return to static "sections" in CharBlocks.
- Synchronise (lock) outside the static object - Reduces object creation
This commit is contained in:
parent
aece0229c4
commit
7c174ee6b3
@ -9,13 +9,13 @@ import org.jetbrains.annotations.Range;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
public abstract class CharBlocks implements IBlocks {
|
||||
|
||||
public static final Logger logger = LoggerFactory.getLogger(CharBlocks.class);
|
||||
|
||||
protected final Section FULL = new Section() {
|
||||
protected static final Section FULL = new Section() {
|
||||
@Override
|
||||
public final char[] get(CharBlocks blocks, int layer) {
|
||||
return blocks.blocks[layer];
|
||||
@ -26,9 +26,11 @@ public abstract class CharBlocks implements IBlocks {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
protected final Section EMPTY = new Section() {
|
||||
protected static final Section EMPTY = new Section() {
|
||||
@Override
|
||||
public final synchronized char[] get(CharBlocks blocks, int layer) {
|
||||
public final char[] get(CharBlocks blocks, int layer) {
|
||||
blocks.loadLock.lock();
|
||||
try {
|
||||
char[] arr = blocks.blocks[layer];
|
||||
if (arr == null) {
|
||||
arr = blocks.blocks[layer] = blocks.update(layer, null);
|
||||
@ -45,6 +47,9 @@ public abstract class CharBlocks implements IBlocks {
|
||||
blocks.sections[layer] = FULL;
|
||||
}
|
||||
return arr;
|
||||
} finally {
|
||||
blocks.loadLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -54,7 +59,7 @@ public abstract class CharBlocks implements IBlocks {
|
||||
};
|
||||
public final char[][] blocks;
|
||||
public final Section[] sections;
|
||||
private final Object loadLock = new Object();
|
||||
private final ReentrantLock loadLock = new ReentrantLock ();
|
||||
|
||||
public CharBlocks() {
|
||||
blocks = new char[16][];
|
||||
@ -117,14 +122,8 @@ public abstract class CharBlocks implements IBlocks {
|
||||
|
||||
@Override
|
||||
public char[] load(@Range(from = 0, to = 15) int layer) {
|
||||
Section section = sections[layer];
|
||||
if (section.isFull()) {
|
||||
return section.get(this, layer);
|
||||
}
|
||||
synchronized (loadLock) {
|
||||
return sections[layer].get(this, layer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getBlock(int x, int y, int z) {
|
||||
|
Loading…
Reference in New Issue
Block a user