From fca73bae675d396cb584fc48e2c0548cc6595e58 Mon Sep 17 00:00:00 2001 From: "Five (Xer)" Date: Sat, 23 May 2020 11:43:03 +0200 Subject: [PATCH] Some minor touch-ups --- .../proxy/protocol/ProtocolUtils.java | 49 ++++++++++--------- .../proxy/protocol/packet/Chat.java | 6 +-- .../proxy/protocol/packet/JoinGame.java | 32 ++++++------ .../proxy/protocol/packet/Respawn.java | 8 +-- .../brigadier/ArgumentPropertyRegistry.java | 2 +- 5 files changed, 49 insertions(+), 48 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java index c0cbc136d..628ec3249 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java @@ -18,6 +18,8 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import io.netty.handler.codec.DecoderException; +import io.netty.handler.codec.EncoderException; import net.kyori.nbt.CompoundTag; public enum ProtocolUtils { @@ -196,22 +198,21 @@ public enum ProtocolUtils { int indexBefore = buf.readerIndex(); byte startType = buf.readByte(); if (startType == 0) { - return null; - } else { - buf.readerIndex(indexBefore); - try { - DataInput input = new ByteBufInputStream(buf); - byte type = input.readByte(); - if (type != 10) { - return null; - } - input.readUTF(); - CompoundTag ret = new CompoundTag(); - ret.read(input, 0); - return ret; - } catch (IOException e) { - return null; + throw new DecoderException("Invalid NBT start-type (end/empty)"); + } + buf.readerIndex(indexBefore); + try { + DataInput input = new ByteBufInputStream(buf); + byte type = input.readByte(); + if (type != 10) { + throw new DecoderException("NBTTag is not a CompoundTag"); } + input.readUTF(); // Head-padding + CompoundTag compoundTag = new CompoundTag(); + compoundTag.read(input, 0); + return compoundTag; + } catch (IOException e) { + throw new DecoderException("Unable to decode NBT CompoundTag at " + indexBefore); } } @@ -223,15 +224,15 @@ public enum ProtocolUtils { public static void writeCompoundTag(ByteBuf buf, CompoundTag compoundTag) { if (compoundTag == null) { buf.writeByte(0); - } else { - try { - DataOutput output = new ByteBufOutputStream(buf); - output.writeByte(10); - output.writeUTF(""); - compoundTag.write(output); - } catch (IOException e) { - e.printStackTrace(); - } + return; + } + try { + DataOutput output = new ByteBufOutputStream(buf); + output.writeByte(10); // Type 10 - CompoundTag + output.writeUTF(""); // Head-padding + compoundTag.write(output); + } catch (IOException e) { + throw new EncoderException("Unable to encode NBT CompoundTag"); } } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java index b80e0f855..61619d0e3 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java @@ -20,7 +20,7 @@ public class Chat implements MinecraftPacket { private @Nullable String message; private byte type; - private UUID sender; + private @Nullable UUID sender; public Chat() { } @@ -72,7 +72,7 @@ public class Chat implements MinecraftPacket { message = ProtocolUtils.readString(buf); if (direction == ProtocolUtils.Direction.CLIENTBOUND) { type = buf.readByte(); - if(version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { + if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { sender = ProtocolUtils.readUuid(buf); } } @@ -87,7 +87,7 @@ public class Chat implements MinecraftPacket { if (direction == ProtocolUtils.Direction.CLIENTBOUND) { buf.writeByte(type); if(version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { - ProtocolUtils.writeUuid(buf, sender == null ? new UUID(0,0) : sender); + ProtocolUtils.writeUuid(buf, sender == null ? EMPTY_SENDER : sender); } } } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java index d036e6531..ef5315701 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java @@ -17,14 +17,14 @@ public class JoinGame implements MinecraftPacket { private short difficulty; private short maxPlayers; private @Nullable String levelType; - private int viewDistance; //1.14+ + private int viewDistance; // 1.14+ private boolean reducedDebugInfo; private boolean showRespawnScreen; - private boolean shouldKeepPlayerData; - private boolean isDebug; - private boolean isFlat; - private String dimensionRegistryName; - private CompoundTag dimensionRegistry; + private boolean shouldKeepPlayerData; // 1.16+ + private boolean isDebug; // 1.16+ + private boolean isFlat; // 1.16+ + private String dimensionRegistryName; // 1.16+ + private CompoundTag dimensionRegistry; // 1.16+ public int getEntityId() { return entityId; @@ -149,6 +149,10 @@ public class JoinGame implements MinecraftPacket { + ", levelType='" + levelType + '\'' + ", viewDistance=" + viewDistance + ", reducedDebugInfo=" + reducedDebugInfo + + ", shouldKeepPlayerData=" + shouldKeepPlayerData + + ", isDebug=" + isDebug + + ", isFlat='" + isFlat + + ", dimensionRegistryName='" + dimensionRegistryName + '\'' + '}'; } @@ -159,12 +163,10 @@ public class JoinGame implements MinecraftPacket { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { this.dimensionRegistry = ProtocolUtils.readCompoundTag(buf); this.dimensionRegistryName = ProtocolUtils.readString(buf); + } else if (version.compareTo(ProtocolVersion.MINECRAFT_1_9_1) >= 0) { + this.dimension = buf.readInt(); } else { - if (version.compareTo(ProtocolVersion.MINECRAFT_1_9_1) >= 0) { - this.dimension = buf.readInt(); - } else { - this.dimension = buf.readByte(); - } + this.dimension = buf.readByte(); } if (version.compareTo(ProtocolVersion.MINECRAFT_1_13_2) <= 0) { this.difficulty = buf.readUnsignedByte(); @@ -198,12 +200,10 @@ public class JoinGame implements MinecraftPacket { if (version.compareTo(ProtocolVersion.MINECRAFT_1_16) >= 0) { ProtocolUtils.writeCompoundTag(buf, dimensionRegistry); ProtocolUtils.writeString(buf, dimensionRegistryName); + } else if (version.compareTo(ProtocolVersion.MINECRAFT_1_9_1) >= 0) { + buf.writeInt(dimension); } else { - if (version.compareTo(ProtocolVersion.MINECRAFT_1_9_1) >= 0) { - buf.writeInt(dimension); - } else { - buf.writeByte(dimension); - } + buf.writeByte(dimension); } if (version.compareTo(ProtocolVersion.MINECRAFT_1_13_2) <= 0) { buf.writeByte(difficulty); diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Respawn.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Respawn.java index 6829d0340..0f988a5f9 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Respawn.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Respawn.java @@ -13,10 +13,10 @@ public class Respawn implements MinecraftPacket { private short difficulty; private short gamemode; private String levelType = ""; - private boolean shouldKeepPlayerData; - private boolean isDebug; - private boolean isFlat; - private String dimensionRegistryName; + private boolean shouldKeepPlayerData; // 1.16+ + private boolean isDebug; // 1.16+ + private boolean isFlat; // 1.16+ + private String dimensionRegistryName; // 1.16+ public Respawn() { } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java index 56c2a06c5..7c9b8fb9c 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/brigadier/ArgumentPropertyRegistry.java @@ -134,6 +134,6 @@ public class ArgumentPropertyRegistry { dummy("minecraft:int_range", DUMMY); dummy("minecraft:float_range", DUMMY); dummy("minecraft:time", DUMMY); // added in 1.14 - dummy("minecraft:uuid", DUMMY); + dummy("minecraft:uuid", DUMMY); // added in 1.16 } }