Example #1
0
        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();
            }
        }