From cf87169737fdeeee7d4b160688bbed7194e46147 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 24 May 2013 07:30:39 +0000 Subject: Refactored cInventory to use cItemGrid for the actual Storage This makes the API more orthogonal and is easier to use in the plugins. Also changes in the inventory are now propagated to the needed places (armor updates to BroadcastEntityEquipment etc.) even when the inventory is changed by a plugin. git-svn-id: http://mc-server.googlecode.com/svn/trunk@1503 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Protocol/Protocol125.cpp | 3 +-- source/Protocol/Protocol132.cpp | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) (limited to 'source/Protocol') diff --git a/source/Protocol/Protocol125.cpp b/source/Protocol/Protocol125.cpp index 17def7c8a..a4b5feb82 100644 --- a/source/Protocol/Protocol125.cpp +++ b/source/Protocol/Protocol125.cpp @@ -874,8 +874,7 @@ void cProtocol125::SendWeather(eWeather a_Weather) void cProtocol125::SendWholeInventory(const cInventory & a_Inventory) { - cCSLock Lock(m_CSPacket); - SendWindowSlots(0, a_Inventory.c_NumSlots, a_Inventory.GetSlots()); + SendWholeInventory(*(a_Inventory.GetOwner().GetWindow())); } diff --git a/source/Protocol/Protocol132.cpp b/source/Protocol/Protocol132.cpp index c10338f54..50c335180 100644 --- a/source/Protocol/Protocol132.cpp +++ b/source/Protocol/Protocol132.cpp @@ -438,14 +438,24 @@ void cProtocol132::SendWholeInventory(const cWindow & a_Window) { // 1.3.2 requires player inventory slots to be sent as SetSlot packets, // otherwise it sometimes fails to update the window + + // Send the entire window: super::SendWholeInventory(a_Window); - const cItem * Slots = m_Client->GetPlayer()->GetInventory().GetSlots(); - int BaseOffset = a_Window.GetNumSlots() - cInventory::c_NumSlots + cInventory::c_MainOffset; // the number of non-inventory slots the window has; inventory follows + + // Send the player inventory and hotbar: + const cInventory & Inventory = m_Client->GetPlayer()->GetInventory(); + int BaseOffset = a_Window.GetNumSlots() - (cInventory::invNumSlots - cInventory::invInventoryOffset); // Number of non-inventory slots char WindowID = a_Window.GetWindowID(); - for (int i = 0; i < cInventory::c_NumSlots - cInventory::c_MainOffset; i++) + for (int i = 0; i < cInventory::invInventoryCount; i++) { - SendInventorySlot(WindowID, BaseOffset + i, Slots[i + cInventory::c_MainOffset]); - } // for i - Slots[] + SendInventorySlot(WindowID, BaseOffset + i, Inventory.GetInventorySlot(i)); + } // for i - Inventory[] + BaseOffset += cInventory::invInventoryCount; + for (int i = 0; i < cInventory::invHotbarCount; i++) + { + SendInventorySlot(WindowID, BaseOffset + i, Inventory.GetHotbarSlot(i)); + } // for i - Hotbar[] + // Send even the item being dragged: SendInventorySlot(-1, -1, m_Client->GetPlayer()->GetDraggingItem()); } -- cgit v1.2.3