public static void Write(EndianBinaryWriter w, Metadata m) { if (m == null) { w.Write((byte)0x7F); return; } foreach (MetaField mf in m.Fields.Values) { w.Write((byte)((int)mf.Type << 5 | mf.ID)); switch (mf.Type) { case MetaType.Byte: w.Write(mf.Byte); break; case MetaType.Short: w.Write(mf.Short); break; case MetaType.Int: w.Write(mf.Int); break; case MetaType.Float: w.Write(mf.Float); break; case MetaType.String: Packet.WriteString8(w, mf.String); break; case MetaType.Item: //when this is true, we can remove that parameter SlotItem.Write(w, mf.Item); break; case MetaType.Vector: w.Write(mf.Vector.X); w.Write(mf.Vector.Y); w.Write(mf.Vector.Z); break; case MetaType.VectorF: w.Write((float)mf.VectorF.X); w.Write((float)mf.VectorF.Y); w.Write((float)mf.VectorF.Z); break; default: throw new NotImplementedException(); } } w.Write((byte)0x7F); }