64 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|