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); // Send the player inventory and hotbar: cPlayer * Player = m_Client->GetPlayer(); const cInventory & Inventory = Player->GetInventory(); int BaseOffset = a_Window.GetNumSlots() - (cInventory::invNumSlots - cInventory::invInventoryOffset); // Number of non-inventory slots char WindowID = a_Window.GetWindowID(); for (short i = 0; i < cInventory::invInventoryCount; i++) { SendInventorySlot(WindowID, BaseOffset + i, Inventory.GetInventorySlot(i)); } // for i - Inventory[] BaseOffset += cInventory::invInventoryCount; for (short 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, Player->GetDraggingItem()); }
void cProtocol125::SendWholeInventory(const cWindow & a_Window) { cCSLock Lock(m_CSPacket); cItems Slots; a_Window.GetSlots(*(m_Client->GetPlayer()), Slots); SendWindowSlots(a_Window.GetWindowID(), (int)Slots.size(), &(Slots[0])); }
void cProtocol125::SendWindowProperty(const cWindow & a_Window, int a_Property, int a_Value) { cCSLock Lock(m_CSPacket); WriteByte (PACKET_WINDOW_PROPERTY); WriteChar (a_Window.GetWindowID()); WriteShort(a_Property); WriteShort(a_Value); Flush(); }
void cProtocol125::SendWindowClose(const cWindow & a_Window) { if (a_Window.GetWindowType() == cWindow::wtInventory) { // Do not send inventory-window-close return; } cCSLock Lock(m_CSPacket); WriteByte(PACKET_WINDOW_CLOSE); WriteChar(a_Window.GetWindowID()); Flush(); }
void cProtocol125::SendWindowOpen(const cWindow & a_Window) { if (a_Window.GetWindowType() < 0) { // Do not send for inventory windows return; } cCSLock Lock(m_CSPacket); WriteByte (PACKET_WINDOW_OPEN); WriteChar (a_Window.GetWindowID()); WriteByte ((Byte)a_Window.GetWindowType()); WriteString(a_Window.GetWindowTitle()); WriteByte ((Byte)a_Window.GetNumNonInventorySlots()); Flush(); }