Crash Fix, add Respawn method (#1227)

* Crashes Fix
* Add Respawn
* Crashes Fix
* Update McClient.cs
* Update McClient.cs
* Fix Air item count to 0
This commit is contained in:
Рома Данилов 2020-08-22 14:17:31 +05:00 committed by GitHub
parent c2e2e85063
commit 017d9b1840
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 25 deletions

View file

@ -1248,6 +1248,16 @@ namespace MinecraftClient
return Handler.GetMaxChatMessageLength(); return Handler.GetMaxChatMessageLength();
} }
/// <summary>
/// Respawn player
/// </summary>
protected bool Respawn()
{
if (Handler.GetHealth() <= 0)
return Handler.SendRespawnPacket();
else return false;
}
/// <summary> /// <summary>
/// Command runner definition. /// Command runner definition.
/// Returned string will be the output of the command /// Returned string will be the output of the command

View file

@ -2172,8 +2172,6 @@ namespace MinecraftClient
if (entities.ContainsKey(entityID)) if (entities.ContainsKey(entityID))
{ {
Entity entity = entities[entityID]; Entity entity = entities[entityID];
try
{
entity.Metadata = metadata; entity.Metadata = metadata;
if (entity.Type.ContainsItem() && metadata.ContainsKey(7) && metadata[7] != null && metadata[7].GetType() == typeof(Item)) if (entity.Type.ContainsItem() && metadata.ContainsKey(7) && metadata[7] != null && metadata[7].GetType() == typeof(Item))
{ {
@ -2183,24 +2181,23 @@ namespace MinecraftClient
} }
catch catch
{ {
entity.Item = new Item(ItemType.Air, 1, null); entity.Item = new Item(ItemType.Air, 0, null);
} }
} }
if (metadata.ContainsKey(6) && metadata[6].GetType() == typeof(Int32)) if (metadata.ContainsKey(6) && metadata[6] != null && metadata[6].GetType() == typeof(Int32))
{ {
entity.Pose = (EntityPose)metadata[6]; entity.Pose = (EntityPose)metadata[6];
} }
if (metadata.ContainsKey(2) && metadata.ContainsValue(metadata[2]) && metadata[2].GetType() == typeof(string)) if (metadata.ContainsKey(2) && metadata[2] != null && metadata[2].GetType() == typeof(string))
{ {
entity.CustomNameJson = metadata[2].ToString(); entity.CustomNameJson = metadata[2].ToString();
entity.CustomName = ChatParser.ParseText(metadata[2].ToString()); entity.CustomName = ChatParser.ParseText(metadata[2].ToString());
} }
if (metadata.ContainsKey(3) && metadata.ContainsValue(metadata[3]) && metadata[3].GetType() == typeof(bool)) if (metadata.ContainsKey(3) && metadata[3] != null && metadata[3].GetType() == typeof(bool))
{ {
entity.IsCustomNameVisible = (bool)metadata[3]; entity.IsCustomNameVisible = bool.Parse(metadata[3].ToString());
} }
DispatchBotEvent(bot => bot.OnEntityMetadata(entity, metadata)); DispatchBotEvent(bot => bot.OnEntityMetadata(entity, metadata));
} catch { }
} }
} }
#endregion #endregion

View file

@ -911,7 +911,7 @@ namespace MinecraftClient.Protocol.Handlers
int EntityID = dataTypes.ReadNextVarInt(packetData); int EntityID = dataTypes.ReadNextVarInt(packetData);
Dictionary<int, object> metadata = dataTypes.ReadNextMetadata(packetData, itemPalette); Dictionary<int, object> metadata = dataTypes.ReadNextMetadata(packetData, itemPalette);
int healthField = protocolversion >= MC114Version ? 8 : 7; // Health is field no. 7 in 1.10+ and 8 in 1.14+ 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.OnEntityHealth(EntityID, (float)metadata[healthField]);
handler.OnEntityMetadata(EntityID, metadata); handler.OnEntityMetadata(EntityID, metadata);
} }