Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-27 08:30:09 +01:00
Implement size var int in all chunk types correctly (#3495)
Dieser Commit ist enthalten in:
Ursprung
2c6e18e4fe
Commit
0f030c86a7
@ -85,15 +85,6 @@ public class ChunkType1_13 extends Type<Chunk> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, nbtData);
|
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,16 +50,15 @@ public class ChunkType1_14 extends Type<Chunk> {
|
|||||||
boolean fullChunk = input.readBoolean();
|
boolean fullChunk = input.readBoolean();
|
||||||
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
|
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
|
||||||
CompoundTag heightMap = Type.NAMED_COMPOUND_TAG.read(input);
|
CompoundTag heightMap = Type.NAMED_COMPOUND_TAG.read(input);
|
||||||
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
Type.VAR_INT.readPrimitive(input);
|
|
||||||
|
|
||||||
// Read sections
|
// Read sections
|
||||||
ChunkSection[] sections = new ChunkSection[16];
|
ChunkSection[] sections = new ChunkSection[16];
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
||||||
|
|
||||||
short nonAirBlocksCount = input.readShort();
|
short nonAirBlocksCount = data.readShort();
|
||||||
ChunkSection section = Types1_13.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_13.CHUNK_SECTION.read(data);
|
||||||
section.setNonAirBlocksCount(nonAirBlocksCount);
|
section.setNonAirBlocksCount(nonAirBlocksCount);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
}
|
}
|
||||||
@ -67,20 +66,11 @@ public class ChunkType1_14 extends Type<Chunk> {
|
|||||||
int[] biomeData = fullChunk ? new int[256] : null;
|
int[] biomeData = fullChunk ? new int[256] : null;
|
||||||
if (fullChunk) {
|
if (fullChunk) {
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
biomeData[i] = input.readInt();
|
biomeData[i] = data.readInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,29 +58,20 @@ public class ChunkType1_15 extends Type<Chunk> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Type.VAR_INT.readPrimitive(input); // data size in bytes
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
|
|
||||||
// Read sections
|
// Read sections
|
||||||
ChunkSection[] sections = new ChunkSection[16];
|
ChunkSection[] sections = new ChunkSection[16];
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
||||||
|
|
||||||
short nonAirBlocksCount = input.readShort();
|
short nonAirBlocksCount = data.readShort();
|
||||||
ChunkSection section = Types1_13.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_13.CHUNK_SECTION.read(data);
|
||||||
section.setNonAirBlocksCount(nonAirBlocksCount);
|
section.setNonAirBlocksCount(nonAirBlocksCount);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,29 +59,20 @@ public class ChunkType1_16 extends Type<Chunk> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Type.VAR_INT.readPrimitive(input); // data size in bytes
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
|
|
||||||
// Read sections
|
// Read sections
|
||||||
ChunkSection[] sections = new ChunkSection[16];
|
ChunkSection[] sections = new ChunkSection[16];
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
||||||
|
|
||||||
short nonAirBlocksCount = input.readShort();
|
short nonAirBlocksCount = data.readShort();
|
||||||
ChunkSection section = Types1_16.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_16.CHUNK_SECTION.read(data);
|
||||||
section.setNonAirBlocksCount(nonAirBlocksCount);
|
section.setNonAirBlocksCount(nonAirBlocksCount);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, fullChunk, ignoreOldLightData, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
return new BaseChunk(chunkX, chunkZ, fullChunk, ignoreOldLightData, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,29 +56,20 @@ public class ChunkType1_16_2 extends Type<Chunk> {
|
|||||||
biomeData = Type.VAR_INT_ARRAY_PRIMITIVE.read(input);
|
biomeData = Type.VAR_INT_ARRAY_PRIMITIVE.read(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
Type.VAR_INT.readPrimitive(input); // data size in bytes
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
|
|
||||||
// Read sections
|
// Read sections
|
||||||
ChunkSection[] sections = new ChunkSection[16];
|
ChunkSection[] sections = new ChunkSection[16];
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
||||||
|
|
||||||
short nonAirBlocksCount = input.readShort();
|
short nonAirBlocksCount = data.readShort();
|
||||||
ChunkSection section = Types1_16.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_16.CHUNK_SECTION.read(data);
|
||||||
section.setNonAirBlocksCount(nonAirBlocksCount);
|
section.setNonAirBlocksCount(nonAirBlocksCount);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, heightMap, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,29 +56,20 @@ public final class ChunkType1_17 extends Type<Chunk> {
|
|||||||
|
|
||||||
int[] biomeData = Type.VAR_INT_ARRAY_PRIMITIVE.read(input);
|
int[] biomeData = Type.VAR_INT_ARRAY_PRIMITIVE.read(input);
|
||||||
|
|
||||||
Type.VAR_INT.readPrimitive(input); // data size in bytes
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
|
|
||||||
// Read sections
|
// Read sections
|
||||||
ChunkSection[] sections = new ChunkSection[ySectionCount];
|
ChunkSection[] sections = new ChunkSection[ySectionCount];
|
||||||
for (int i = 0; i < ySectionCount; i++) {
|
for (int i = 0; i < ySectionCount; i++) {
|
||||||
if (!sectionsMask.get(i)) continue; // Section not set
|
if (!sectionsMask.get(i)) continue; // Section not set
|
||||||
|
|
||||||
short nonAirBlocksCount = input.readShort();
|
short nonAirBlocksCount = data.readShort();
|
||||||
ChunkSection section = Types1_16.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_16.CHUNK_SECTION.read(data);
|
||||||
section.setNonAirBlocksCount(nonAirBlocksCount);
|
section.setNonAirBlocksCount(nonAirBlocksCount);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, true, false, sectionsMask, sections, biomeData, heightMap, nbtData);
|
return new BaseChunk(chunkX, chunkZ, true, false, sectionsMask, sections, biomeData, heightMap, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,9 +58,6 @@ public final class ChunkType1_18 extends Type<Chunk> {
|
|||||||
sections[i] = sectionType.read(sectionsBuf);
|
sections[i] = sectionType.read(sectionsBuf);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
/*if (sectionsBuf.readableBytes() > 0 && Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + sectionsBuf.readableBytes() + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}*/
|
|
||||||
sectionsBuf.release();
|
sectionsBuf.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,8 +54,7 @@ public class ChunkType1_9_1 extends Type<Chunk> {
|
|||||||
|
|
||||||
boolean groundUp = input.readBoolean();
|
boolean groundUp = input.readBoolean();
|
||||||
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
|
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
|
||||||
// Size (unused)
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
Type.VAR_INT.readPrimitive(input);
|
|
||||||
|
|
||||||
BitSet usedSections = new BitSet(16);
|
BitSet usedSections = new BitSet(16);
|
||||||
ChunkSection[] sections = new ChunkSection[16];
|
ChunkSection[] sections = new ChunkSection[16];
|
||||||
@ -69,18 +68,18 @@ public class ChunkType1_9_1 extends Type<Chunk> {
|
|||||||
// Read sections
|
// Read sections
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
if (!usedSections.get(i)) continue; // Section not set
|
if (!usedSections.get(i)) continue; // Section not set
|
||||||
ChunkSection section = Types1_9.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_9.CHUNK_SECTION.read(data);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
section.getLight().readBlockLight(input);
|
section.getLight().readBlockLight(data);
|
||||||
if (hasSkyLight) {
|
if (hasSkyLight) {
|
||||||
section.getLight().readSkyLight(input);
|
section.getLight().readSkyLight(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] biomeData = groundUp ? new int[256] : null;
|
int[] biomeData = groundUp ? new int[256] : null;
|
||||||
if (groundUp) {
|
if (groundUp) {
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
biomeData[i] = input.readByte() & 0xFF;
|
biomeData[i] = data.readByte() & 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,38 +57,29 @@ public class ChunkType1_9_3 extends Type<Chunk> {
|
|||||||
|
|
||||||
boolean fullChunk = input.readBoolean();
|
boolean fullChunk = input.readBoolean();
|
||||||
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
|
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
|
||||||
Type.VAR_INT.readPrimitive(input);
|
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
|
||||||
|
|
||||||
// Read sections
|
// Read sections
|
||||||
ChunkSection[] sections = new ChunkSection[16];
|
ChunkSection[] sections = new ChunkSection[16];
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
|
||||||
|
|
||||||
ChunkSection section = Types1_9.CHUNK_SECTION.read(input);
|
ChunkSection section = Types1_9.CHUNK_SECTION.read(data);
|
||||||
sections[i] = section;
|
sections[i] = section;
|
||||||
section.getLight().readBlockLight(input);
|
section.getLight().readBlockLight(data);
|
||||||
if (hasSkyLight) {
|
if (hasSkyLight) {
|
||||||
section.getLight().readSkyLight(input);
|
section.getLight().readSkyLight(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] biomeData = fullChunk ? new int[256] : null;
|
int[] biomeData = fullChunk ? new int[256] : null;
|
||||||
if (fullChunk) {
|
if (fullChunk) {
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
biomeData[i] = input.readByte() & 0xFF;
|
biomeData[i] = data.readByte() & 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
|
||||||
|
|
||||||
// Read all the remaining bytes (workaround for #681)
|
|
||||||
if (input.readableBytes() > 0) {
|
|
||||||
byte[] array = Type.REMAINING_BYTES.read(input);
|
|
||||||
if (Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("Found " + array.length + " more bytes than expected while reading the chunk: " + chunkX + "/" + chunkZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, nbtData);
|
return new BaseChunk(chunkX, chunkZ, fullChunk, false, primaryBitmask, sections, biomeData, nbtData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren