Add command to check player health and saturation

This commit is contained in:
ReinforceZwei 2020-04-03 23:31:25 +08:00 committed by ORelio
parent fe020c74c7
commit 975e6d4daa
5 changed files with 31 additions and 8 deletions

View file

@ -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<string, object> localVars)
{
return "Health: " + handler.GetHealth() + "\n[MCC] Saturation: " + handler.GetSaturation(); // any good ways to print multiple lines?
}
}
}

View file

@ -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<int, Inventory.Item> playerItems;
private float playerHealth;
private int playerFoodSaturation;
// Entity handling
private Dictionary<int, Entity> entities = new Dictionary<int, Entity>();
@ -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<ChatBot> GetLoadedChatBots()
@ -1540,8 +1542,10 @@ namespace MinecraftClient
/// Called when client player's health changed, e.g. getting attack
/// </summary>
/// <param name="health">Player current health</param>
public void OnUpdateHealth(float health)
public void OnUpdateHealth(float health, int Food)
{
playerHealth = health;
playerFoodSaturation = Food;
if (health <= 0)
{
if (Settings.AutoRespawn)

View file

@ -101,6 +101,7 @@
<Compile Include="Commands\Script.cs" />
<Compile Include="Commands\Send.cs" />
<Compile Include="Commands\Set.cs" />
<Compile Include="Commands\Status.cs" />
<Compile Include="Commands\UseItem.cs" />
<Compile Include="Inventory\Container.cs" />
<Compile Include="Inventory\ContainerType.cs" />

View file

@ -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

View file

@ -212,7 +212,7 @@ namespace MinecraftClient.Protocol
/// <param name="item">Item (may be null for empty slot)</param>
void OnSetSlot(byte inventoryID, short slotID, Item item);
void OnUpdateHealth(float health);
void OnUpdateHealth(float health, int Food);
/// <summary>
/// Called when the Player entity ID has been received from the server