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);
}