Skip to content

Commit 0273625

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 13f2475 + dfee03d commit 0273625

File tree

19 files changed

+160
-87
lines changed

19 files changed

+160
-87
lines changed

api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class ProtocolVersion {
8585
public static final ProtocolVersion v1_19_4 = register(762, "1.19.4");
8686
public static final ProtocolVersion v1_20 = register(763, "1.20/1.20.1", new VersionRange("1.20", 0, 1));
8787
public static final ProtocolVersion v1_20_2 = register(764, "1.20.2");
88-
public static final ProtocolVersion v1_20_3 = register(765, 168, "1.20.3");
88+
public static final ProtocolVersion v1_20_3 = register(765, "1.20.3");
8989
public static final ProtocolVersion unknown = register(-1, "UNKNOWN");
9090

9191
public static ProtocolVersion register(int version, String name) {

api/src/main/java/com/viaversion/viaversion/api/type/types/chunk/ChunkType1_8.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@
2222
*/
2323
package com.viaversion.viaversion.api.type.types.chunk;
2424

25+
import com.viaversion.viaversion.api.Via;
2526
import com.viaversion.viaversion.api.minecraft.Environment;
2627
import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
2728
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
2829
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
2930
import com.viaversion.viaversion.api.type.Type;
3031
import com.viaversion.viaversion.api.type.types.version.Types1_8;
32+
import com.viaversion.viaversion.util.ChunkUtil;
3133
import io.netty.buffer.ByteBuf;
3234
import io.netty.buffer.Unpooled;
35+
3336
import java.util.ArrayList;
37+
import java.util.logging.Level;
3438

3539
public class ChunkType1_8 extends Type<Chunk> {
3640

@@ -62,7 +66,12 @@ public Chunk read(ByteBuf input) throws Exception {
6266
return new BaseChunk(chunkX, chunkZ, true, false, 0, new ChunkSection[16], null, new ArrayList<>());
6367
}
6468

65-
return deserialize(chunkX, chunkZ, fullChunk, hasSkyLight, bitmask, data);
69+
try {
70+
return deserialize(chunkX, chunkZ, fullChunk, hasSkyLight, bitmask, data);
71+
} catch (Throwable e) {
72+
Via.getPlatform().getLogger().log(Level.WARNING, "The server sent an invalid chunk data packet, returning an empty chunk instead", e);
73+
return ChunkUtil.createEmptyChunk(chunkX, chunkZ);
74+
}
6675
}
6776

6877
@Override

api/src/main/java/com/viaversion/viaversion/api/type/types/chunk/ChunkType1_9_1.java

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@
2222
*/
2323
package com.viaversion.viaversion.api.type.types.chunk;
2424

25+
import com.viaversion.viaversion.api.Via;
2526
import com.viaversion.viaversion.api.minecraft.Environment;
2627
import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
2728
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
2829
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
2930
import com.viaversion.viaversion.api.type.Type;
3031
import com.viaversion.viaversion.api.type.types.version.Types1_9;
32+
import com.viaversion.viaversion.util.ChunkUtil;
3133
import io.netty.buffer.ByteBuf;
34+
3235
import java.util.ArrayList;
3336
import java.util.BitSet;
37+
import java.util.logging.Level;
3438

3539
public class ChunkType1_9_1 extends Type<Chunk> {
3640

@@ -56,31 +60,36 @@ public Chunk read(ByteBuf input) throws Exception {
5660
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
5761
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
5862

59-
BitSet usedSections = new BitSet(16);
6063
ChunkSection[] sections = new ChunkSection[16];
61-
// Calculate section count from bitmask
62-
for (int i = 0; i < 16; i++) {
63-
if ((primaryBitmask & (1 << i)) != 0) {
64-
usedSections.set(i);
64+
int[] biomeData = groundUp ? new int[256] : null;
65+
try {
66+
BitSet usedSections = new BitSet(16);
67+
// Calculate section count from bitmask
68+
for (int i = 0; i < 16; i++) {
69+
if ((primaryBitmask & (1 << i)) != 0) {
70+
usedSections.set(i);
71+
}
6572
}
66-
}
6773

68-
// Read sections
69-
for (int i = 0; i < 16; i++) {
70-
if (!usedSections.get(i)) continue; // Section not set
71-
ChunkSection section = Types1_9.CHUNK_SECTION.read(data);
72-
sections[i] = section;
73-
section.getLight().readBlockLight(data);
74-
if (hasSkyLight) {
75-
section.getLight().readSkyLight(data);
74+
// Read sections
75+
for (int i = 0; i < 16; i++) {
76+
if (!usedSections.get(i)) continue; // Section not set
77+
ChunkSection section = Types1_9.CHUNK_SECTION.read(data);
78+
sections[i] = section;
79+
section.getLight().readBlockLight(data);
80+
if (hasSkyLight) {
81+
section.getLight().readSkyLight(data);
82+
}
7683
}
77-
}
7884

79-
int[] biomeData = groundUp ? new int[256] : null;
80-
if (groundUp) {
81-
for (int i = 0; i < 256; i++) {
82-
biomeData[i] = data.readByte() & 0xFF;
85+
if (groundUp) {
86+
for (int i = 0; i < 256; i++) {
87+
biomeData[i] = data.readByte() & 0xFF;
88+
}
8389
}
90+
} catch (Throwable e) {
91+
Via.getPlatform().getLogger().log(Level.WARNING, "The server sent an invalid chunk data packet, returning an empty chunk instead", e);
92+
return ChunkUtil.createEmptyChunk(chunkX, chunkZ);
8493
}
8594

8695
return new BaseChunk(chunkX, chunkZ, groundUp, false, primaryBitmask, sections, biomeData, new ArrayList<>());

api/src/main/java/com/viaversion/viaversion/api/type/types/chunk/ChunkType1_9_3.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,13 @@
3030
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
3131
import com.viaversion.viaversion.api.type.Type;
3232
import com.viaversion.viaversion.api.type.types.version.Types1_9;
33+
import com.viaversion.viaversion.util.ChunkUtil;
3334
import io.netty.buffer.ByteBuf;
35+
3436
import java.util.ArrayList;
3537
import java.util.Arrays;
3638
import java.util.List;
39+
import java.util.logging.Level;
3740

3841
public class ChunkType1_9_3 extends Type<Chunk> {
3942

@@ -59,24 +62,29 @@ public Chunk read(ByteBuf input) throws Exception {
5962
int primaryBitmask = Type.VAR_INT.readPrimitive(input);
6063
ByteBuf data = input.readSlice(Type.VAR_INT.readPrimitive(input));
6164

62-
// Read sections
6365
ChunkSection[] sections = new ChunkSection[16];
64-
for (int i = 0; i < 16; i++) {
65-
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
66-
67-
ChunkSection section = Types1_9.CHUNK_SECTION.read(data);
68-
sections[i] = section;
69-
section.getLight().readBlockLight(data);
70-
if (hasSkyLight) {
71-
section.getLight().readSkyLight(data);
66+
int[] biomeData = fullChunk ? new int[256] : null;
67+
try {
68+
// Read sections
69+
for (int i = 0; i < 16; i++) {
70+
if ((primaryBitmask & (1 << i)) == 0) continue; // Section not set
71+
72+
ChunkSection section = Types1_9.CHUNK_SECTION.read(data);
73+
sections[i] = section;
74+
section.getLight().readBlockLight(data);
75+
if (hasSkyLight) {
76+
section.getLight().readSkyLight(data);
77+
}
7278
}
73-
}
7479

75-
int[] biomeData = fullChunk ? new int[256] : null;
76-
if (fullChunk) {
77-
for (int i = 0; i < 256; i++) {
78-
biomeData[i] = data.readByte() & 0xFF;
80+
if (fullChunk) {
81+
for (int i = 0; i < 256; i++) {
82+
biomeData[i] = data.readByte() & 0xFF;
83+
}
7984
}
85+
} catch (Throwable e) {
86+
Via.getPlatform().getLogger().log(Level.WARNING, "The server sent an invalid chunk data packet, returning an empty chunk instead", e);
87+
return ChunkUtil.createEmptyChunk(chunkX, chunkZ);
8088
}
8189

8290
List<CompoundTag> nbtData = new ArrayList<>(Arrays.asList(Type.NAMED_COMPOUND_TAG_ARRAY.read(input)));
@@ -119,4 +127,4 @@ public void write(ByteBuf output, Chunk chunk) throws Exception {
119127
// Write Block Entities
120128
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(new CompoundTag[0]));
121129
}
122-
}
130+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
3+
* Copyright (C) 2023 ViaVersion and contributors
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy
6+
* of this software and associated documentation files (the "Software"), to deal
7+
* in the Software without restriction, including without limitation the rights
8+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
* copies of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
* SOFTWARE.
22+
*/
23+
package com.viaversion.viaversion.util;
24+
25+
import com.viaversion.viaversion.api.minecraft.chunks.*;
26+
27+
import java.util.ArrayList;
28+
29+
public class ChunkUtil {
30+
31+
public static Chunk createEmptyChunk(final int chunkX, final int chunkZ) {
32+
final ChunkSection[] airSections = new ChunkSection[16];
33+
for (int i = 0; i < airSections.length; i++) {
34+
airSections[i] = new ChunkSectionImpl(true);
35+
airSections[i].palette(PaletteType.BLOCKS).addId(0);
36+
}
37+
return new BaseChunk(chunkX, chunkZ, true, false, 0xFFFF, airSections, new int[256], new ArrayList<>());
38+
}
39+
40+
}

common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,8 @@ public static int toNewId(int oldId) {
582582
if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
583583
Via.getPlatform().getLogger().warning("Missing block completely " + oldId);
584584
}
585-
// Default stone
586-
return 1;
585+
// Default air
586+
return 0;
587587
}
588588

589589
private static int checkStorage(UserConnection user, Position position, int newId) {

common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/EntityPackets.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ public void register() {
4444
handler(wrapper -> {
4545
short gamemode = wrapper.read(Type.UNSIGNED_BYTE);
4646
wrapper.write(Type.BOOLEAN, (gamemode & 0x08) != 0); // Hardcore
47-
48-
gamemode &= ~0x08;
49-
wrapper.write(Type.UNSIGNED_BYTE, gamemode);
47+
wrapper.write(Type.BYTE, (byte) (gamemode & ~0x08)); // Gamemode
5048
});
5149
map(Type.BYTE); // Previous Gamemode
5250
map(Type.STRING_ARRAY); // World List

common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import com.github.steveice10.opennbt.tag.builtin.ListTag;
2323
import com.github.steveice10.opennbt.tag.builtin.Tag;
2424
import com.viaversion.viaversion.api.data.entity.EntityTracker;
25+
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
2526
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_16_2;
2627
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_17;
27-
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
2828
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
2929
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
3030
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
@@ -70,7 +70,7 @@ public void registerPackets() {
7070
public void register() {
7171
map(Type.INT); // Entity ID
7272
map(Type.BOOLEAN); // Hardcore
73-
map(Type.UNSIGNED_BYTE); // Gamemode
73+
map(Type.BYTE); // Gamemode
7474
map(Type.BYTE); // Previous Gamemode
7575
map(Type.STRING_ARRAY); // World List
7676
map(Type.NAMED_COMPOUND_TAG); // Registry

common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18_2to1_18/Protocol1_18_2To1_18.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public void register() {
6262
public void register() {
6363
map(Type.INT); // Entity ID
6464
map(Type.BOOLEAN); // Hardcore
65-
map(Type.UNSIGNED_BYTE); // Gamemode
65+
map(Type.BYTE); // Gamemode
6666
map(Type.BYTE); // Previous Gamemode
6767
map(Type.STRING_ARRAY); // World List
6868
map(Type.NAMED_COMPOUND_TAG); // Registry

common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/EntityPackets.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
package com.viaversion.viaversion.protocols.protocol1_18to1_17_1.packets;
1919

2020
import com.viaversion.viaversion.api.data.entity.EntityTracker;
21-
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_17;
21+
import com.viaversion.viaversion.api.minecraft.Particle;
2222
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
23+
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_17;
2324
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
2425
import com.viaversion.viaversion.api.type.Type;
25-
import com.viaversion.viaversion.api.minecraft.Particle;
2626
import com.viaversion.viaversion.api.type.types.version.Types1_17;
2727
import com.viaversion.viaversion.api.type.types.version.Types1_18;
2828
import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.ClientboundPackets1_17_1;
@@ -45,7 +45,7 @@ public void registerPackets() {
4545
public void register() {
4646
map(Type.INT); // Entity ID
4747
map(Type.BOOLEAN); // Hardcore
48-
map(Type.UNSIGNED_BYTE); // Gamemode
48+
map(Type.BYTE); // Gamemode
4949
map(Type.BYTE); // Previous Gamemode
5050
map(Type.STRING_ARRAY); // World List
5151
map(Type.NAMED_COMPOUND_TAG); // Registry

0 commit comments

Comments
 (0)