From 017d9b1840840f58995275a75b06930dd9227957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=20=D0=94=D0=B0=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= <35975332+Nekiplay@users.noreply.github.com> Date: Sat, 22 Aug 2020 14:17:31 +0500 Subject: [PATCH] Crash Fix, add Respawn method (#1227) * Crashes Fix * Add Respawn * Crashes Fix * Update McClient.cs * Update McClient.cs * Fix Air item count to 0 --- MinecraftClient/ChatBot.cs | 10 +++++ MinecraftClient/McClient.cs | 45 +++++++++---------- .../Protocol/Handlers/Protocol18.cs | 2 +- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/MinecraftClient/ChatBot.cs b/MinecraftClient/ChatBot.cs index 7f88fa1e..d1bf53bd 100644 --- a/MinecraftClient/ChatBot.cs +++ b/MinecraftClient/ChatBot.cs @@ -1247,6 +1247,16 @@ namespace MinecraftClient { return Handler.GetMaxChatMessageLength(); } + + /// + /// Respawn player + /// + protected bool Respawn() + { + if (Handler.GetHealth() <= 0) + return Handler.SendRespawnPacket(); + else return false; + } /// /// Command runner definition. diff --git a/MinecraftClient/McClient.cs b/MinecraftClient/McClient.cs index 14eb2aa2..fde95433 100644 --- a/MinecraftClient/McClient.cs +++ b/MinecraftClient/McClient.cs @@ -2172,35 +2172,32 @@ namespace MinecraftClient if (entities.ContainsKey(entityID)) { Entity entity = entities[entityID]; - try + entity.Metadata = metadata; + if (entity.Type.ContainsItem() && metadata.ContainsKey(7) && metadata[7] != null && metadata[7].GetType() == typeof(Item)) { - entity.Metadata = metadata; - if (entity.Type.ContainsItem() && metadata.ContainsKey(7) && metadata[7] != null && metadata[7].GetType() == typeof(Item)) + try { - try - { - entity.Item = (Item)metadata[7]; - } - catch - { - entity.Item = new Item(ItemType.Air, 1, null); - } + entity.Item = (Item)metadata[7]; } - if (metadata.ContainsKey(6) && metadata[6].GetType() == typeof(Int32)) + catch { - entity.Pose = (EntityPose)metadata[6]; + entity.Item = new Item(ItemType.Air, 0, null); } - if (metadata.ContainsKey(2) && metadata.ContainsValue(metadata[2]) && metadata[2].GetType() == typeof(string)) - { - entity.CustomNameJson = metadata[2].ToString(); - entity.CustomName = ChatParser.ParseText(metadata[2].ToString()); - } - if (metadata.ContainsKey(3) && metadata.ContainsValue(metadata[3]) && metadata[3].GetType() == typeof(bool)) - { - entity.IsCustomNameVisible = (bool)metadata[3]; - } - DispatchBotEvent(bot => bot.OnEntityMetadata(entity, metadata)); - } catch { } + } + if (metadata.ContainsKey(6) && metadata[6] != null && metadata[6].GetType() == typeof(Int32)) + { + entity.Pose = (EntityPose)metadata[6]; + } + if (metadata.ContainsKey(2) && metadata[2] != null && metadata[2].GetType() == typeof(string)) + { + entity.CustomNameJson = metadata[2].ToString(); + entity.CustomName = ChatParser.ParseText(metadata[2].ToString()); + } + if (metadata.ContainsKey(3) && metadata[3] != null && metadata[3].GetType() == typeof(bool)) + { + entity.IsCustomNameVisible = bool.Parse(metadata[3].ToString()); + } + DispatchBotEvent(bot => bot.OnEntityMetadata(entity, metadata)); } } #endregion diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 5398c2e9..98b8b5f6 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -911,7 +911,7 @@ namespace MinecraftClient.Protocol.Handlers int EntityID = dataTypes.ReadNextVarInt(packetData); Dictionary metadata = dataTypes.ReadNextMetadata(packetData, itemPalette); int healthField = protocolversion >= MC114Version ? 8 : 7; // Health is field no. 7 in 1.10+ and 8 in 1.14+ - if (metadata.ContainsKey(healthField) && metadata[healthField].GetType() == typeof(float)) + if (metadata.ContainsKey(healthField) && metadata[healthField] != null && metadata[healthField].GetType() == typeof(float)) handler.OnEntityHealth(EntityID, (float)metadata[healthField]); handler.OnEntityMetadata(EntityID, metadata); }