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