Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 06:50:09 +01:00
Use chunk version 9 (#4040)
Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
Dieser Commit ist enthalten in:
Ursprung
2361f587da
Commit
941275586d
@ -30,16 +30,19 @@ import org.cloudburstmc.protocol.common.util.Preconditions;
|
||||
|
||||
public class GeyserChunkSection {
|
||||
|
||||
private static final int CHUNK_SECTION_VERSION = 8;
|
||||
// As of at least 1.19.80
|
||||
private static final int CHUNK_SECTION_VERSION = 9;
|
||||
|
||||
private final BlockStorage[] storage;
|
||||
private final int sectionY;
|
||||
|
||||
public GeyserChunkSection(int airBlockId) {
|
||||
this(new BlockStorage[]{new BlockStorage(airBlockId), new BlockStorage(airBlockId)});
|
||||
public GeyserChunkSection(int airBlockId, int sectionY) {
|
||||
this(new BlockStorage[]{new BlockStorage(airBlockId), new BlockStorage(airBlockId)}, sectionY);
|
||||
}
|
||||
|
||||
public GeyserChunkSection(BlockStorage[] storage) {
|
||||
public GeyserChunkSection(BlockStorage[] storage, int sectionY) {
|
||||
this.storage = storage;
|
||||
this.sectionY = sectionY;
|
||||
}
|
||||
|
||||
public int getFullBlock(int x, int y, int z, int layer) {
|
||||
@ -57,6 +60,8 @@ public class GeyserChunkSection {
|
||||
public void writeToNetwork(ByteBuf buffer) {
|
||||
buffer.writeByte(CHUNK_SECTION_VERSION);
|
||||
buffer.writeByte(this.storage.length);
|
||||
// Required for chunk version 9+
|
||||
buffer.writeByte(this.sectionY);
|
||||
for (BlockStorage blockStorage : this.storage) {
|
||||
blockStorage.writeToNetwork(buffer);
|
||||
}
|
||||
@ -83,12 +88,12 @@ public class GeyserChunkSection {
|
||||
return true;
|
||||
}
|
||||
|
||||
public GeyserChunkSection copy() {
|
||||
public GeyserChunkSection copy(int sectionY) {
|
||||
BlockStorage[] storage = new BlockStorage[this.storage.length];
|
||||
for (int i = 0; i < storage.length; i++) {
|
||||
storage[i] = this.storage[i].copy();
|
||||
}
|
||||
return new GeyserChunkSection(storage);
|
||||
return new GeyserChunkSection(storage, sectionY);
|
||||
}
|
||||
|
||||
public static int blockPosition(int x, int y, int z) {
|
||||
|
@ -132,7 +132,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator<Clientbo
|
||||
|
||||
if (javaPalette instanceof GlobalPalette) {
|
||||
// As this is the global palette, simply iterate through the whole chunk section once
|
||||
GeyserChunkSection section = new GeyserChunkSection(session.getBlockMappings().getBedrockAir().getRuntimeId());
|
||||
GeyserChunkSection section = new GeyserChunkSection(session.getBlockMappings().getBedrockAir().getRuntimeId(), bedrockSectionY);
|
||||
for (int yzx = 0; yzx < BlockStorage.SIZE; yzx++) {
|
||||
int javaId = javaData.get(yzx);
|
||||
int bedrockId = session.getBlockMappings().getBedrockBlockId(javaId);
|
||||
@ -163,9 +163,9 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator<Clientbo
|
||||
|
||||
if (BlockRegistries.WATERLOGGED.get().get(javaId)) {
|
||||
BlockStorage waterlogged = new BlockStorage(SingletonBitArray.INSTANCE, IntLists.singleton(session.getBlockMappings().getBedrockWater().getRuntimeId()));
|
||||
sections[bedrockSectionY] = new GeyserChunkSection(new BlockStorage[] {blockStorage, waterlogged});
|
||||
sections[bedrockSectionY] = new GeyserChunkSection(new BlockStorage[] {blockStorage, waterlogged}, bedrockSectionY);
|
||||
} else {
|
||||
sections[bedrockSectionY] = new GeyserChunkSection(new BlockStorage[] {blockStorage});
|
||||
sections[bedrockSectionY] = new GeyserChunkSection(new BlockStorage[] {blockStorage}, bedrockSectionY);
|
||||
}
|
||||
// If a chunk contains all of the same piston or flower pot then god help us
|
||||
continue;
|
||||
@ -240,7 +240,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator<Clientbo
|
||||
layers = new BlockStorage[]{ layer0, new BlockStorage(BitArrayVersion.V1.createArray(BlockStorage.SIZE, layer1Data), layer1Palette) };
|
||||
}
|
||||
|
||||
sections[bedrockSectionY] = new GeyserChunkSection(layers);
|
||||
sections[bedrockSectionY] = new GeyserChunkSection(layers, bedrockSectionY);
|
||||
}
|
||||
|
||||
if (!session.getErosionHandler().isActive()) {
|
||||
|
@ -62,7 +62,7 @@ public class ChunkUtils {
|
||||
static {
|
||||
ByteBuf byteBuf = Unpooled.buffer();
|
||||
try {
|
||||
new GeyserChunkSection(new BlockStorage[0])
|
||||
new GeyserChunkSection(new BlockStorage[0], 0)
|
||||
.writeToNetwork(byteBuf);
|
||||
SERIALIZED_CHUNK_DATA = new byte[byteBuf.readableBytes()];
|
||||
byteBuf.readBytes(SERIALIZED_CHUNK_DATA);
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren