mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-02 14:38:26 +01:00
Merge pull request #299 from Uraxys/chunk-block-count
Send the real amount of blocks in a chunk section.
This commit is contained in:
commit
d871cb2c9c
@ -53,6 +53,8 @@ public class Section implements PublicCloneable<Section> {
|
||||
private int valuesPerLong;
|
||||
private boolean hasPalette;
|
||||
|
||||
private short blockCount = 0;
|
||||
|
||||
protected Section(int bitsPerEntry, int bitsIncrement) {
|
||||
this.bitsPerEntry = bitsPerEntry;
|
||||
this.bitsIncrement = bitsIncrement;
|
||||
@ -74,6 +76,9 @@ public class Section implements PublicCloneable<Section> {
|
||||
blocks = new long[getSize(valuesPerLong)];
|
||||
}
|
||||
|
||||
// Check if the new block is air, used for counting none air blocks.
|
||||
final boolean isAir = Block.fromStateId(blockId).isAir();
|
||||
|
||||
// Change to palette value
|
||||
blockId = getPaletteIndex(blockId);
|
||||
|
||||
@ -87,10 +92,20 @@ public class Section implements PublicCloneable<Section> {
|
||||
{
|
||||
final long clear = MAGIC_MASKS[bitsPerEntry];
|
||||
|
||||
final long value = block >> bitIndex & clear;
|
||||
final boolean isCurrentAir = Block.fromStateId(
|
||||
hasPalette ? paletteBlockMap.get((short) value) : (short) value).isAir();
|
||||
|
||||
block |= clear << bitIndex;
|
||||
block ^= clear << bitIndex;
|
||||
block |= (long) blockId << bitIndex;
|
||||
|
||||
if (!isCurrentAir && isAir) { // The old block isn't air & the new block is.
|
||||
this.blockCount--;
|
||||
} else if (isCurrentAir && !isAir) { // The old block is air & the new block isn't.
|
||||
this.blockCount++;
|
||||
} // If both block are air or not air then don't change the value.
|
||||
|
||||
blocks[index] = block;
|
||||
}
|
||||
}
|
||||
@ -143,6 +158,7 @@ public class Section implements PublicCloneable<Section> {
|
||||
this.hasPalette = section.hasPalette;
|
||||
|
||||
this.blocks = section.blocks;
|
||||
this.blockCount = section.blockCount;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -171,12 +187,22 @@ public class Section implements PublicCloneable<Section> {
|
||||
this.blocks = new long[0];
|
||||
this.paletteBlockMap = createPaletteBlockMap();
|
||||
this.blockPaletteMap = createBlockPaletteMap();
|
||||
this.blockCount = 0;
|
||||
}
|
||||
|
||||
public long[] getBlocks() {
|
||||
return blocks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of non air blocks in this section.
|
||||
*
|
||||
* @return The amount of blocks in this section.
|
||||
*/
|
||||
public short getBlockCount() {
|
||||
return blockCount;
|
||||
}
|
||||
|
||||
public Short2ShortLinkedOpenHashMap getPaletteBlockMap() {
|
||||
return paletteBlockMap;
|
||||
}
|
||||
@ -288,6 +314,7 @@ public class Section implements PublicCloneable<Section> {
|
||||
section.blocks = blocks.clone();
|
||||
section.paletteBlockMap = paletteBlockMap.clone();
|
||||
section.blockPaletteMap = blockPaletteMap.clone();
|
||||
section.blockCount = blockCount;
|
||||
return section;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
MinecraftServer.getExceptionManager().handleException(e);
|
||||
|
@ -118,16 +118,11 @@ public final class Utils {
|
||||
}
|
||||
|
||||
public static void writeSectionBlocks(ByteBuf buffer, Section section) {
|
||||
/*short count = 0;
|
||||
for (short id : blocksId)
|
||||
if (id != 0)
|
||||
count++;*/
|
||||
|
||||
final short blockCount = section.getBlockCount();
|
||||
final int bitsPerEntry = section.getBitsPerEntry();
|
||||
|
||||
//buffer.writeShort(count);
|
||||
// TODO count blocks
|
||||
buffer.writeShort(200);
|
||||
buffer.writeShort(blockCount);
|
||||
buffer.writeByte((byte) bitsPerEntry);
|
||||
|
||||
// Palette
|
||||
|
Loading…
Reference in New Issue
Block a user