From 3b77d6d80680b2e41ff6878aac4aa0126d6f0256 Mon Sep 17 00:00:00 2001 From: Tropical <42101043+tropicaaal@users.noreply.github.com> Date: Sun, 22 Mar 2026 12:50:01 -0500 Subject: [PATCH] update NetworkPlayerXbox, SimpleContainer fixes --- .../XUI/XUI_Scene_Inventory_Creative.cpp | 2 +- .../Xbox/Network/NetworkPlayerXbox.cpp | 166 ++++++++---------- .../Platform/Xbox/Network/NetworkPlayerXbox.h | 65 ++++--- .../UI/Screens/CreativeInventoryScreen.cpp | 2 +- 4 files changed, 115 insertions(+), 120 deletions(-) diff --git a/Minecraft.Client/Platform/Common/XUI/XUI_Scene_Inventory_Creative.cpp b/Minecraft.Client/Platform/Common/XUI/XUI_Scene_Inventory_Creative.cpp index cf9130f46..369ee4424 100644 --- a/Minecraft.Client/Platform/Common/XUI/XUI_Scene_Inventory_Creative.cpp +++ b/Minecraft.Client/Platform/Common/XUI/XUI_Scene_Inventory_Creative.cpp @@ -64,7 +64,7 @@ HRESULT CXuiSceneInventoryCreative::OnInit(XUIMessageInit* pInitData, // 4J JEV - Item Picker Menu std::shared_ptr creativeContainer = std::shared_ptr( - new SimpleContainer(0, TabSpec::MAX_SIZE + 9)); + new SimpleContainer(0, L"", false, TabSpec::MAX_SIZE + 9)); itemPickerMenu = new ItemPickerMenu(creativeContainer, initData->player->inventory); diff --git a/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.cpp b/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.cpp index 997d9330e..490483d1a 100644 --- a/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.cpp +++ b/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.cpp @@ -1,121 +1,109 @@ #include "../../../../Minecraft.World/Platform/stdafx.h" #include "NetworkPlayerXbox.h" -NetworkPlayerXbox::NetworkPlayerXbox(IQNetPlayer *qnetPlayer) -{ - m_qnetPlayer = qnetPlayer; - m_pSocket = NULL; +NetworkPlayerXbox::NetworkPlayerXbox(IQNetPlayer* qnetPlayer) { + m_qnetPlayer = qnetPlayer; + m_pSocket = NULL; } -unsigned char NetworkPlayerXbox::GetSmallId() -{ - return m_qnetPlayer->GetSmallId(); +unsigned char NetworkPlayerXbox::GetSmallId() { + return m_qnetPlayer->GetSmallId(); } -void NetworkPlayerXbox::SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority) -{ - DWORD flags; - flags = QNET_SENDDATA_RELIABLE | QNET_SENDDATA_SEQUENTIAL; - if( lowPriority ) flags |= QNET_SENDDATA_LOW_PRIORITY | QNET_SENDDATA_SECONDARY; - m_qnetPlayer->SendData(((NetworkPlayerXbox *)player)->m_qnetPlayer, pvData, dataSize, flags); +void NetworkPlayerXbox::SendData(INetworkPlayer* player, const void* pvData, + int dataSize, bool lowPriority, bool ack) { + DWORD flags; + flags = QNET_SENDDATA_RELIABLE | QNET_SENDDATA_SEQUENTIAL; + if (lowPriority) + flags |= QNET_SENDDATA_LOW_PRIORITY | QNET_SENDDATA_SECONDARY; + m_qnetPlayer->SendData( + static_cast(player)->m_qnetPlayer, pvData, dataSize, + flags); } -bool NetworkPlayerXbox::IsSameSystem(INetworkPlayer *player) -{ - return ( m_qnetPlayer->IsSameSystem(((NetworkPlayerXbox *)player)->m_qnetPlayer) == TRUE ); +int NetworkPlayerXbox::GetOutstandingAckCount() { return 0; } + +bool NetworkPlayerXbox::IsSameSystem(INetworkPlayer* player) { + return (m_qnetPlayer->IsSameSystem( + static_cast(player)->m_qnetPlayer) == TRUE); } -int NetworkPlayerXbox::GetSendQueueSizeBytes( INetworkPlayer *player, bool lowPriority ) -{ - DWORD flags = QNET_GETSENDQUEUESIZE_BYTES; - if( lowPriority ) flags |= QNET_GETSENDQUEUESIZE_SECONDARY_TYPE; - return m_qnetPlayer->GetSendQueueSize(player ? ((NetworkPlayerXbox *)player)->m_qnetPlayer : NULL , flags); +int NetworkPlayerXbox::GetSendQueueSizeBytes(INetworkPlayer* player, + bool lowPriority) { + DWORD flags = QNET_GETSENDQUEUESIZE_BYTES; + if (lowPriority) flags |= QNET_GETSENDQUEUESIZE_SECONDARY_TYPE; + return m_qnetPlayer->GetSendQueueSize( + player ? static_cast(player)->m_qnetPlayer + : nullptr, + flags); } -int NetworkPlayerXbox::GetSendQueueSizeMessages( INetworkPlayer *player, bool lowPriority ) -{ - DWORD flags = QNET_GETSENDQUEUESIZE_MESSAGES; - if( lowPriority ) flags |= QNET_GETSENDQUEUESIZE_SECONDARY_TYPE; - return m_qnetPlayer->GetSendQueueSize(player ? ((NetworkPlayerXbox *)player)->m_qnetPlayer : NULL , flags); +int NetworkPlayerXbox::GetSendQueueSizeMessages(INetworkPlayer* player, + bool lowPriority) { + DWORD flags = QNET_GETSENDQUEUESIZE_MESSAGES; + if (lowPriority) flags |= QNET_GETSENDQUEUESIZE_SECONDARY_TYPE; + return m_qnetPlayer->GetSendQueueSize( + player ? static_cast(player)->m_qnetPlayer + : nullptr, + flags); } -int NetworkPlayerXbox::GetCurrentRtt() -{ - return m_qnetPlayer->GetCurrentRtt(); +int NetworkPlayerXbox::GetCurrentRtt() { return m_qnetPlayer->GetCurrentRtt(); } + +bool NetworkPlayerXbox::IsHost() { return (m_qnetPlayer->IsHost() == TRUE); } + +bool NetworkPlayerXbox::IsGuest() { return (m_qnetPlayer->IsGuest() == TRUE); } + +bool NetworkPlayerXbox::IsLocal() { return (m_qnetPlayer->IsLocal() == TRUE); } + +int NetworkPlayerXbox::GetSessionIndex() { + return m_qnetPlayer->GetSessionIndex(); } -bool NetworkPlayerXbox::IsHost() -{ - return ( m_qnetPlayer->IsHost() == TRUE ); +bool NetworkPlayerXbox::IsTalking() { + return (m_qnetPlayer->IsTalking() == TRUE); } -bool NetworkPlayerXbox::IsGuest() -{ - return ( m_qnetPlayer->IsGuest() == TRUE ); +bool NetworkPlayerXbox::IsMutedByLocalUser(int userIndex) { + return (m_qnetPlayer->IsMutedByLocalUser(userIndex) == TRUE); } -bool NetworkPlayerXbox::IsLocal() -{ - return ( m_qnetPlayer->IsLocal() == TRUE ); +bool NetworkPlayerXbox::HasVoice() { + return (m_qnetPlayer->HasVoice() == TRUE); } -int NetworkPlayerXbox::GetSessionIndex() -{ - return m_qnetPlayer->GetSessionIndex(); +bool NetworkPlayerXbox::HasCamera() { + return (m_qnetPlayer->HasCamera() == TRUE); } -bool NetworkPlayerXbox::IsTalking() -{ - return ( m_qnetPlayer->IsTalking() == TRUE ); +int NetworkPlayerXbox::GetUserIndex() { return m_qnetPlayer->GetUserIndex(); } + +void NetworkPlayerXbox::SetSocket(Socket* pSocket) { m_pSocket = pSocket; } + +Socket* NetworkPlayerXbox::GetSocket() { return m_pSocket; } + +PlayerUID NetworkPlayerXbox::GetUID() { return m_qnetPlayer->GetXuid(); } + +const wchar_t* NetworkPlayerXbox::GetOnlineName() { + return m_qnetPlayer->GetGamertag(); } -bool NetworkPlayerXbox::IsMutedByLocalUser(int userIndex) -{ - return ( m_qnetPlayer->IsMutedByLocalUser(userIndex) == TRUE ); +std::wstring NetworkPlayerXbox::GetDisplayName() { + return m_qnetPlayer->GetGamertag(); } -bool NetworkPlayerXbox::HasVoice() -{ - return ( m_qnetPlayer->HasVoice() == TRUE ); +IQNetPlayer* NetworkPlayerXbox::GetQNetPlayer() { return m_qnetPlayer; } + +void NetworkPlayerXbox::SentChunkPacket() { + m_lastChunkPacketTime = System::currentTimeMillis(); } -bool NetworkPlayerXbox::HasCamera() -{ - return ( m_qnetPlayer->HasCamera() == TRUE ); -} - -int NetworkPlayerXbox::GetUserIndex() -{ - return m_qnetPlayer->GetUserIndex(); -} - -void NetworkPlayerXbox::SetSocket(Socket *pSocket) -{ - m_pSocket = pSocket; -} - -Socket *NetworkPlayerXbox::GetSocket() -{ - return m_pSocket; -} - -PlayerUID NetworkPlayerXbox::GetUID() -{ - return m_qnetPlayer->GetXuid(); -} - -const wchar_t *NetworkPlayerXbox::GetOnlineName() -{ - return m_qnetPlayer->GetGamertag(); -} - -std::wstring NetworkPlayerXbox::GetDisplayName() -{ - return m_qnetPlayer->GetGamertag(); -} - -IQNetPlayer *NetworkPlayerXbox::GetQNetPlayer() -{ - return m_qnetPlayer; -} +int NetworkPlayerXbox::GetTimeSinceLastChunkPacket_ms() { + // If we haven't ever sent a packet, return maximum + if (m_lastChunkPacketTime == 0) { + return INT_MAX; + } + const int64_t currentTime = System::currentTimeMillis(); + return static_cast(currentTime - m_lastChunkPacketTime); +} \ No newline at end of file diff --git a/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.h b/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.h index 7614db6f6..458a979f9 100644 --- a/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.h +++ b/Minecraft.Client/Platform/Xbox/Network/NetworkPlayerXbox.h @@ -2,38 +2,45 @@ #include "../../Common/Network/NetworkPlayerInterface.h" -// This is an implementation of the INetworkPlayer interface, for Xbox 360. It effectively wraps the IQNetPlayer class in a non-platform-specific way. It is +// This is an implementation of the INetworkPlayer interface, for Xbox 360. It +// effectively wraps the IQNetPlayer class in a non-platform-specific way. It is // managed by PlatformNetworkManagerXbox. -class NetworkPlayerXbox : public INetworkPlayer -{ +class NetworkPlayerXbox : public INetworkPlayer { public: - // Common player interface - NetworkPlayerXbox(IQNetPlayer *qnetPlayer); - virtual unsigned char GetSmallId(); - virtual void SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority); - virtual bool IsSameSystem(INetworkPlayer *player); - virtual int GetSendQueueSizeBytes( INetworkPlayer *player, bool lowPriority ); - virtual int GetSendQueueSizeMessages( INetworkPlayer *player, bool lowPriority ); - virtual int GetCurrentRtt(); - virtual bool IsHost(); - virtual bool IsGuest(); - virtual bool IsLocal(); - virtual int GetSessionIndex(); - virtual bool IsTalking(); - virtual bool IsMutedByLocalUser(int userIndex); - virtual bool HasVoice(); - virtual bool HasCamera(); - virtual int GetUserIndex(); - virtual void SetSocket(Socket *pSocket); - virtual Socket *GetSocket(); - virtual const wchar_t *GetOnlineName(); - virtual std::wstring GetDisplayName(); - virtual PlayerUID GetUID(); + // Common player interface + NetworkPlayerXbox(IQNetPlayer* qnetPlayer); + virtual unsigned char GetSmallId(); + virtual void SendData(INetworkPlayer* player, const void* pvData, + int dataSize, bool lowPriority, bool ack); + virtual bool IsSameSystem(INetworkPlayer* player); + virtual int GetOutstandingAckCount(); + virtual int GetSendQueueSizeBytes(INetworkPlayer* player, bool lowPriority); + virtual int GetSendQueueSizeMessages(INetworkPlayer* player, + bool lowPriority); + virtual int GetCurrentRtt(); + virtual bool IsHost(); + virtual bool IsGuest(); + virtual bool IsLocal(); + virtual int GetSessionIndex(); + virtual bool IsTalking(); + virtual bool IsMutedByLocalUser(int userIndex); + virtual bool HasVoice(); + virtual bool HasCamera(); + virtual int GetUserIndex(); + virtual void SetSocket(Socket* pSocket); + virtual Socket* GetSocket(); + virtual const wchar_t* GetOnlineName(); + virtual std::wstring GetDisplayName(); + virtual PlayerUID GetUID(); + virtual void SentChunkPacket(); + virtual int GetTimeSinceLastChunkPacket_ms(); + + // Extra xbox-specific things + IQNetPlayer* GetQNetPlayer(); - // Extra xbox-specific things - IQNetPlayer *GetQNetPlayer(); private: - IQNetPlayer *m_qnetPlayer; - Socket *m_pSocket; + IQNetPlayer* m_qnetPlayer; + Socket* m_pSocket; + int64_t m_lastChunkPacketTime; }; \ No newline at end of file diff --git a/Minecraft.Client/UI/Screens/CreativeInventoryScreen.cpp b/Minecraft.Client/UI/Screens/CreativeInventoryScreen.cpp index 65c495851..aea796309 100644 --- a/Minecraft.Client/UI/Screens/CreativeInventoryScreen.cpp +++ b/Minecraft.Client/UI/Screens/CreativeInventoryScreen.cpp @@ -16,7 +16,7 @@ // Static member initialization int CreativeInventoryScreen::selectedTabIndex = IUIScene_CreativeMenu::eCreativeInventoryTab_BuildingBlocks; -std::shared_ptr CreativeInventoryScreen::basicInventory = std::make_shared(0, ITEMS_PER_PAGE); +std::shared_ptr CreativeInventoryScreen::basicInventory = std::make_shared(0, L"", false, ITEMS_PER_PAGE); // ContainerCreative implementation CreativeInventoryScreen::ContainerCreative::ContainerCreative(std::shared_ptr player) : AbstractContainerMenu()