diff --git a/MinecraftClient/Commands/Status.cs b/MinecraftClient/Commands/Status.cs new file mode 100644 index 00000000..b3701739 --- /dev/null +++ b/MinecraftClient/Commands/Status.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MinecraftClient.Commands +{ + class Status : Command + { + public override string CMDName { get { return "status"; } } + public override string CMDDesc { get { return "status: Display Health and Food saturation."; } } + + public override string Run(McTcpClient handler, string command, Dictionary localVars) + { + return "Health: " + handler.GetHealth() + "\n[MCC] Saturation: " + handler.GetSaturation(); // any good ways to print multiple lines? + } + } +} diff --git a/MinecraftClient/McTcpClient.cs b/MinecraftClient/McTcpClient.cs index d6f8f79b..16b708d7 100644 --- a/MinecraftClient/McTcpClient.cs +++ b/MinecraftClient/McTcpClient.cs @@ -58,9 +58,9 @@ namespace MinecraftClient private int respawnTicks = 0; private int playerEntityID; - // not really understand the Inventory Class - // so I use a Dict instead for player inventory - //private Dictionary playerItems; + + private float playerHealth; + private int playerFoodSaturation; // Entity handling private Dictionary entities = new Dictionary(); @@ -78,6 +78,8 @@ namespace MinecraftClient public Location GetCurrentLocation() { return location; } public World GetWorld() { return world; } public Double GetServerTPS() { return serverTPS; } + public float GetHealth() { return playerHealth; } + public int GetSaturation() { return playerFoodSaturation; } // get bots list for unloading them by commands public List GetLoadedChatBots() @@ -1540,8 +1542,10 @@ namespace MinecraftClient /// Called when client player's health changed, e.g. getting attack /// /// Player current health - public void OnUpdateHealth(float health) + public void OnUpdateHealth(float health, int Food) { + playerHealth = health; + playerFoodSaturation = Food; if (health <= 0) { if (Settings.AutoRespawn) diff --git a/MinecraftClient/MinecraftClient.csproj b/MinecraftClient/MinecraftClient.csproj index 37236c4e..368e32ce 100644 --- a/MinecraftClient/MinecraftClient.csproj +++ b/MinecraftClient/MinecraftClient.csproj @@ -101,6 +101,7 @@ + diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index e4c7e539..4559fd72 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -725,10 +725,10 @@ namespace MinecraftClient.Protocol.Handlers break; case PacketIncomingType.UpdateHealth: float health = dataTypes.ReadNextFloat(packetData); - // don't need them - dataTypes.ReadNextVarInt(packetData); + int Food = dataTypes.ReadNextVarInt(packetData); + // Food Saturation, not useful dataTypes.ReadNextFloat(packetData); - handler.OnUpdateHealth(health); + handler.OnUpdateHealth(health, Food); break; default: return false; //Ignored packet diff --git a/MinecraftClient/Protocol/IMinecraftComHandler.cs b/MinecraftClient/Protocol/IMinecraftComHandler.cs index 43baa9c6..20e57c4c 100644 --- a/MinecraftClient/Protocol/IMinecraftComHandler.cs +++ b/MinecraftClient/Protocol/IMinecraftComHandler.cs @@ -212,7 +212,7 @@ namespace MinecraftClient.Protocol /// Item (may be null for empty slot) void OnSetSlot(byte inventoryID, short slotID, Item item); - void OnUpdateHealth(float health); + void OnUpdateHealth(float health, int Food); /// /// Called when the Player entity ID has been received from the server