diff --git a/MinecraftClient/McTcpClient.cs b/MinecraftClient/McTcpClient.cs index 9346b3e6..e0419185 100644 --- a/MinecraftClient/McTcpClient.cs +++ b/MinecraftClient/McTcpClient.cs @@ -57,6 +57,9 @@ namespace MinecraftClient private object lastKeepAliveLock = new object(); private int playerEntityID; + // not really understand the Inventory Class + // so I use a Dict instead for player inventory + private Dictionary playerItems; // auto attack private class Entity @@ -763,6 +766,23 @@ namespace MinecraftClient } } + /// + /// When received window items from server. + /// + /// + /// + public void OnWindowItems(int type, Dictionary itemList) + { + // player inventory + //if (type == 0) + // playerItems = itemList; + foreach(KeyValuePair pair in itemList) + { + ConsoleIO.WriteLine("Slot: "+pair.Key+" itemID:"+pair.Value.id); + } + ConsoleIO.WriteLine("Type: "+type); + } + /// /// When connection has been lost, login was denied or played was kicked from the server /// diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index f8dba950..bdca756e 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -510,8 +510,11 @@ namespace MinecraftClient.Protocol.Handlers } break; case PacketIncomingType.WindowItems: - if (handler.GetInventoryEnabled()) + if (handler.GetInventoryEnabled()||true) { + /* + * Following commented code not working + * byte id = dataTypes.ReadNextByte(packetData); short elements = dataTypes.ReadNextShort(packetData); @@ -528,6 +531,24 @@ namespace MinecraftClient.Protocol.Handlers dataTypes.ReadNextNbt(packetData); } } + */ + byte id = dataTypes.ReadNextByte(packetData); + short elements = dataTypes.ReadNextShort(packetData); + Dictionary itemsList = new Dictionary(); // index is SlotID + for(int i = 0; i < elements; i++) + { + bool haveItem = dataTypes.ReadNextBool(packetData); + if (haveItem) + { + int itemID = dataTypes.ReadNextVarInt(packetData); + byte itemCount = dataTypes.ReadNextByte(packetData); + dataTypes.ReadNextNbt(packetData); + + Item item = new Item(itemID, itemCount); + itemsList.Add(i, item); + } + } + handler.OnWindowItems(id, itemsList); } break; case PacketIncomingType.ResourcePackSend: diff --git a/MinecraftClient/Protocol/IMinecraftComHandler.cs b/MinecraftClient/Protocol/IMinecraftComHandler.cs index 866e6658..70f22d93 100644 --- a/MinecraftClient/Protocol/IMinecraftComHandler.cs +++ b/MinecraftClient/Protocol/IMinecraftComHandler.cs @@ -144,6 +144,8 @@ namespace MinecraftClient.Protocol void OnEntityStatus(int EntityID, byte EntityStatus); + void OnWindowItems(int type, Dictionary itemList); + void SetPlayerEntityID(int EntityID); } }