TrueCraft/TrueCraft.API/MetadataEntry.cs
2014-12-27 00:21:19 -07:00

64 lines
1.7 KiB
C#

using System;
using System.Reflection;
using TrueCraft.API.Networking;
namespace TrueCraft.API
{
public abstract class MetadataEntry
{
public abstract byte Identifier { get; }
public abstract string FriendlyName { get; }
public abstract void FromStream(IMinecraftStream stream);
public abstract void WriteTo(IMinecraftStream stream, byte index);
internal byte Index { get; set; }
public static implicit operator MetadataEntry(byte value)
{
return new MetadataByte(value);
}
public static implicit operator MetadataEntry(short value)
{
return new MetadataShort(value);
}
public static implicit operator MetadataEntry(int value)
{
return new MetadataInt(value);
}
public static implicit operator MetadataEntry(float value)
{
return new MetadataFloat(value);
}
public static implicit operator MetadataEntry(string value)
{
return new MetadataString(value);
}
public static implicit operator MetadataEntry(ItemStack value)
{
return new MetadataSlot(value);
}
protected byte GetKey(byte index)
{
Index = index; // Cheat to get this for ToString
return (byte)((Identifier << 5) | (index & 0x1F));
}
public override string ToString()
{
Type type = GetType();
FieldInfo[] fields = type.GetFields();
string result = FriendlyName + "[" + Index + "]: ";
if (fields.Length != 0)
result += fields[0].GetValue(this).ToString();
return result;
}
}
}