mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Fix crash on unknown packet IDs on some Forge servers (#1422)
* Fix unknown packet ID cause crash (#1419) * Ignore unknown packet ID only if forge enabled
This commit is contained in:
parent
0cbe543c30
commit
939c8fb383
3 changed files with 67 additions and 12 deletions
|
|
@ -38,6 +38,8 @@ namespace MinecraftClient.Protocol.Handlers.PacketPalettes
|
||||||
|
|
||||||
private Dictionary<PacketTypesOut, int> reverseMappingOut = new Dictionary<PacketTypesOut, int>();
|
private Dictionary<PacketTypesOut, int> reverseMappingOut = new Dictionary<PacketTypesOut, int>();
|
||||||
|
|
||||||
|
private bool forgeEnabled = false;
|
||||||
|
|
||||||
public PacketTypePalette()
|
public PacketTypePalette()
|
||||||
{
|
{
|
||||||
foreach (var p in GetListIn())
|
foreach (var p in GetListIn())
|
||||||
|
|
@ -57,7 +59,19 @@ namespace MinecraftClient.Protocol.Handlers.PacketPalettes
|
||||||
/// <returns>Packet type</returns>
|
/// <returns>Packet type</returns>
|
||||||
public PacketTypesIn GetIncommingTypeById(int packetId)
|
public PacketTypesIn GetIncommingTypeById(int packetId)
|
||||||
{
|
{
|
||||||
return GetListIn()[packetId];
|
PacketTypesIn p;
|
||||||
|
if (GetListIn().TryGetValue(packetId, out p))
|
||||||
|
{
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
else if (forgeEnabled)
|
||||||
|
{
|
||||||
|
if (Settings.DebugMessages)
|
||||||
|
ConsoleIO.WriteLogLine("Ignoring unknown packet ID of 0x" + packetId.ToString("X2"));
|
||||||
|
return PacketTypesIn.Unknown;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new KeyNotFoundException("Packet ID of 0x" + packetId.ToString("X2") + " doesn't exist!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -77,7 +91,19 @@ namespace MinecraftClient.Protocol.Handlers.PacketPalettes
|
||||||
/// <returns>Packet type</returns>
|
/// <returns>Packet type</returns>
|
||||||
public PacketTypesOut GetOutgoingTypeById(int packetId)
|
public PacketTypesOut GetOutgoingTypeById(int packetId)
|
||||||
{
|
{
|
||||||
return GetListOut()[packetId];
|
PacketTypesOut p;
|
||||||
|
if (GetListOut().TryGetValue(packetId, out p))
|
||||||
|
{
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
else if (forgeEnabled)
|
||||||
|
{
|
||||||
|
if (Settings.DebugMessages)
|
||||||
|
ConsoleIO.WriteLogLine("Ignoring unknown packet ID of 0x" + packetId.ToString("X2"));
|
||||||
|
return PacketTypesOut.Unknown;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new KeyNotFoundException("Packet ID of 0x" + packetId.ToString("X2") + " doesn't exist!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -108,5 +134,19 @@ namespace MinecraftClient.Protocol.Handlers.PacketPalettes
|
||||||
{
|
{
|
||||||
return GetListOut();
|
return GetListOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enable forge or disable forge
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Have a rare chance that forge mod may modify packet ID.
|
||||||
|
/// Ignore packet type not found when forge enabled to
|
||||||
|
/// prevent program crash.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="enabled"></param>
|
||||||
|
public void SetForgeEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
this.forgeEnabled = enabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ namespace MinecraftClient.Protocol.Handlers
|
||||||
public class PacketTypeHandler
|
public class PacketTypeHandler
|
||||||
{
|
{
|
||||||
private int protocol;
|
private int protocol;
|
||||||
|
private bool forgeEnabled = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialize the handler
|
/// Initialize the handler
|
||||||
|
|
@ -22,6 +23,16 @@ namespace MinecraftClient.Protocol.Handlers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialize the handler
|
/// Initialize the handler
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="protocol">Protocol version to use</param>
|
||||||
|
/// <param name="forgeEnabled">Is forge enabled or not</param>
|
||||||
|
public PacketTypeHandler(int protocol, bool forgeEnabled)
|
||||||
|
{
|
||||||
|
this.protocol = protocol;
|
||||||
|
this.forgeEnabled = forgeEnabled;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Initialize the handler
|
||||||
|
/// </summary>
|
||||||
public PacketTypeHandler() { }
|
public PacketTypeHandler() { }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -39,25 +50,29 @@ namespace MinecraftClient.Protocol.Handlers
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PacketTypePalette GetTypeHandler(int protocol)
|
public PacketTypePalette GetTypeHandler(int protocol)
|
||||||
{
|
{
|
||||||
|
PacketTypePalette p;
|
||||||
if (protocol > Protocol18Handler.MC1165Version)
|
if (protocol > Protocol18Handler.MC1165Version)
|
||||||
throw new NotImplementedException(Translations.Get("exception.palette.packet"));
|
throw new NotImplementedException(Translations.Get("exception.palette.packet"));
|
||||||
if (protocol <= Protocol18Handler.MC18Version)
|
if (protocol <= Protocol18Handler.MC18Version)
|
||||||
return new PacketPalette17();
|
p = new PacketPalette17();
|
||||||
else if (protocol <= Protocol18Handler.MC1112Version)
|
else if (protocol <= Protocol18Handler.MC1112Version)
|
||||||
return new PacketPalette110();
|
p = new PacketPalette110();
|
||||||
else if (protocol <= Protocol18Handler.MC112Version)
|
else if (protocol <= Protocol18Handler.MC112Version)
|
||||||
return new PacketPalette112();
|
p = new PacketPalette112();
|
||||||
else if (protocol <= Protocol18Handler.MC1122Version)
|
else if (protocol <= Protocol18Handler.MC1122Version)
|
||||||
return new PacketPalette1122();
|
p = new PacketPalette1122();
|
||||||
else if (protocol <= Protocol18Handler.MC114Version)
|
else if (protocol <= Protocol18Handler.MC114Version)
|
||||||
return new PacketPalette113();
|
p = new PacketPalette113();
|
||||||
else if (protocol <= Protocol18Handler.MC115Version)
|
else if (protocol <= Protocol18Handler.MC115Version)
|
||||||
return new PacketPalette114();
|
p = new PacketPalette114();
|
||||||
else if (protocol <= Protocol18Handler.MC1152Version)
|
else if (protocol <= Protocol18Handler.MC1152Version)
|
||||||
return new PacketPalette115();
|
p = new PacketPalette115();
|
||||||
else if (protocol <= Protocol18Handler.MC1161Version)
|
else if (protocol <= Protocol18Handler.MC1161Version)
|
||||||
return new PacketPalette116();
|
p = new PacketPalette116();
|
||||||
else return new PacketPalette1162();
|
else p = new PacketPalette1162();
|
||||||
|
|
||||||
|
p.SetForgeEnabled(this.forgeEnabled);
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ namespace MinecraftClient.Protocol.Handlers
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
this.pForge = new Protocol18Forge(forgeInfo, protocolVersion, dataTypes, this, handler);
|
this.pForge = new Protocol18Forge(forgeInfo, protocolVersion, dataTypes, this, handler);
|
||||||
this.pTerrain = new Protocol18Terrain(protocolVersion, dataTypes, handler);
|
this.pTerrain = new Protocol18Terrain(protocolVersion, dataTypes, handler);
|
||||||
this.packetPalette = new PacketTypeHandler(protocolVersion).GetTypeHandler();
|
this.packetPalette = new PacketTypeHandler(protocolVersion, forgeInfo != null).GetTypeHandler();
|
||||||
|
|
||||||
if (handler.GetTerrainEnabled() && protocolversion > MC1165Version)
|
if (handler.GetTerrainEnabled() && protocolversion > MC1165Version)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue