public void Serialize(MinecraftStream stream) { using var packetStream = new MinecraftStream(); packetStream.WriteBoolean(this.Reset); packetStream.WriteAdvancements(this.Advancements); //Not sure what this is for packetStream.WriteVarInt(this.RemovedAdvancements.Count); foreach (var removed in this.RemovedAdvancements) { packetStream.WriteString(removed); } //Write progress for advancements foreach (var(name, advancement) in this.Advancements) { packetStream.WriteVarInt(advancement.Criteria.Count); foreach (var criteria in advancement.Criteria) { packetStream.WriteString(criteria.Identifier); packetStream.WriteBoolean(criteria.Achieved); if (criteria.Achieved) { packetStream.WriteLong(criteria.AchievedAt.Value.ToUnixTimeMilliseconds()); } } } stream.Lock.Wait(); stream.WriteVarInt(this.Id.GetVarIntLength() + (int)packetStream.Length); stream.WriteVarInt(this.Id); packetStream.Position = 0; packetStream.CopyTo(stream); stream.Lock.Release(); }