diff --git a/MinecraftClient/McTcpClient.cs b/MinecraftClient/McTcpClient.cs index fa1238be..eef13a1d 100644 --- a/MinecraftClient/McTcpClient.cs +++ b/MinecraftClient/McTcpClient.cs @@ -33,7 +33,9 @@ namespace MinecraftClient private bool terrainAndMovementsEnabled; private bool terrainAndMovementsRequested = false; - private bool inventoryHandling; + private bool inventoryHandlingEnabled; + private bool inventoryHandlingRequested = false; + private object locationLock = new object(); private bool locationReceived = false; private World world = new World(); @@ -106,7 +108,7 @@ namespace MinecraftClient private void StartClient(string user, string uuid, string sessionID, string server_ip, ushort port, int protocolversion, ForgeInfo forgeInfo, bool singlecommand, string command) { terrainAndMovementsEnabled = Settings.TerrainAndMovements; - inventoryHandling = Settings.InventoryHandling; + inventoryHandlingEnabled = Settings.InventoryHandling; bool retry = false; this.sessionid = sessionID; @@ -393,6 +395,12 @@ namespace MinecraftClient Settings.MCSettings_MainHand); foreach (ChatBot bot in bots) bot.AfterGameJoined(); + if (inventoryHandlingRequested) + { + inventoryHandlingRequested = false; + inventoryHandlingEnabled = true; + ConsoleIO.WriteLogLine("Inventory handling is now enabled."); + } } /// @@ -426,7 +434,7 @@ namespace MinecraftClient /// public bool GetInventoryEnabled() { - return inventoryHandling; + return inventoryHandlingEnabled; } /// @@ -455,6 +463,32 @@ namespace MinecraftClient return true; } + /// + /// Enable or disable Inventories. + /// Please note that Enabling will be deferred until next relog. + /// + /// Enabled + /// TRUE if the setting was applied immediately, FALSE if delayed. + public bool SetInventoryEnabled(bool enabled) + { + if (enabled) + { + if (!inventoryHandlingEnabled) + { + inventoryHandlingRequested = true; + return false; + } + } + else + { + inventoryHandlingEnabled = false; + inventoryHandlingRequested = false; + inventories.Clear(); + playerInventory = null; + } + return true; + } + /// /// Called when the server sends a new player location, /// or if a ChatBot whishes to update the player's location. diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 091b6f3e..48f3e0d1 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -68,6 +68,12 @@ namespace MinecraftClient.Protocol.Handlers handler.SetTerrainEnabled(false); } + if (handler.GetInventoryEnabled() && protocolversion > MC114Version) + { + ConsoleIO.WriteLineFormatted("ยง8Inventories are currently not handled for that MC version."); + handler.SetInventoryEnabled(false); + } + if (protocolversion >= MC113Version) { if (protocolVersion > MC1142Version && handler.GetTerrainEnabled()) @@ -465,7 +471,7 @@ namespace MinecraftClient.Protocol.Handlers compression_treshold = dataTypes.ReadNextVarInt(packetData); break; case PacketIncomingType.OpenWindow: - if (protocolversion < MC1141Version && handler.GetInventoryEnabled()) + if (handler.GetInventoryEnabled()) { byte windowID = dataTypes.ReadNextByte(packetData); string type = dataTypes.ReadNextString(packetData).Replace("minecraft:", "").ToUpper(); @@ -478,7 +484,7 @@ namespace MinecraftClient.Protocol.Handlers } break; case PacketIncomingType.CloseWindow: - if (protocolversion < MC1141Version && handler.GetInventoryEnabled()) + if (handler.GetInventoryEnabled()) { byte windowID = dataTypes.ReadNextByte(packetData); @@ -486,7 +492,7 @@ namespace MinecraftClient.Protocol.Handlers } break; case PacketIncomingType.WindowItems: - if (protocolversion < MC1141Version && handler.GetInventoryEnabled()) + if (handler.GetInventoryEnabled()) { byte id = dataTypes.ReadNextByte(packetData); short elements = dataTypes.ReadNextShort(packetData); diff --git a/MinecraftClient/Protocol/IMinecraftComHandler.cs b/MinecraftClient/Protocol/IMinecraftComHandler.cs index 52701c2e..3e2879de 100644 --- a/MinecraftClient/Protocol/IMinecraftComHandler.cs +++ b/MinecraftClient/Protocol/IMinecraftComHandler.cs @@ -29,6 +29,7 @@ namespace MinecraftClient.Protocol bool GetTerrainEnabled(); bool SetTerrainEnabled(bool enabled); bool GetInventoryEnabled(); + bool SetInventoryEnabled(bool enabled); /// /// Called when a server was successfully joined