public async Task WriteSlotAsync(ItemStack slot) { if (slot is null) { slot = new ItemStack(0, 0) { Present = true } } ; var item = slot.GetItem(); await WriteBooleanAsync(slot.Present); if (slot.Present) { await WriteVarIntAsync(item.Id); await WriteByteAsync((sbyte)slot.Count); var writer = new NbtWriter(this, ""); var itemMeta = slot.ItemMeta; //TODO write enchants if (itemMeta.HasTags()) { writer.WriteBool("Unbreakable", itemMeta.Unbreakable); if (itemMeta.Durability > 0) { writer.WriteInt("Damage", itemMeta.Durability); } if (itemMeta.CustomModelData > 0) { writer.WriteInt("CustomModelData", itemMeta.CustomModelData); } if (itemMeta.CanDestroy != null) { writer.WriteListStart("CanDestroy", NbtTagType.String, itemMeta.CanDestroy.Count); foreach (var block in itemMeta.CanDestroy) { writer.WriteString(block); } writer.EndList(); } if (itemMeta.Name != null) { writer.WriteCompoundStart("display"); writer.WriteString("Name", new List <ChatMessage> { (ChatMessage)itemMeta.Name }.ToJson()); if (itemMeta.Lore != null) { writer.WriteListStart("Lore", NbtTagType.String, itemMeta.Lore.Count); foreach (var lore in itemMeta.Lore) { writer.WriteString(new List <ChatMessage> { (ChatMessage)lore }.ToJson()); } writer.EndList(); } writer.EndCompound(); } else if (itemMeta.Lore != null) { writer.WriteCompoundStart("display"); writer.WriteListStart("Lore", NbtTagType.String, itemMeta.Lore.Count); foreach (var lore in itemMeta.Lore) { writer.WriteString(new List <ChatMessage> { (ChatMessage)lore }.ToJson()); } writer.EndList(); writer.EndCompound(); } } writer.WriteString("id", item.UnlocalizedName); writer.WriteByte("Count", (byte)slot.Count); writer.EndCompound(); writer.TryFinish(); } }