public static FXCreateGroupEntry ReadFXCreateGroupEntry(this ByteReader reader)
 {
     var data = new FXCreateGroupEntry();
     data.EffectNameHash = reader.ReadUInt32();
     data.Flags = reader.ReadUInt16();
     data.TargetBoneNameHash = reader.ReadUInt32();
     data.BoneNameHash = reader.ReadUInt32();
     int count = reader.ReadByte();
     for (int i = 0; i < count; i++)
     {
         data.FXCreateData.Add(reader.ReadFXCreateGroupItem());
     }
     return data;
 }
 public static void WriteFXCreateGroupEntry(this ByteWriter writer, FXCreateGroupEntry data)
 {
     if(data == null)
     {
         data = new FXCreateGroupEntry();
     }
     writer.WriteUInt32(data.EffectNameHash);
     writer.WriteUInt16(data.Flags);
     writer.WriteUInt32(data.TargetBoneNameHash);
     writer.WriteUInt32(data.BoneNameHash);
     int count = data.FXCreateData.Count;
     if (count > 0xFF)
     {
         throw new IOException("FXCreateData list too big > 255!");
     }
     writer.WriteByte((byte)count);
     foreach (var fx in data.FXCreateData)
     {
         writer.WriteFXCreateGroupItem(fx);
     }
 }