using System; using System.Collections.Generic; using System.Linq; using System.Text; using MinecraftClient.Inventory; namespace MinecraftClient.Commands { class Inventory : Command { public override string CMDName { get { return "inventory"; } } public override string CMDDesc { get { return "inventory <|player|container> >: Interact with inventories"; } } public override string Run(McTcpClient handler, string command, Dictionary localVars) { if (handler.GetInventoryEnabled()) { string[] args = getArgs(command); if (args.Length >= 1) { try { int inventoryId; if (args[0].ToLower() == "player") { // player inventory is always ID 0 inventoryId = 0; } else if (args[0].ToLower() == "container") { List availableIds = handler.GetInventories().Keys.ToList(); availableIds.Remove(0); // remove player inventory ID from list if (availableIds.Count == 1) inventoryId = availableIds[0]; // one container, use it else return "Cannot find container, please retry with explicit ID"; } else inventoryId = int.Parse(args[0]); string action = args.Length > 1 ? args[1].ToLower() : "list"; switch (action) { case "close": if (handler.CloseInventory(inventoryId)) return "Closing Inventoy #" + inventoryId; else return "Failed to close Inventory #" + inventoryId; case "list": Container inventory = handler.GetInventory(inventoryId); if(inventory==null) return "Inventory #" + inventoryId + " do not exist"; List response = new List(); response.Add("Inventory #" + inventoryId + " - " + inventory.Title + "§8"); foreach (KeyValuePair item in inventory.Items) { string displayName = item.Value.DisplayName; if (String.IsNullOrEmpty(displayName)) response.Add(String.Format(" #{0}: {1} x{2}", item.Key, item.Value.Type, item.Value.Count)); else response.Add(String.Format(" #{0}: {1} x{2} - {3}§8", item.Key, item.Value.Type, item.Value.Count, displayName)); } if (inventoryId == 0) response.Add("Your selected hotbar is " + (handler.GetCurrentSlot() + 1)); return String.Join("\n", response.ToArray()); case "click": if (args.Length == 3) { int slot = int.Parse(args[2]); handler.ClickWindowSlot(inventoryId, slot); return "Clicking slot " + slot + " in window #" + inventoryId; } else return CMDDesc; default: return CMDDesc; } } catch (FormatException) { return CMDDesc; } } else { Dictionary inventories = handler.GetInventories(); List response = new List(); response.Add("Inventories:"); foreach (var inventory in inventories) response.Add(String.Format(" #{0}: {1}", inventory.Key, inventory.Value.Title + "§8")); response.Add(CMDDesc); return String.Join("\n", response); } } else return "Please enable inventoryhandling in config to use this command."; } } }