using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MinecraftClient.Inventory { /// /// Represents an item inside a Container /// public class Item { /// /// Item Type /// public ItemType Type; /// /// Item Count /// public int Count; /// /// Item Metadata /// public Dictionary? NBT; /// /// Create an item with ItemType, Count and Metadata /// /// Type of the item /// Item Count /// Item Metadata public Item(ItemType itemType, int count, Dictionary? nbt) { this.Type = itemType; this.Count = count; this.NBT = nbt; } /// /// Check if the item slot is empty /// /// TRUE if the item is empty public bool IsEmpty { get { return Type == ItemType.Air || Count == 0; } } /// /// Retrieve item display name from NBT properties. NULL if no display name is defined. /// public string DisplayName { get { if (NBT != null && NBT.ContainsKey("display")) { var displayProperties = NBT["display"] as Dictionary; if (displayProperties != null && displayProperties.ContainsKey("Name")) { string displayName = displayProperties["Name"] as string; if (!String.IsNullOrEmpty(displayName)) return MinecraftClient.Protocol.ChatParser.ParseText(displayProperties["Name"].ToString()); } } return null; } } /// /// Retrieve item lores from NBT properties. Returns null if no lores is defined. /// public string[] Lores { get { List lores = new List(); if (NBT != null && NBT.ContainsKey("display")) { var displayProperties = NBT["display"] as Dictionary; if (displayProperties != null && displayProperties.ContainsKey("Lore")) { object[] displayName = displayProperties["Lore"] as object[]; foreach (string st in displayName) { string str = MinecraftClient.Protocol.ChatParser.ParseText(st.ToString()); lores.Add(str); } return lores.ToArray(); } } return null; } } /// /// Retrieve item damage from NBT properties. Returns 0 if no damage is defined. /// public int Damage { get { if (NBT != null && NBT.ContainsKey("Damage")) { object damage = NBT["Damage"]; if (damage != null) { return int.Parse(damage.ToString()); } } return 0; } } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendFormat("x{0,-2} {1}", Count, Type.ToString()); string displayName = DisplayName; if (!String.IsNullOrEmpty(displayName)) { sb.AppendFormat(" - {0}§8", displayName); } int damage = Damage; if (damage != 0) { sb.AppendFormat(" | {0}: {1}", Translations.Get("cmd.inventory.damage"), damage); } return sb.ToString(); } } }