mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Fix entity handle & Try fix message singing again
This commit is contained in:
parent
50dd5a3ba3
commit
950d9bcfdc
3 changed files with 198 additions and 130 deletions
|
|
@ -684,23 +684,73 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
case 15: // Particle
|
||||
// Currecutly not handled. Reading data only
|
||||
int ParticleID = ReadNextVarInt(cache);
|
||||
switch (ParticleID)
|
||||
// Need to check the exact version where the change occurred!!!!!
|
||||
if (protocolversion >= Protocol18Handler.MC_1_19_3_Version)
|
||||
{
|
||||
case 3:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 14:
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
break;
|
||||
case 23:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 32:
|
||||
ReadNextItemSlot(cache, itemPalette);
|
||||
break;
|
||||
switch (ParticleID)
|
||||
{
|
||||
case 2:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 3:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 14:
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
break;
|
||||
case 15:
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
break;
|
||||
case 24:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 35:
|
||||
ReadNextItemSlot(cache, itemPalette);
|
||||
break;
|
||||
case 36:
|
||||
string positionSourceType = ReadNextString(cache);
|
||||
if (positionSourceType == "minecraft:block")
|
||||
{
|
||||
ReadNextLocation(cache);
|
||||
}
|
||||
else if (positionSourceType == "minecraft:entity")
|
||||
{
|
||||
ReadNextVarInt(cache);
|
||||
ReadNextFloat(cache);
|
||||
}
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (ParticleID)
|
||||
{
|
||||
case 3:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 14:
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
ReadNextFloat(cache);
|
||||
break;
|
||||
case 23:
|
||||
ReadNextVarInt(cache);
|
||||
break;
|
||||
case 32:
|
||||
ReadNextItemSlot(cache, itemPalette);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 16: // Villager Data (3x VarInt)
|
||||
|
|
@ -730,7 +780,10 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
if (protocolversion <= Protocol18Handler.MC_1_19_Version)
|
||||
value = ReadNextVarInt(cache);
|
||||
else
|
||||
value = null; // Dimension and blockPos, currently not in use
|
||||
{
|
||||
// Dimension and blockPos, currently not in use
|
||||
value = new Tuple<string, Location>(ReadNextString(cache), ReadNextLocation(cache));
|
||||
}
|
||||
break;
|
||||
case 22: // Painting Variant
|
||||
value = ReadNextVarInt(cache);
|
||||
|
|
|
|||
|
|
@ -104,6 +104,9 @@ namespace MinecraftClient.Protocol.Handlers.packet.s2c
|
|||
|
||||
private static void CollectSignArguments(int NodeIdx, string command, List<Tuple<string, string>> arguments)
|
||||
{
|
||||
if (Nodes.Length <= NodeIdx)
|
||||
return;
|
||||
|
||||
CommandNode node = Nodes[NodeIdx];
|
||||
string last_arg = command;
|
||||
switch (node.Flags & 0x03)
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
private readonly BlockingCollection<Tuple<int, Queue<byte>>> packetQueue = new();
|
||||
private float LastYaw, LastPitch;
|
||||
|
||||
private object MessageSigningLock = new();
|
||||
private Guid chatUuid = Guid.Empty;
|
||||
private int pendingAcknowledgments = 0, messageIndex = 0;
|
||||
private LastSeenMessagesCollector lastSeenMessagesCollector;
|
||||
|
|
@ -696,11 +697,15 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
}
|
||||
|
||||
ChatMessage chat = new(message, false, chatTypeId, senderUUID, unsignedChatContent, senderDisplayName, senderTeamName, timestamp, messageSignature, verifyResult);
|
||||
if (isOnlineMode && !chat.LacksSender() && messageSignature != null)
|
||||
lock (MessageSigningLock)
|
||||
Acknowledge(chat);
|
||||
handler.OnTextReceived(chat);
|
||||
}
|
||||
break;
|
||||
case PacketTypesIn.HideMessage:
|
||||
byte[] hideMessageSignature = dataTypes.ReadNextByteArray(packetData);
|
||||
ConsoleIO.WriteLine($"HideMessage was not processed! (SigLen={hideMessageSignature.Length})");
|
||||
break;
|
||||
case PacketTypesIn.SystemChat:
|
||||
string systemMessage = dataTypes.ReadNextString(packetData);
|
||||
if (protocolVersion >= MC_1_19_3_Version)
|
||||
|
|
@ -2524,13 +2529,14 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
{
|
||||
if (protocolVersion >= MC_1_19_3_Version)
|
||||
{
|
||||
lastSeenMessagesCollector.Add_1_19_3(entry, true);
|
||||
lastReceivedMessage = null;
|
||||
if (lastSeenMessagesCollector.messageCount > 64)
|
||||
if (lastSeenMessagesCollector.Add_1_19_3(entry, true))
|
||||
{
|
||||
int messageCount = lastSeenMessagesCollector.ResetMessageCount();
|
||||
if (messageCount > 0)
|
||||
SendMessageAcknowledgment(messageCount);
|
||||
if (lastSeenMessagesCollector.messageCount > 64)
|
||||
{
|
||||
int messageCount = lastSeenMessagesCollector.ResetMessageCount();
|
||||
if (messageCount > 0)
|
||||
SendMessageAcknowledgment(messageCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -2561,74 +2567,77 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
|
||||
try
|
||||
{
|
||||
LastSeenMessageList.Acknowledgment? acknowledgment_1_19_2 =
|
||||
(protocolVersion == MC_1_19_2_Version) ? ConsumeAcknowledgment() : null;
|
||||
|
||||
(LastSeenMessageList.AcknowledgedMessage[] acknowledgment_1_19_3, byte[] bitset_1_19_3, int messageCount_1_19_3) =
|
||||
(protocolVersion >= MC_1_19_3_Version) ? lastSeenMessagesCollector.Collect_1_19_3() : new(Array.Empty<LastSeenMessageList.AcknowledgedMessage>(), Array.Empty<byte>(), 0);
|
||||
|
||||
List<byte> fields = new();
|
||||
|
||||
// Command: String
|
||||
fields.AddRange(dataTypes.GetString(command));
|
||||
|
||||
// Timestamp: Instant(Long)
|
||||
DateTimeOffset timeNow = DateTimeOffset.UtcNow;
|
||||
fields.AddRange(DataTypes.GetLong(timeNow.ToUnixTimeMilliseconds()));
|
||||
|
||||
List<Tuple<string, string>>? needSigned = null; // List< Argument Name, Argument Value >
|
||||
if (playerKeyPair != null && isOnlineMode && protocolVersion >= MC_1_19_Version
|
||||
&& Config.Signature.LoginWithSecureProfile && Config.Signature.SignMessageInCommand)
|
||||
needSigned = DeclareCommands.CollectSignArguments(command);
|
||||
|
||||
if (needSigned == null || needSigned!.Count == 0)
|
||||
lock (MessageSigningLock)
|
||||
{
|
||||
fields.AddRange(DataTypes.GetLong(0)); // Salt: Long
|
||||
fields.AddRange(DataTypes.GetVarInt(0)); // Signature Length: VarInt
|
||||
}
|
||||
else
|
||||
{
|
||||
Guid uuid = handler.GetUserUuid();
|
||||
byte[] salt = GenerateSalt();
|
||||
fields.AddRange(salt); // Salt: Long
|
||||
fields.AddRange(DataTypes.GetVarInt(needSigned.Count)); // Signature Length: VarInt
|
||||
foreach ((string argName, string message) in needSigned)
|
||||
LastSeenMessageList.Acknowledgment? acknowledgment_1_19_2 =
|
||||
(protocolVersion == MC_1_19_2_Version) ? ConsumeAcknowledgment() : null;
|
||||
|
||||
(LastSeenMessageList.AcknowledgedMessage[] acknowledgment_1_19_3, byte[] bitset_1_19_3, int messageCount_1_19_3) =
|
||||
(protocolVersion >= MC_1_19_3_Version) ? lastSeenMessagesCollector.Collect_1_19_3() : new(Array.Empty<LastSeenMessageList.AcknowledgedMessage>(), Array.Empty<byte>(), 0);
|
||||
|
||||
List<byte> fields = new();
|
||||
|
||||
// Command: String
|
||||
fields.AddRange(dataTypes.GetString(command));
|
||||
|
||||
// Timestamp: Instant(Long)
|
||||
DateTimeOffset timeNow = DateTimeOffset.UtcNow;
|
||||
fields.AddRange(DataTypes.GetLong(timeNow.ToUnixTimeMilliseconds()));
|
||||
|
||||
if (needSigned == null || needSigned!.Count == 0)
|
||||
{
|
||||
fields.AddRange(dataTypes.GetString(argName)); // Argument name: String
|
||||
|
||||
byte[] sign;
|
||||
if (protocolVersion == MC_1_19_Version)
|
||||
sign = playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt);
|
||||
else if (protocolVersion == MC_1_19_2_Version)
|
||||
sign = playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt, acknowledgment_1_19_2!.lastSeen);
|
||||
else // protocolVersion >= MC_1_19_3_Version
|
||||
sign = playerKeyPair!.PrivateKey.SignMessage(message, uuid, chatUuid, messageIndex++, timeNow, ref salt, acknowledgment_1_19_3);
|
||||
|
||||
if (protocolVersion <= MC_1_19_2_Version)
|
||||
fields.AddRange(DataTypes.GetVarInt(sign.Length)); // Signature length: VarInt
|
||||
|
||||
fields.AddRange(sign); // Signature: Byte Array
|
||||
fields.AddRange(DataTypes.GetLong(0)); // Salt: Long
|
||||
fields.AddRange(DataTypes.GetVarInt(0)); // Signature Length: VarInt
|
||||
}
|
||||
else
|
||||
{
|
||||
Guid uuid = handler.GetUserUuid();
|
||||
byte[] salt = GenerateSalt();
|
||||
fields.AddRange(salt); // Salt: Long
|
||||
fields.AddRange(DataTypes.GetVarInt(needSigned.Count)); // Signature Length: VarInt
|
||||
foreach ((string argName, string message) in needSigned)
|
||||
{
|
||||
fields.AddRange(dataTypes.GetString(argName)); // Argument name: String
|
||||
|
||||
byte[] sign;
|
||||
if (protocolVersion == MC_1_19_Version)
|
||||
sign = playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt);
|
||||
else if (protocolVersion == MC_1_19_2_Version)
|
||||
sign = playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt, acknowledgment_1_19_2!.lastSeen);
|
||||
else // protocolVersion >= MC_1_19_3_Version
|
||||
sign = playerKeyPair!.PrivateKey.SignMessage(message, uuid, chatUuid, messageIndex++, timeNow, ref salt, acknowledgment_1_19_3);
|
||||
|
||||
if (protocolVersion <= MC_1_19_2_Version)
|
||||
fields.AddRange(DataTypes.GetVarInt(sign.Length)); // Signature length: VarInt
|
||||
|
||||
fields.AddRange(sign); // Signature: Byte Array
|
||||
}
|
||||
}
|
||||
|
||||
if (protocolVersion <= MC_1_19_2_Version)
|
||||
fields.AddRange(dataTypes.GetBool(false)); // Signed Preview: Boolean
|
||||
|
||||
if (protocolVersion == MC_1_19_2_Version)
|
||||
{
|
||||
// Message Acknowledgment (1.19.2)
|
||||
fields.AddRange(dataTypes.GetAcknowledgment(acknowledgment_1_19_2!, isOnlineMode && Config.Signature.LoginWithSecureProfile));
|
||||
}
|
||||
else if (protocolVersion >= MC_1_19_3_Version)
|
||||
{
|
||||
// message count
|
||||
fields.AddRange(DataTypes.GetVarInt(messageCount_1_19_3));
|
||||
|
||||
// Acknowledged: BitSet
|
||||
fields.AddRange(bitset_1_19_3);
|
||||
}
|
||||
|
||||
SendPacket(PacketTypesOut.ChatCommand, fields);
|
||||
}
|
||||
|
||||
if (protocolVersion <= MC_1_19_2_Version)
|
||||
fields.AddRange(dataTypes.GetBool(false)); // Signed Preview: Boolean
|
||||
|
||||
if (protocolVersion == MC_1_19_2_Version)
|
||||
{
|
||||
// Message Acknowledgment (1.19.2)
|
||||
fields.AddRange(dataTypes.GetAcknowledgment(acknowledgment_1_19_2!, isOnlineMode && Config.Signature.LoginWithSecureProfile));
|
||||
}
|
||||
else if (protocolVersion >= MC_1_19_3_Version)
|
||||
{
|
||||
// message count
|
||||
fields.AddRange(DataTypes.GetVarInt(messageCount_1_19_3));
|
||||
|
||||
// Acknowledged: BitSet
|
||||
fields.AddRange(bitset_1_19_3);
|
||||
}
|
||||
|
||||
SendPacket(PacketTypesOut.ChatCommand, fields);
|
||||
return true;
|
||||
}
|
||||
catch (SocketException) { return false; }
|
||||
|
|
@ -2660,62 +2669,65 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
|
||||
if (protocolVersion >= MC_1_19_Version)
|
||||
{
|
||||
LastSeenMessageList.Acknowledgment? acknowledgment_1_19_2 =
|
||||
lock (MessageSigningLock)
|
||||
{
|
||||
LastSeenMessageList.Acknowledgment? acknowledgment_1_19_2 =
|
||||
(protocolVersion == MC_1_19_2_Version) ? ConsumeAcknowledgment() : null;
|
||||
|
||||
(LastSeenMessageList.AcknowledgedMessage[] acknowledgment_1_19_3, byte[] bitset_1_19_3, int messageCount_1_19_3) =
|
||||
(protocolVersion >= MC_1_19_3_Version) ? lastSeenMessagesCollector.Collect_1_19_3() : new(Array.Empty<LastSeenMessageList.AcknowledgedMessage>(), Array.Empty<byte>(), 0);
|
||||
(LastSeenMessageList.AcknowledgedMessage[] acknowledgment_1_19_3, byte[] bitset_1_19_3, int messageCount_1_19_3) =
|
||||
(protocolVersion >= MC_1_19_3_Version) ? lastSeenMessagesCollector.Collect_1_19_3() : new(Array.Empty<LastSeenMessageList.AcknowledgedMessage>(), Array.Empty<byte>(), 0);
|
||||
|
||||
// Timestamp: Instant(Long)
|
||||
DateTimeOffset timeNow = DateTimeOffset.UtcNow;
|
||||
fields.AddRange(DataTypes.GetLong(timeNow.ToUnixTimeMilliseconds()));
|
||||
// Timestamp: Instant(Long)
|
||||
DateTimeOffset timeNow = DateTimeOffset.UtcNow;
|
||||
fields.AddRange(DataTypes.GetLong(timeNow.ToUnixTimeMilliseconds()));
|
||||
|
||||
if (!isOnlineMode || playerKeyPair == null || !Config.Signature.LoginWithSecureProfile || !Config.Signature.SignChat)
|
||||
{
|
||||
fields.AddRange(DataTypes.GetLong(0)); // Salt: Long
|
||||
if (protocolVersion < MC_1_19_3_Version)
|
||||
fields.AddRange(DataTypes.GetVarInt(0)); // Signature Length: VarInt (1.19 - 1.19.2)
|
||||
if (!isOnlineMode || playerKeyPair == null || !Config.Signature.LoginWithSecureProfile || !Config.Signature.SignChat)
|
||||
{
|
||||
fields.AddRange(DataTypes.GetLong(0)); // Salt: Long
|
||||
if (protocolVersion < MC_1_19_3_Version)
|
||||
fields.AddRange(DataTypes.GetVarInt(0)); // Signature Length: VarInt (1.19 - 1.19.2)
|
||||
else
|
||||
fields.AddRange(dataTypes.GetBool(false)); // Has signature: bool (1.19.3)
|
||||
}
|
||||
else
|
||||
fields.AddRange(dataTypes.GetBool(false)); // Has signature: bool (1.19.3)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Salt: Long
|
||||
byte[] salt = GenerateSalt();
|
||||
fields.AddRange(salt);
|
||||
{
|
||||
// Salt: Long
|
||||
byte[] salt = GenerateSalt();
|
||||
fields.AddRange(salt);
|
||||
|
||||
// Signature Length & Signature: (VarInt) and Byte Array
|
||||
Guid playerUuid = handler.GetUserUuid();
|
||||
byte[] sign;
|
||||
if (protocolVersion == MC_1_19_Version) // 1.19.1 or lower
|
||||
sign = playerKeyPair.PrivateKey.SignMessage(message, playerUuid, timeNow, ref salt);
|
||||
else if (protocolVersion == MC_1_19_2_Version) // 1.19.2
|
||||
sign = playerKeyPair.PrivateKey.SignMessage(message, playerUuid, timeNow, ref salt, acknowledgment_1_19_2!.lastSeen);
|
||||
else // protocolVersion >= MC_1_19_3_Version
|
||||
sign = playerKeyPair.PrivateKey.SignMessage(message, playerUuid, chatUuid, messageIndex++, timeNow, ref salt, acknowledgment_1_19_3);
|
||||
// Signature Length & Signature: (VarInt) and Byte Array
|
||||
Guid playerUuid = handler.GetUserUuid();
|
||||
byte[] sign;
|
||||
if (protocolVersion == MC_1_19_Version) // 1.19.1 or lower
|
||||
sign = playerKeyPair.PrivateKey.SignMessage(message, playerUuid, timeNow, ref salt);
|
||||
else if (protocolVersion == MC_1_19_2_Version) // 1.19.2
|
||||
sign = playerKeyPair.PrivateKey.SignMessage(message, playerUuid, timeNow, ref salt, acknowledgment_1_19_2!.lastSeen);
|
||||
else // protocolVersion >= MC_1_19_3_Version
|
||||
sign = playerKeyPair.PrivateKey.SignMessage(message, playerUuid, chatUuid, messageIndex++, timeNow, ref salt, acknowledgment_1_19_3);
|
||||
|
||||
if (protocolVersion >= MC_1_19_3_Version)
|
||||
fields.AddRange(dataTypes.GetBool(true));
|
||||
else
|
||||
fields.AddRange(DataTypes.GetVarInt(sign.Length));
|
||||
fields.AddRange(sign);
|
||||
}
|
||||
|
||||
if (protocolVersion <= MC_1_19_2_Version)
|
||||
fields.AddRange(dataTypes.GetBool(false)); // Signed Preview: Boolean
|
||||
|
||||
if (protocolVersion >= MC_1_19_3_Version)
|
||||
fields.AddRange(dataTypes.GetBool(true));
|
||||
else
|
||||
fields.AddRange(DataTypes.GetVarInt(sign.Length));
|
||||
fields.AddRange(sign);
|
||||
}
|
||||
{
|
||||
// message count
|
||||
fields.AddRange(DataTypes.GetVarInt(messageCount_1_19_3));
|
||||
|
||||
if (protocolVersion <= MC_1_19_2_Version)
|
||||
fields.AddRange(dataTypes.GetBool(false)); // Signed Preview: Boolean
|
||||
|
||||
if (protocolVersion >= MC_1_19_3_Version)
|
||||
{
|
||||
// message count
|
||||
fields.AddRange(DataTypes.GetVarInt(messageCount_1_19_3));
|
||||
|
||||
// Acknowledged: BitSet
|
||||
fields.AddRange(bitset_1_19_3);
|
||||
}
|
||||
else if (protocolVersion == MC_1_19_2_Version)
|
||||
{
|
||||
// Message Acknowledgment
|
||||
fields.AddRange(dataTypes.GetAcknowledgment(acknowledgment_1_19_2!, isOnlineMode && Config.Signature.LoginWithSecureProfile));
|
||||
// Acknowledged: BitSet
|
||||
fields.AddRange(bitset_1_19_3);
|
||||
}
|
||||
else if (protocolVersion == MC_1_19_2_Version)
|
||||
{
|
||||
// Message Acknowledgment
|
||||
fields.AddRange(dataTypes.GetAcknowledgment(acknowledgment_1_19_2!, isOnlineMode && Config.Signature.LoginWithSecureProfile));
|
||||
}
|
||||
}
|
||||
}
|
||||
SendPacket(PacketTypesOut.ChatMessage, fields);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue