1.19.3 PlayerRemove & Explosion packet

This commit is contained in:
BruceChen 2023-01-14 15:55:40 +08:00
parent 052060b23c
commit e0294f1beb
2 changed files with 1587 additions and 1575 deletions

View file

@ -329,8 +329,10 @@ namespace MinecraftClient.Protocol.Handlers
/// <returns>TRUE if the packet was processed, FALSE if ignored or unknown</returns>
internal bool HandlePacket(int packetID, Queue<byte> packetData)
{
#if Release
try
{
#endif
if (login_phase)
{
switch (packetID) //Packet IDs are different while logging in
@ -1237,11 +1239,9 @@ namespace MinecraftClient.Protocol.Handlers
if (hasIcon)
iconBase64 = dataTypes.ReadNextString(packetData);
bool previewsChat = false;
if (protocolVersion < MC_1_19_3_Version)
dataTypes.ReadNextBool(packetData);
previewsChat = dataTypes.ReadNextBool(packetData);
handler.OnServerDataRecived(hasMotd, motd, hasIcon, iconBase64, previewsChat);
break;
@ -1507,6 +1507,14 @@ namespace MinecraftClient.Protocol.Handlers
else handler.OnPlayerLeave(FakeUUID);
}
break;
case PacketTypesIn.PlayerRemove:
int numberOfLeavePlayers = dataTypes.ReadNextVarInt(packetData);
for (int i = 0; i < numberOfLeavePlayers; ++i)
{
Guid playerUuid = dataTypes.ReadNextUUID(packetData);
handler.OnPlayerLeave(playerUuid);
}
break;
case PacketTypesIn.TabComplete:
if (protocolVersion >= MC_1_13_Version)
{
@ -1903,7 +1911,11 @@ namespace MinecraftClient.Protocol.Handlers
handler.OnSetExperience(experiencebar, level, totalexperience);
break;
case PacketTypesIn.Explosion:
Location explosionLocation = new(dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData));
Location explosionLocation;
if (protocolVersion >= MC_1_19_3_Version)
explosionLocation = new(dataTypes.ReadNextDouble(packetData), dataTypes.ReadNextDouble(packetData), dataTypes.ReadNextDouble(packetData));
else
explosionLocation = new(dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData));
float explosionStrength = dataTypes.ReadNextFloat(packetData);
int explosionBlockCount = protocolVersion >= MC_1_17_Version
@ -1972,6 +1984,7 @@ namespace MinecraftClient.Protocol.Handlers
return false; //Ignored packet
}
return true; //Packet processed
#if Release
}
catch (Exception innerException)
{
@ -1986,6 +1999,7 @@ namespace MinecraftClient.Protocol.Handlers
innerException.GetType()),
innerException);
}
#endif
}
/// <summary>

View file

@ -264,9 +264,7 @@ namespace MinecraftClient.Protocol.Handlers
int[] palette = new int[paletteLength];
for (int i = 0; i < paletteLength; i++)
{
palette[i] = dataTypes.ReadNextVarInt(cache);
}
// Bit mask covering bitsPerBlock bits
// EG, if bitsPerBlock = 5, valueMask = 00011111 in binary