From d4b3c42d8c21679689d68e909a96abef73a8f41f Mon Sep 17 00:00:00 2001 From: BruceChen Date: Sat, 14 Jan 2023 20:43:32 +0800 Subject: [PATCH] Update DeclareCommands for 1.19.3 --- .../Handlers/Packet/s2c/DeclareCommands.cs | 67 +++++++++++++------ .../Protocol/Handlers/Protocol18.cs | 8 +-- .../Protocol/IMinecraftComHandler.cs | 2 +- MinecraftClient/Protocol/PlayerInfo.cs | 1 - 4 files changed, 50 insertions(+), 28 deletions(-) diff --git a/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs b/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs index 22835b61..b2a9600c 100644 --- a/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs +++ b/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs @@ -8,7 +8,7 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c private static int RootIdx; private static CommandNode[] Nodes = Array.Empty(); - public static void Read(DataTypes dataTypes, Queue packetData) + public static void Read(DataTypes dataTypes, Queue packetData, int protocolVersion) { int count = dataTypes.ReadNextVarInt(packetData); Nodes = new CommandNode[count]; @@ -21,7 +21,7 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c for (int j = 0; j < childCount; ++j) childs[j] = dataTypes.ReadNextVarInt(packetData); - int redirectNode = ((flags & 0x08) > 0) ? dataTypes.ReadNextVarInt(packetData) : -1; + int redirectNode = ((flags & 0x08) == 0x08) ? dataTypes.ReadNextVarInt(packetData) : -1; string? name = ((flags & 0x03) == 1 || (flags & 0x03) == 2) ? dataTypes.ReadNextString(packetData) : null; @@ -29,28 +29,51 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c Paser? paser = null; if ((flags & 0x03) == 2) { - paser = paserId switch - { - 1 => new PaserFloat(dataTypes, packetData), - 2 => new PaserDouble(dataTypes, packetData), - 3 => new PaserInteger(dataTypes, packetData), - 4 => new PaserLong(dataTypes, packetData), - 5 => new PaserString(dataTypes, packetData), - 6 => new PaserEntity(dataTypes, packetData), - 8 => new PaserBlockPos(dataTypes, packetData), - 9 => new PaserColumnPos(dataTypes, packetData), - 10 => new PaserVec3(dataTypes, packetData), - 11 => new PaserVec2(dataTypes, packetData), - 18 => new PaserMessage(dataTypes, packetData), - 27 => new PaserRotation(dataTypes, packetData), - 29 => new PaserScoreHolder(dataTypes, packetData), - 43 => new PaserResourceOrTag(dataTypes, packetData), - 44 => new PaserResource(dataTypes, packetData), - _ => new PaserEmpty(dataTypes, packetData), - }; + if (protocolVersion <= Protocol18Handler.MC_1_19_2_Version) + paser = paserId switch + { + 1 => new PaserFloat(dataTypes, packetData), + 2 => new PaserDouble(dataTypes, packetData), + 3 => new PaserInteger(dataTypes, packetData), + 4 => new PaserLong(dataTypes, packetData), + 5 => new PaserString(dataTypes, packetData), + 6 => new PaserEntity(dataTypes, packetData), + 8 => new PaserBlockPos(dataTypes, packetData), + 9 => new PaserColumnPos(dataTypes, packetData), + 10 => new PaserVec3(dataTypes, packetData), + 11 => new PaserVec2(dataTypes, packetData), + 18 => new PaserMessage(dataTypes, packetData), + 27 => new PaserRotation(dataTypes, packetData), + 29 => new PaserScoreHolder(dataTypes, packetData), + 43 => new PaserResourceOrTag(dataTypes, packetData), + 44 => new PaserResource(dataTypes, packetData), + _ => new PaserEmpty(dataTypes, packetData), + }; + else // protocolVersion >= MC_1_19_3_Version + paser = paserId switch + { + 1 => new PaserFloat(dataTypes, packetData), + 2 => new PaserDouble(dataTypes, packetData), + 3 => new PaserInteger(dataTypes, packetData), + 4 => new PaserLong(dataTypes, packetData), + 5 => new PaserString(dataTypes, packetData), + 6 => new PaserEntity(dataTypes, packetData), + 8 => new PaserBlockPos(dataTypes, packetData), + 9 => new PaserColumnPos(dataTypes, packetData), + 10 => new PaserVec3(dataTypes, packetData), + 11 => new PaserVec2(dataTypes, packetData), + 18 => new PaserMessage(dataTypes, packetData), + 27 => new PaserRotation(dataTypes, packetData), + 29 => new PaserScoreHolder(dataTypes, packetData), + 41 => new PaserResourceOrTag(dataTypes, packetData), + 42 => new PaserResourceOrTag(dataTypes, packetData), + 43 => new PaserResource(dataTypes, packetData), + 44 => new PaserResource(dataTypes, packetData), + _ => new PaserEmpty(dataTypes, packetData), + }; } - string? suggestionsType = ((flags & 0x10) > 0) ? dataTypes.ReadNextString(packetData) : null; + string? suggestionsType = ((flags & 0x10) == 0x10) ? dataTypes.ReadNextString(packetData) : null; Nodes[i] = new(flags, childs, redirectNode, name, paser, suggestionsType); } diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index d9e8cb1a..1d71f012 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -459,7 +459,7 @@ namespace MinecraftClient.Protocol.Handlers break; case PacketTypesIn.DeclareCommands: if (protocolVersion >= MC_1_19_Version) - DeclareCommands.Read(dataTypes, packetData); + DeclareCommands.Read(dataTypes, packetData, protocolVersion); break; case PacketTypesIn.ChatMessage: int messageType = 0; @@ -1997,9 +1997,9 @@ namespace MinecraftClient.Protocol.Handlers innerException); } #else - catch (SocketException) { } - catch (ThreadAbortException) { } - catch (ObjectDisposedException) { } + catch (SocketException) { throw; } + catch (ThreadAbortException) { throw; } + catch (ObjectDisposedException) { throw; } #endif } diff --git a/MinecraftClient/Protocol/IMinecraftComHandler.cs b/MinecraftClient/Protocol/IMinecraftComHandler.cs index 532a3f88..e128507d 100644 --- a/MinecraftClient/Protocol/IMinecraftComHandler.cs +++ b/MinecraftClient/Protocol/IMinecraftComHandler.cs @@ -3,8 +3,8 @@ using System.Collections.Generic; using MinecraftClient.Inventory; using MinecraftClient.Logger; using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Keys; using MinecraftClient.Protocol.Message; +using MinecraftClient.Protocol.ProfileKey; using MinecraftClient.Scripting; namespace MinecraftClient.Protocol diff --git a/MinecraftClient/Protocol/PlayerInfo.cs b/MinecraftClient/Protocol/PlayerInfo.cs index ea89db1e..bb1a05df 100644 --- a/MinecraftClient/Protocol/PlayerInfo.cs +++ b/MinecraftClient/Protocol/PlayerInfo.cs @@ -4,7 +4,6 @@ using System.Data.SqlTypes; using System.Linq; using System.Text; using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Keys; using MinecraftClient.Protocol.Message; using MinecraftClient.Protocol.ProfileKey;