mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-14 20:21:53 +01:00
Added Chunk#getLastChangeTime
This commit is contained in:
parent
02eab844a5
commit
e453a0f9b5
@ -191,6 +191,17 @@ public abstract class Chunk implements Viewable, DataContainer {
|
||||
@NotNull
|
||||
public abstract Set<Integer> getBlockEntities();
|
||||
|
||||
/**
|
||||
* Gets the last time that this chunk changed.
|
||||
* <p>
|
||||
* "Change" means here data used in {@link ChunkDataPacket}.
|
||||
* It is necessary to see if the cached version of this chunk can be used
|
||||
* instead of re writing and compressing everything.
|
||||
*
|
||||
* @return the last change time in milliseconds
|
||||
*/
|
||||
public abstract long getLastChangeTime();
|
||||
|
||||
/**
|
||||
* Serializes the chunk into bytes.
|
||||
*
|
||||
|
@ -57,6 +57,8 @@ public class DynamicChunk extends Chunk {
|
||||
// Block entities
|
||||
protected final Set<Integer> blockEntities = new CopyOnWriteArraySet<>();
|
||||
|
||||
private long lastChangeTime;
|
||||
|
||||
public DynamicChunk(@Nullable Biome[] biomes, int chunkX, int chunkZ,
|
||||
@NotNull PaletteStorage blockPalette, @NotNull PaletteStorage customBlockPalette) {
|
||||
super(biomes, chunkX, chunkZ, true);
|
||||
@ -86,8 +88,8 @@ public class DynamicChunk extends Chunk {
|
||||
// True if the block is not complete air without any custom block capabilities
|
||||
final boolean hasBlock = blockStateId != 0 || customBlockId != 0;
|
||||
|
||||
this.blockPalette.setBlockAt(x, y, z, blockStateId);
|
||||
this.customBlockPalette.setBlockAt(x, y, z, customBlockId);
|
||||
setBlockAt(blockPalette, x, y, z, blockStateId);
|
||||
setBlockAt(customBlockPalette, x, y, z, customBlockId);
|
||||
|
||||
if (!hasBlock) {
|
||||
// Block has been deleted, clear cache and return
|
||||
@ -155,23 +157,23 @@ public class DynamicChunk extends Chunk {
|
||||
|
||||
@Override
|
||||
public short getBlockStateId(int x, int y, int z) {
|
||||
return this.blockPalette.getBlockAt(x, y, z);
|
||||
return getBlockAt(blockPalette, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public short getCustomBlockId(int x, int y, int z) {
|
||||
return customBlockPalette.getBlockAt(x, y, z);
|
||||
return getBlockAt(customBlockPalette, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void refreshBlockValue(int x, int y, int z, short blockStateId, short customBlockId) {
|
||||
this.blockPalette.setBlockAt(x, y, z, blockStateId);
|
||||
this.customBlockPalette.setBlockAt(x, y, z, customBlockId);
|
||||
setBlockAt(blockPalette, x, y, z, blockStateId);
|
||||
setBlockAt(customBlockPalette, x, y, z, customBlockId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void refreshBlockStateId(int x, int y, int z, short blockStateId) {
|
||||
this.blockPalette.setBlockAt(x, y, z, blockStateId);
|
||||
setBlockAt(blockPalette, x, y, z, blockStateId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -195,6 +197,11 @@ public class DynamicChunk extends Chunk {
|
||||
return blockEntities;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastChangeTime() {
|
||||
return lastChangeTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize this {@link Chunk} based on {@link #readChunk(BinaryReader, ChunkCallback)}
|
||||
* <p>
|
||||
@ -242,8 +249,8 @@ public class DynamicChunk extends Chunk {
|
||||
for (byte z = 0; z < CHUNK_SIZE_Z; z++) {
|
||||
final int index = getBlockIndex(x, y, z);
|
||||
|
||||
final short blockStateId = blockPalette.getBlockAt(x, y, z);
|
||||
final short customBlockId = customBlockPalette.getBlockAt(x, y, z);
|
||||
final short blockStateId = getBlockAt(blockPalette, x, y, z);
|
||||
final short customBlockId = getBlockAt(customBlockPalette, x, y, z);
|
||||
|
||||
// No block at the position
|
||||
if (blockStateId == 0 && customBlockId == 0)
|
||||
@ -400,4 +407,13 @@ public class DynamicChunk extends Chunk {
|
||||
|
||||
return dynamicChunk;
|
||||
}
|
||||
|
||||
private short getBlockAt(@NotNull PaletteStorage paletteStorage, int x, int y, int z) {
|
||||
return paletteStorage.getBlockAt(x, y, z);
|
||||
}
|
||||
|
||||
private void setBlockAt(@NotNull PaletteStorage paletteStorage, int x, int y, int z, short blockId) {
|
||||
paletteStorage.setBlockAt(x, y, z, blockId);
|
||||
this.lastChangeTime = System.currentTimeMillis();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user