From b3d6e7151b6cacbfce348133056913eafc1dde67 Mon Sep 17 00:00:00 2001 From: MatthewBeshay <92357869+MatthewBeshay@users.noreply.github.com> Date: Wed, 8 Apr 2026 23:03:54 +1000 Subject: [PATCH] refactor: extract a network service interface for minecraft to depend on --- .../app/common/Network/GameNetworkManager.cpp | 7 ++ .../app/common/Network/GameNetworkManager.h | 3 +- targets/minecraft/client/Minecraft.cpp | 44 +++++------ .../client/gui/CreateWorldScreen.cpp | 8 +- targets/minecraft/client/gui/PauseScreen.cpp | 10 +-- targets/minecraft/client/gui/Screen.cpp | 6 +- .../client/multiplayer/ClientConnection.cpp | 34 ++++----- .../multiplayer/MultiPlayerChunkCache.cpp | 6 +- .../client/multiplayer/MultiPlayerLevel.cpp | 14 ++-- .../multiplayer/MultiPlayerLocalPlayer.cpp | 2 +- .../minecraft/client/player/LocalPlayer.cpp | 12 +-- targets/minecraft/network/Connection.cpp | 6 +- targets/minecraft/network/INetworkService.h | 73 +++++++++++++++++++ targets/minecraft/server/MinecraftServer.cpp | 30 ++++---- targets/minecraft/server/PlayerList.cpp | 6 +- .../minecraft/server/level/PlayerChunkMap.cpp | 6 +- .../minecraft/server/level/ServerPlayer.cpp | 10 +-- .../server/network/PlayerConnection.cpp | 4 +- targets/minecraft/world/level/Level.cpp | 6 +- .../world/level/chunk/LevelChunk.cpp | 8 +- .../level/tile/entity/SignTileEntity.cpp | 2 +- 21 files changed, 191 insertions(+), 106 deletions(-) create mode 100644 targets/minecraft/network/INetworkService.h diff --git a/targets/app/common/Network/GameNetworkManager.cpp b/targets/app/common/Network/GameNetworkManager.cpp index c40a706c6..ed88a05c7 100644 --- a/targets/app/common/Network/GameNetworkManager.cpp +++ b/targets/app/common/Network/GameNetworkManager.cpp @@ -61,6 +61,13 @@ class INVITE_INFO; CGameNetworkManager g_NetworkManager; IPlatformNetwork* CGameNetworkManager::s_pPlatformNetworkManager; +// minecraft/-side function accessor for INetworkService. +namespace minecraft::network::platform_internal { +::minecraft::network::INetworkService& NetworkService_get() { + return g_NetworkManager; +} +} // namespace minecraft::network::platform_internal + int64_t CGameNetworkManager::messageQueue[512]; int64_t CGameNetworkManager::byteQueue[512]; int CGameNetworkManager::messageQueuePos = 0; diff --git a/targets/app/common/Network/GameNetworkManager.h b/targets/app/common/Network/GameNetworkManager.h index ed9635052..980867186 100644 --- a/targets/app/common/Network/GameNetworkManager.h +++ b/targets/app/common/Network/GameNetworkManager.h @@ -10,6 +10,7 @@ #include "platform/PlatformTypes.h" #include "app/common/Network/IPlatformNetwork.h" #include "platform/NetTypes.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "PlatformNetworkManagerStub.h" #include "minecraft/network/platform/SessionInfo.h" @@ -29,7 +30,7 @@ const int NON_QNET_SENDDATA_ACK_REQUIRED = 1; // network implementation (eg QNET), rather it should interface with an // implementation of PlatformNetworkManager to provide this functionality. -class CGameNetworkManager { +class CGameNetworkManager : public ::minecraft::network::INetworkService { friend class IPlatformNetworkStub; public: diff --git a/targets/minecraft/client/Minecraft.cpp b/targets/minecraft/client/Minecraft.cpp index f132c489f..035b855e3 100644 --- a/targets/minecraft/client/Minecraft.cpp +++ b/targets/minecraft/client/Minecraft.cpp @@ -19,7 +19,7 @@ #include "User.h" #include "app/common/Audio/SoundEngine.h" #include "app/common/DLC/DLCManager.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "app/common/Tutorial/Tutorial.h" #include "app/common/UI/All Platforms/UIEnums.h" @@ -806,7 +806,7 @@ bool Minecraft::addLocalPlayer(int idx) { m_connectionFailed[idx] = false; m_pendingLocalConnections[idx] = nullptr; - bool success = g_NetworkManager.AddLocalPlayerByUserIndex(idx); + bool success = NetworkService.AddLocalPlayerByUserIndex(idx); if (success) { Log::info("Adding temp local player on pad %d\n", idx); @@ -827,7 +827,7 @@ bool Minecraft::addLocalPlayer(int idx) { ui.NavigateToScene(idx, eUIScene_ConnectingProgress, param); } else { - Log::info("g_NetworkManager.AddLocalPlayerByUserIndex failed\n"); + Log::info("NetworkService.AddLocalPlayerByUserIndex failed\n"); } return success; @@ -957,7 +957,7 @@ void Minecraft::removeLocalPlayerIdx(int idx) { ->removeClientConnection(mplp->connection, true); delete mplp->connection; mplp->connection = nullptr; - g_NetworkManager.RemoveLocalPlayerByUserIndex(idx); + NetworkService.RemoveLocalPlayerByUserIndex(idx); } getLevel(localplayers[idx]->dimension)->removeEntity(localplayers[idx]); @@ -975,7 +975,7 @@ void Minecraft::removeLocalPlayerIdx(int idx) { ; delete m_pendingLocalConnections[idx]; m_pendingLocalConnections[idx] = nullptr; - g_NetworkManager.RemoveLocalPlayerByUserIndex(idx); + NetworkService.RemoveLocalPlayerByUserIndex(idx); } else { // Not sure how this works on qnet, but for other platforms, calling // RemoveLocalPlayerByUserIndex won't do anything if there isn't a local @@ -1062,7 +1062,7 @@ void Minecraft::run_middle() { // } // 4J-PB - AUTOSAVE TIMER - if the player is the host - if (level != nullptr && g_NetworkManager.IsHost()) { + if (level != nullptr && NetworkService.IsHost()) { /*if(!bAutosaveTimerSet) { // set the timer @@ -1184,7 +1184,7 @@ void Minecraft::run_middle() { // list get the unique save name and xuid from // whoever is the host INetworkPlayer* pHostPlayer = - g_NetworkManager.GetHostPlayer(); + NetworkService.GetHostPlayer(); PlayerUID xuid = pHostPlayer->GetUID(); if (gameServices().isInBannedLevelList( @@ -1216,7 +1216,7 @@ void Minecraft::run_middle() { // quadrant display to remind them to press start (if the // session has space) if (level != nullptr && bFirstTimeIntoGame && - g_NetworkManager.SessionHasSpace()) { + NetworkService.SessionHasSpace()) { // have a short delay before the display if (iFirstTimeCountdown == 0) { bFirstTimeIntoGame = false; @@ -1390,7 +1390,7 @@ void Minecraft::run_middle() { bool tryJoin = !pause && !ui.IsIgnorePlayerJoinMenuDisplayed( PlatformInput.GetPrimaryPad()) && - g_NetworkManager.SessionHasSpace() && + NetworkService.SessionHasSpace() && PlatformRenderer.IsHiDef() && PlatformInput.ButtonPressed(i); if (tryJoin) { @@ -1408,7 +1408,7 @@ void Minecraft::run_middle() { if (PlatformProfile.IsSignedIn(i)) { // if this is a local game, then the // player just needs to be signed in - if (g_NetworkManager.IsLocalGame() || + if (NetworkService.IsLocalGame() || (PlatformProfile.IsSignedInLive( i) && PlatformProfile @@ -1425,7 +1425,7 @@ void Minecraft::run_middle() { "ui\n"); PlatformProfile.RequestSignInUI( false, - g_NetworkManager + NetworkService .IsLocalGame(), true, false, true, [this](bool b, int p) { @@ -1497,7 +1497,7 @@ void Minecraft::run_middle() { "ui\n"); PlatformProfile.RequestSignInUI( false, - g_NetworkManager + NetworkService .IsLocalGame(), true, false, true, [this](bool b, int p) { @@ -1513,7 +1513,7 @@ void Minecraft::run_middle() { "Bringing up the sign in ui\n"); PlatformProfile.RequestSignInUI( false, - g_NetworkManager.IsLocalGame(), + NetworkService.IsLocalGame(), true, false, true, [this](bool b, int p) { return InGame_SignInReturned( @@ -1739,7 +1739,7 @@ void Minecraft::run_middle() { Packet::renderAllPacketStats(); #else // To show the size of the QNet queue in bytes and messages - g_NetworkManager.renderQueueMeter(); + NetworkService.renderQueueMeter(); #endif } else { lastTimer = System::nanoTime(); @@ -1778,8 +1778,8 @@ void Minecraft::run_middle() { // pause = !isClientSide() && screen != nullptr && // screen->isPauseScreen(); #if defined(ENABLE_JAVA_GUIS) - pause = g_NetworkManager.IsLocalGame() && - g_NetworkManager.GetPlayerCount() == 1 && + pause = NetworkService.IsLocalGame() && + NetworkService.GetPlayerCount() == 1 && screen != nullptr && screen->isPauseScreen(); #else pause = gameServices().isAppPaused(); @@ -3980,12 +3980,12 @@ std::string Minecraft::gatherStats1() { } std::string Minecraft::gatherStats2() { - return g_NetworkManager.GatherStats(); + return NetworkService.GatherStats(); // return levelRenderer->gatherStats2(); } std::string Minecraft::gatherStats3() { - return g_NetworkManager.GatherRTTStats(); + return NetworkService.GatherRTTStats(); // return "P: " + particleEngine->countParticles() + ". T: " + // level->gatherStats(); } @@ -4465,7 +4465,7 @@ void Minecraft::playerLeftTutorial(int iPad) { int Minecraft::InGame_SignInReturned(void* pParam, bool bContinue, int iPad) { Minecraft* pMinecraftClass = (Minecraft*)pParam; - if (g_NetworkManager.IsInSession()) { + if (NetworkService.IsInSession()) { // 4J Stu - There seems to be a bug in the signin ui call that enables // guest sign in. We never allow this within game, so make sure that // it's disabled Fix for #66516 - TCR #124: MPS Guest Support ; #001: @@ -4477,19 +4477,19 @@ int Minecraft::InGame_SignInReturned(void* pParam, bool bContinue, int iPad) { // If sign in succeded, we're in game and this player isn't already playing, // continue - if (bContinue == true && g_NetworkManager.IsInSession() && + if (bContinue == true && NetworkService.IsInSession() && pMinecraftClass->localplayers[iPad] == nullptr) { // It's possible that the player has not signed in - they can back out // or choose no for the converttoguest if (PlatformProfile.IsSignedIn(iPad)) { - if (!g_NetworkManager.SessionHasSpace()) { + if (!NetworkService.SessionHasSpace()) { unsigned int uiIDA[1]; uiIDA[0] = IDS_OK; ui.RequestErrorMessage(IDS_MULTIPLAYER_FULL_TITLE, IDS_MULTIPLAYER_FULL_TEXT, uiIDA, 1); } // if this is a local game then profiles just need to be signed in - else if (g_NetworkManager.IsLocalGame() || + else if (NetworkService.IsLocalGame() || (PlatformProfile.IsSignedInLive(iPad) && PlatformProfile.AllowedToPlayMultiplayer(iPad))) { if (pMinecraftClass->level->isClientSide) { diff --git a/targets/minecraft/client/gui/CreateWorldScreen.cpp b/targets/minecraft/client/gui/CreateWorldScreen.cpp index fc2299b3e..ca6167c84 100644 --- a/targets/minecraft/client/gui/CreateWorldScreen.cpp +++ b/targets/minecraft/client/gui/CreateWorldScreen.cpp @@ -13,6 +13,10 @@ #include "EditBox.h" #include "MessageScreen.h" #include "minecraft/GameEnums.h" +#include "minecraft/network/INetworkService.h" +// Needed for the &CGameNetworkManager::RunNetworkGameThreadProc address-of +// below. Static thread procs can't be virtual; this one consumer keeps the +// concrete type include. #include "app/common/Network/GameNetworkManager.h" #include "app/common/UI/All Platforms/UIEnums.h" #include "app/common/UI/All Platforms/UIStructs.h" @@ -286,10 +290,10 @@ void CreateWorldScreen::buttonClicked(Button* button) { param->xzSize = LEVEL_MAX_WIDTH; param->hellScale = HELL_LEVEL_MAX_SCALE; - g_NetworkManager.HostGame(0, false, false, MINECRAFT_NET_MAX_PLAYERS, + NetworkService.HostGame(0, false, false, MINECRAFT_NET_MAX_PLAYERS, 0); - g_NetworkManager.FakeLocalPlayerJoined(); + NetworkService.FakeLocalPlayerJoined(); LoadingInputParams* loadingParams = new LoadingInputParams(); loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc; diff --git a/targets/minecraft/client/gui/PauseScreen.cpp b/targets/minecraft/client/gui/PauseScreen.cpp index 03abe500a..4966f2877 100644 --- a/targets/minecraft/client/gui/PauseScreen.cpp +++ b/targets/minecraft/client/gui/PauseScreen.cpp @@ -12,7 +12,7 @@ #include "Button.h" #include "MessageScreen.h" #include "minecraft/GameEnums.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "OptionsScreen.h" #include "minecraft/client/Minecraft.h" #include "minecraft/client/gui/Screen.h" @@ -30,13 +30,13 @@ void PauseScreen::init() { buttons.clear(); int yo = -16; // 4jcraft: solves the issue of client-side only pausing in the java gui - if (g_NetworkManager.IsLocalGame() && - g_NetworkManager.GetPlayerCount() == 1) + if (NetworkService.IsLocalGame() && + NetworkService.GetPlayerCount() == 1) gameServices().setXuiServerAction(PlatformInput.GetPrimaryPad(), eXuiServerAction_PauseServer, true); buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 5 + yo, I18n::get("menu.returnToMenu"))); - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { buttons[0]->msg = I18n::get("menu.disconnect"); } @@ -67,7 +67,7 @@ void PauseScreen::exitWorld(Minecraft* minecraft, bool save) { MinecraftServer* server = MinecraftServer::getInstance(); minecraft->setScreen(new MessageScreen("Leaving world")); - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { server->setSaveOnExit(save); } gameServices().setAction(minecraft->player->GetXboxPad(), eAppAction_ExitWorld); diff --git a/targets/minecraft/client/gui/Screen.cpp b/targets/minecraft/client/gui/Screen.cpp index 78cb896c0..42194c7fb 100644 --- a/targets/minecraft/client/gui/Screen.cpp +++ b/targets/minecraft/client/gui/Screen.cpp @@ -6,7 +6,7 @@ #include "Button.h" #include "minecraft/GameEnums.h" #include "app/common/Audio/SoundEngine.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "platform/stubs.h" #include "minecraft/client/Minecraft.h" #include "minecraft/client/gui/Screen.h" @@ -40,8 +40,8 @@ void Screen::keyPressed(char eventCharacter, int eventKey) { // minecraft->grabMouse(); // 4J - removed // 4jcraft: moved here from PauseScreen to ensure that serverside // unpausing is done in all scenarios - if (g_NetworkManager.IsLocalGame() && - g_NetworkManager.GetPlayerCount() == 1) + if (NetworkService.IsLocalGame() && + NetworkService.GetPlayerCount() == 1) gameServices().setXuiServerAction(PlatformInput.GetPrimaryPad(), eXuiServerAction_PauseServer, false); } diff --git a/targets/minecraft/client/multiplayer/ClientConnection.cpp b/targets/minecraft/client/multiplayer/ClientConnection.cpp index 73786ded9..c52899d53 100644 --- a/targets/minecraft/client/multiplayer/ClientConnection.cpp +++ b/targets/minecraft/client/multiplayer/ClientConnection.cpp @@ -22,7 +22,7 @@ #include "app/common/DLC/DLCPack.h" #include "app/common/DLC/DLCSkinFile.h" #include "minecraft/world/level/GameRules/GameRuleDefinition.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "app/common/Network/Socket.h" #include "app/common/Tutorial/FullTutorialMode.h" @@ -273,11 +273,11 @@ void ClientConnection::handleLogin(std::shared_ptr packet) { PlatformProfile.GetXUID(m_userIndex, &OnlineXuid, true); // online xuid MOJANG_DATA* pMojangData = nullptr; - if (!g_NetworkManager.IsLocalGame()) { + if (!NetworkService.IsLocalGame()) { pMojangData = gameServices().getMojangDataForXuid(OnlineXuid); } - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { Minecraft::GetInstance()->progressRenderer->progressStagePercentage( (eCCLoginReceived * 100) / (eCCConnected)); } @@ -295,7 +295,7 @@ void ClientConnection::handleLogin(std::shared_ptr packet) { // find the pad number of this local player for (int i = 0; i < XUSER_MAX_COUNT; i++) { INetworkPlayer* networkLocalPlayer = - g_NetworkManager.GetLocalPlayerByUserIndex(i); + NetworkService.GetLocalPlayerByUserIndex(i); if (networkLocalPlayer == networkPlayer) { iUserID = i; } @@ -1091,7 +1091,7 @@ void ClientConnection::handleMovePlayer( packet->yView = player->y; connection->send(packet); if (!started) { - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { Minecraft::GetInstance()->progressRenderer->progressStagePercentage( (eCCConnected * 100) / (eCCConnected)); } @@ -1274,7 +1274,7 @@ void ClientConnection::handleTileUpdate( MultiPlayerLevel* dimensionLevel = (MultiPlayerLevel*)minecraft->levels[packet->levelIdx]; if (dimensionLevel) { - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { // 4J Stu - Unshare before we make any changes incase the server is // already another step ahead of us Fix for #7904 - Gameplay: // Players can dupe torches by throwing them repeatedly into water. @@ -1357,7 +1357,7 @@ void ClientConnection::onDisconnect(DisconnectPacket::eDisconnectReason reason, // Fix for #13191 - The host of a game can get a message informing them that // the connection to the server has been lost In the (now unlikely) event // that the host connections times out, allow the player to save their game - if (g_NetworkManager.IsHost() && + if (NetworkService.IsHost() && (reason == DisconnectPacket::eDisconnect_TimeOut || reason == DisconnectPacket::eDisconnect_Overflow) && m_userIndex == PlatformInput.GetPrimaryPad() && @@ -1918,16 +1918,16 @@ void ClientConnection::handleEntityActionAtPosition( void ClientConnection::handlePreLogin(std::shared_ptr packet) { fprintf(stderr, "[LOGIN-CLI] handlePreLogin entered, isHost=%d, userIdx=%d\n", - (int)g_NetworkManager.IsHost(), m_userIndex); + (int)NetworkService.IsHost(), m_userIndex); // 4J - Check that we can play with all the players already in the game who // have Friends-Only UGC set bool canPlay = true; bool canPlayLocal = true; - bool isAtLeastOneFriend = g_NetworkManager.IsHost(); + bool isAtLeastOneFriend = NetworkService.IsHost(); bool isFriendsWithHost = true; bool cantPlayContentRestricted = false; - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { // set the game host settings gameServices().setGameHostOption(eGameHostOption_All, packet->m_serverSettings); @@ -2031,7 +2031,7 @@ void ClientConnection::handlePreLogin(std::shared_ptr packet) { } } - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { Minecraft::GetInstance()->progressRenderer->progressStagePercentage( (eCCPreLoginReceived * 100) / (eCCConnected)); } @@ -2060,7 +2060,7 @@ void ClientConnection::handlePreLogin(std::shared_ptr packet) { "isHost=%d\n", minecraft->user->name.c_str(), SharedConstants::NETWORK_PROTOCOL_VERSION, m_userIndex, - (int)g_NetworkManager.IsHost()); + (int)NetworkService.IsHost()); send(std::make_shared( minecraft->user->name, SharedConstants::NETWORK_PROTOCOL_VERSION, offlineXUID, onlineXUID, (!allAllowed && friendsAllowed), @@ -2069,7 +2069,7 @@ void ClientConnection::handlePreLogin(std::shared_ptr packet) { PlatformProfile.IsGuest(m_userIndex))); fprintf(stderr, "[LOGIN] LoginPacket sent successfully\n"); - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { Minecraft::GetInstance()->progressRenderer->progressStagePercentage( (eCCLoginSent * 100) / (eCCConnected)); } @@ -3014,7 +3014,7 @@ void ClientConnection::handleGameEvent( ui.NavigateToScene(PlatformInput.GetPrimaryPad(), eUIScene_EndPoem, nullptr, eUILayer_Scene, eUIGroup_Fullscreen); } else if (event == GameEventPacket::START_SAVING) { - if (!g_NetworkManager.IsHost()) { + if (!NetworkService.IsHost()) { // Move app started to here so that it happens immediately otherwise // back-to-back START/STOP packets leave the client stuck in the // loading screen @@ -3023,7 +3023,7 @@ void ClientConnection::handleGameEvent( eAppAction_RemoteServerSave); } } else if (event == GameEventPacket::STOP_SAVING) { - if (!g_NetworkManager.IsHost()) gameServices().setGameStarted(true); + if (!NetworkService.IsHost()) gameServices().setGameStarted(true); } else if (event == GameEventPacket::SUCCESSFUL_BOW_HIT) { std::shared_ptr player = minecraft->localplayers[m_userIndex]; @@ -3109,7 +3109,7 @@ void ClientConnection::handlePlayerInfo( gameServices().getPlayerPrivileges(packet->m_networkSmallId); INetworkPlayer* networkPlayer = - g_NetworkManager.GetPlayerBySmallId(packet->m_networkSmallId); + NetworkService.GetPlayerBySmallId(packet->m_networkSmallId); if (networkPlayer != nullptr && networkPlayer->IsHost()) { // Some settings should always be considered on for the host player @@ -3393,7 +3393,7 @@ void ClientConnection::handleXZ(std::shared_ptr packet) { void ClientConnection::handleUpdateProgress( std::shared_ptr packet) { - if (!g_NetworkManager.IsHost()) + if (!NetworkService.IsHost()) Minecraft::GetInstance()->progressRenderer->progressStagePercentage( packet->m_percentage); } diff --git a/targets/minecraft/client/multiplayer/MultiPlayerChunkCache.cpp b/targets/minecraft/client/multiplayer/MultiPlayerChunkCache.cpp index 980cb0192..438d2e932 100644 --- a/targets/minecraft/client/multiplayer/MultiPlayerChunkCache.cpp +++ b/targets/minecraft/client/multiplayer/MultiPlayerChunkCache.cpp @@ -3,7 +3,7 @@ #include #include -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "app/linux/Stubs/winapi_stubs.h" #include "util/StringHelpers.h" #include "minecraft/server/MinecraftServer.h" @@ -167,7 +167,7 @@ LevelChunk* MultiPlayerChunkCache::create(int x, int z) { std::unique_lock lock(m_csLoadCreate); // LevelChunk *chunk; - if (g_NetworkManager + if (NetworkService .IsHost()) // force here to disable sharing of data { // 4J-JEV: We are about to use shared data, abort if the server @@ -223,7 +223,7 @@ LevelChunk* MultiPlayerChunkCache::create(int x, int z) { // If we're sharing with the server, we'll need to calculate our // heightmap now, which isn't shared. If we aren't sharing with the // server, then this will be calculated when the chunk data arrives. - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { chunk->recalcHeightmapOnly(); } diff --git a/targets/minecraft/client/multiplayer/MultiPlayerLevel.cpp b/targets/minecraft/client/multiplayer/MultiPlayerLevel.cpp index 771015f2f..09b208298 100644 --- a/targets/minecraft/client/multiplayer/MultiPlayerLevel.cpp +++ b/targets/minecraft/client/multiplayer/MultiPlayerLevel.cpp @@ -15,7 +15,7 @@ #include "ClientConnection.h" #include "app/common/Audio/SoundEngine.h" #include "minecraft/Console_Debug_enum.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "MultiPlayerChunkCache.h" #include "MultiPlayerLocalPlayer.h" #include "java/JavaMath.h" @@ -104,13 +104,13 @@ MultiPlayerLevel::~MultiPlayerLevel() { } void MultiPlayerLevel::unshareChunkAt(int x, int z) { - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { Level::getChunkAt(x, z)->stopSharingTilesAndData(); } } void MultiPlayerLevel::shareChunkAt(int x, int z) { - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { Level::getChunkAt(x, z)->startSharingTilesAndData(); } } @@ -193,12 +193,12 @@ void MultiPlayerLevel::tick() { // chunks become unshared over time. int ls = dimension->getXZSize(); - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { if (Level::reallyHasChunk(unshareCheckX - (ls / 2), unshareCheckZ - (ls / 2))) { LevelChunk* lc = Level::getChunk(unshareCheckX - (ls / 2), unshareCheckZ - (ls / 2)); - if (g_NetworkManager.IsHost()) { + if (NetworkService.IsHost()) { lc->startSharingTilesAndData(1000 * 60 * 2); } } @@ -611,8 +611,8 @@ bool MultiPlayerLevel::doSetTileAndData(int x, int y, int z, int tile, // don't change things as the host might have been sharing data and so set // it already, but the renderer won't know to update if ((Level::setTileAndData(x, y, z, tile, data, Tile::UPDATE_ALL) || - g_NetworkManager.IsHost())) { - if (g_NetworkManager.IsHost() && visuallyImportant) { + NetworkService.IsHost())) { + if (NetworkService.IsHost() && visuallyImportant) { // 4J Stu - This got removed from the tileUpdated function in TU14. // Adding it back here as we need it to handle the cases where the // chunk data is shared so the normal paths never call this diff --git a/targets/minecraft/client/multiplayer/MultiPlayerLocalPlayer.cpp b/targets/minecraft/client/multiplayer/MultiPlayerLocalPlayer.cpp index 7af1bd050..0647aaf4f 100644 --- a/targets/minecraft/client/multiplayer/MultiPlayerLocalPlayer.cpp +++ b/targets/minecraft/client/multiplayer/MultiPlayerLocalPlayer.cpp @@ -70,7 +70,7 @@ void MultiplayerLocalPlayer::heal(float heal) {} void MultiplayerLocalPlayer::tick() { // 4J Added // 4J-PB - changing this to a game host option ot hide gamertags - // bool bIsisPrimaryHost=g_NetworkManager.IsHost() && + // bool bIsisPrimaryHost=NetworkService.IsHost() && // (PlatformInput.GetPrimaryPad()==m_iPad); /*if((gameServices().getGameSettings(m_iPad,eGameSetting_PlayerVisibleInMap)!=0) != diff --git a/targets/minecraft/client/player/LocalPlayer.cpp b/targets/minecraft/client/player/LocalPlayer.cpp index a25fed902..bbb55f5ee 100644 --- a/targets/minecraft/client/player/LocalPlayer.cpp +++ b/targets/minecraft/client/player/LocalPlayer.cpp @@ -33,7 +33,7 @@ #include "platform/renderer/renderer.h" #include "app/common/App_structs.h" #include "app/common/Audio/SoundEngine.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "app/common/Tutorial/Tutorial.h" #include "app/common/Tutorial/TutorialMode.h" #include "app/common/UI/All Platforms/UIEnums.h" @@ -490,9 +490,9 @@ void LocalPlayer::aiStep() { } else if (m_bIsIdle && PlatformInput.GetIdleSeconds(m_iPad) < PLAYER_IDLE_TIME) { // Are we offline or online, and how many players are there - if (g_NetworkManager.GetPlayerCount() > 1) { + if (NetworkService.GetPlayerCount() > 1) { // only do it for this player here - each player will run this code - if (g_NetworkManager.IsLocalGame()) { + if (NetworkService.IsLocalGame()) { PlatformProfile.SetCurrentGameActivity( m_iPad, CONTEXT_PRESENCE_MULTIPLAYEROFFLINE, false); } else { @@ -500,7 +500,7 @@ void LocalPlayer::aiStep() { m_iPad, CONTEXT_PRESENCE_MULTIPLAYER, false); } } else { - if (g_NetworkManager.IsLocalGame()) { + if (NetworkService.IsLocalGame()) { PlatformProfile.SetCurrentGameActivity( m_iPad, CONTEXT_PRESENCE_MULTIPLAYER_1POFFLINE, false); } else { @@ -848,8 +848,8 @@ void LocalPlayer::awardStat(Stat* stat, const std::vector& param) { // especially if you are surrounded by mobs! We cannot pause the // game unless in offline single player, but lets at least do it // then - if (g_NetworkManager.IsLocalGame() && - g_NetworkManager.GetPlayerCount() == 1 && + if (NetworkService.IsLocalGame() && + NetworkService.GetPlayerCount() == 1 && PlatformProfile.GetAwardType(ach->getAchievementID()) != EAwardType::Achievement) { ui.CloseUIScenes(m_iPad); diff --git a/targets/minecraft/network/Connection.cpp b/targets/minecraft/network/Connection.cpp index 6e40ba86b..beffdcb91 100644 --- a/targets/minecraft/network/Connection.cpp +++ b/targets/minecraft/network/Connection.cpp @@ -7,7 +7,7 @@ #include #include "platform/ShutdownManager.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "app/common/Network/Socket.h" #include "util/StringHelpers.h" @@ -471,8 +471,8 @@ void Connection::tick() { std::vector > packetsToHandle; { std::lock_guard lock(incoming_cs); - while (!disconnected && !g_NetworkManager.IsLeavingGame() && - g_NetworkManager.IsInSession() && !incoming.empty() && + while (!disconnected && !NetworkService.IsLeavingGame() && + NetworkService.IsInSession() && !incoming.empty() && max-- >= 0) { std::shared_ptr packet = incoming.front(); packetsToHandle.push_back(packet); diff --git a/targets/minecraft/network/INetworkService.h b/targets/minecraft/network/INetworkService.h new file mode 100644 index 000000000..916f31172 --- /dev/null +++ b/targets/minecraft/network/INetworkService.h @@ -0,0 +1,73 @@ +#pragma once + +#include +#include + +#include "platform/PlatformTypes.h" + +// Minimal interface that minecraft/ code uses to talk to the network +// subsystem. The concrete implementation lives in app/common/Network/ +// (CGameNetworkManager). Same shape as IGameServices: minecraft/ code +// calls the interface; the implementation can sit in a higher layer +// without minecraft/ needing to include its header. +// +// Method names match the existing CGameNetworkManager surface so the +// concrete class can implement the interface without rename churn. + +class INetworkPlayer; + +namespace minecraft::network { + +class INetworkService { +public: + virtual ~INetworkService() = default; + + // Player management + [[nodiscard]] virtual int GetPlayerCount() = 0; + virtual bool AddLocalPlayerByUserIndex(int userIndex) = 0; + virtual bool RemoveLocalPlayerByUserIndex(int userIndex) = 0; + [[nodiscard]] virtual INetworkPlayer* GetLocalPlayerByUserIndex( + int userIndex) = 0; + [[nodiscard]] virtual INetworkPlayer* GetPlayerByIndex(int playerIndex) = 0; + [[nodiscard]] virtual INetworkPlayer* GetPlayerBySmallId( + unsigned char smallId) = 0; + [[nodiscard]] virtual INetworkPlayer* GetHostPlayer() = 0; + + // Hosting / state + [[nodiscard]] virtual bool IsHost() = 0; + [[nodiscard]] virtual bool IsInSession() = 0; + [[nodiscard]] virtual bool IsLeavingGame() = 0; + [[nodiscard]] virtual bool IsLocalGame() = 0; + [[nodiscard]] virtual bool SessionHasSpace( + unsigned int spaceRequired = 1) = 0; + virtual void HostGame(int localUsersMask, bool bOnlineGame, bool bIsPrivate, + unsigned char publicSlots, + unsigned char privateSlots) = 0; + virtual void FakeLocalPlayerJoined() = 0; + virtual void UpdateAndSetGameSessionData( + INetworkPlayer* pNetworkPlayerLeaving = nullptr) = 0; + + // System flags + virtual void SystemFlagSet(INetworkPlayer* pNetworkPlayer, int index) = 0; + [[nodiscard]] virtual bool SystemFlagGet(INetworkPlayer* pNetworkPlayer, + int index) = 0; + + // Server lifecycle events + virtual void ServerReady() = 0; + virtual void ServerStopped() = 0; + + // Stats / debug + [[nodiscard]] virtual std::string GatherStats() = 0; + [[nodiscard]] virtual std::string GatherRTTStats() = 0; + virtual void renderQueueMeter() = 0; +}; + +namespace platform_internal { +INetworkService& NetworkService_get(); +} + +} // namespace minecraft::network + +#define NetworkService \ + (::minecraft::network::platform_internal:: \ + NetworkService_get()) diff --git a/targets/minecraft/server/MinecraftServer.cpp b/targets/minecraft/server/MinecraftServer.cpp index 873bb2477..68cb66bf9 100644 --- a/targets/minecraft/server/MinecraftServer.cpp +++ b/targets/minecraft/server/MinecraftServer.cpp @@ -20,7 +20,7 @@ #include "minecraft/GameEnums.h" #include "app/common/GameRules/GameRuleManager.h" #include "minecraft/world/level/GameRules/LevelGenerationOptions.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "PlayerList.h" #include "Settings.h" @@ -261,7 +261,7 @@ bool MinecraftServer::initServer(int64_t seed, NetworkGameInitData* initData, initData->saveData->fileSize = 0; } - g_NetworkManager.ServerReady(); // 4J added + NetworkService.ServerReady(); // 4J added return m_bLoaded; } @@ -446,7 +446,7 @@ bool MinecraftServer::loadLevel(LevelStorageSource* storageSource, // McRegionLevelStorage *storage = new McRegionLevelStorage(File("."), // name, true); // TODO for (unsigned int i = 0; i < levels.size(); i++) { - if (s_bServerHalted || !g_NetworkManager.IsInSession()) { + if (s_bServerHalted || !NetworkService.IsInSession()) { return false; } @@ -516,7 +516,7 @@ bool MinecraftServer::loadLevel(LevelStorageSource* storageSource, gameServices().setGameHostOption(eGameHostOption_Structures, levels[0]->isGenerateMapFeatures()); - if (s_bServerHalted || !g_NetworkManager.IsInSession()) return false; + if (s_bServerHalted || !NetworkService.IsInSession()) return false; // 4J - Make a new thread to do post processing @@ -590,7 +590,7 @@ bool MinecraftServer::loadLevel(LevelStorageSource* storageSource, int total = twoRPlusOne * twoRPlusOne; for (int x = -r; x <= r && running; x += 16) { for (int z = -r; z <= r && running; z += 16) { - if (s_bServerHalted || !g_NetworkManager.IsInSession()) { + if (s_bServerHalted || !NetworkService.IsInSession()) { delete spawnPos; m_postUpdateTerminate = true; postProcessTerminate(mcprogress); @@ -678,19 +678,19 @@ bool MinecraftServer::loadLevel(LevelStorageSource* storageSource, // printf("Lighting complete at %dms\n",System::currentTimeMillis() - // startTime); - if (s_bServerHalted || !g_NetworkManager.IsInSession()) return false; + if (s_bServerHalted || !NetworkService.IsInSession()) return false; if (levels[1]->isNew) { levels[1]->save(true, mcprogress); } - if (s_bServerHalted || !g_NetworkManager.IsInSession()) return false; + if (s_bServerHalted || !NetworkService.IsInSession()) return false; if (levels[2]->isNew) { levels[2]->save(true, mcprogress); } - if (s_bServerHalted || !g_NetworkManager.IsInSession()) return false; + if (s_bServerHalted || !NetworkService.IsInSession()) return false; // 4J - added - immediately save newly created level, like single player // game 4J Stu - We also want to immediately save the tutorial @@ -700,13 +700,13 @@ bool MinecraftServer::loadLevel(LevelStorageSource* storageSource, levels[0]->save(true, mcprogress); } - if (s_bServerHalted || !g_NetworkManager.IsInSession()) return false; + if (s_bServerHalted || !NetworkService.IsInSession()) return false; if (levels[0]->isNew || levels[1]->isNew || levels[2]->isNew) { levels[0]->saveToDisc(mcprogress, false); } - if (s_bServerHalted || !g_NetworkManager.IsInSession()) return false; + if (s_bServerHalted || !NetworkService.IsInSession()) return false; /* * int r = 24; for (int x = -r; x <= r; x++) { @@ -960,7 +960,7 @@ void MinecraftServer::stopServer(bool didInit) { delete settings; settings = nullptr; - g_NetworkManager.ServerStopped(); + NetworkService.ServerStopped(); } void MinecraftServer::halt() { running = false; } @@ -1692,13 +1692,13 @@ void MinecraftServer::chunkPacketManagement_PostTick() { } void MinecraftServer::cycleSlowQueueIndex() { - if (!g_NetworkManager.IsInSession()) return; + if (!NetworkService.IsInSession()) return; int startingIndex = s_slowQueuePlayerIndex; INetworkPlayer* currentPlayer = nullptr; int currentPlayerCount = 0; do { - currentPlayerCount = g_NetworkManager.GetPlayerCount(); + currentPlayerCount = NetworkService.GetPlayerCount(); if (startingIndex >= currentPlayerCount) startingIndex = 0; ++s_slowQueuePlayerIndex; @@ -1709,11 +1709,11 @@ void MinecraftServer::cycleSlowQueueIndex() { // join. The QNet session might be ending while we do this, so do a // few more checks that the player is real currentPlayer = - g_NetworkManager.GetPlayerByIndex(s_slowQueuePlayerIndex); + NetworkService.GetPlayerByIndex(s_slowQueuePlayerIndex); } else { s_slowQueuePlayerIndex = 0; } - } while (g_NetworkManager.IsInSession() && currentPlayerCount > 0 && + } while (NetworkService.IsInSession() && currentPlayerCount > 0 && s_slowQueuePlayerIndex != startingIndex && currentPlayer != nullptr && currentPlayer->IsLocal()); // Log::info("Cycled slow queue index to %d\n", diff --git a/targets/minecraft/server/PlayerList.cpp b/targets/minecraft/server/PlayerList.cpp index cc4868261..3e0718f14 100644 --- a/targets/minecraft/server/PlayerList.cpp +++ b/targets/minecraft/server/PlayerList.cpp @@ -15,7 +15,7 @@ #include "minecraft/world/level/GameRules/GameRuleDefinition.h" #include "app/common/GameRules/LevelRules/RuleDefinitions/LevelRuleset.h" #include "minecraft/world/level/GameRules/GameRulesInstance.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "app/common/Network/Socket.h" #include "app/common/Tutorial/Tutorial.h" @@ -915,7 +915,7 @@ void PlayerList::toggleDimension(std::shared_ptr player, player->gameMode->setLevel(newLevel); // Resend the teleport if we haven't yet sent the chunk they will land on - if (!g_NetworkManager.SystemFlagGet( + if (!NetworkService.SystemFlagGet( player->connection->getNetworkPlayer(), ServerPlayer::getFlagIndexForChunk( ChunkPos(player->xChunk, player->zChunk), @@ -1069,7 +1069,7 @@ void PlayerList::tick() { std::uint8_t smallId = m_smallIdsToKick.front(); m_smallIdsToKick.pop_front(); INetworkPlayer* selectedPlayer = - g_NetworkManager.GetPlayerBySmallId(smallId); + NetworkService.GetPlayerBySmallId(smallId); if (selectedPlayer != nullptr) { if (selectedPlayer->IsLocal() != true) { // #if 0 diff --git a/targets/minecraft/server/level/PlayerChunkMap.cpp b/targets/minecraft/server/level/PlayerChunkMap.cpp index 971574bd8..2505f2251 100644 --- a/targets/minecraft/server/level/PlayerChunkMap.cpp +++ b/targets/minecraft/server/level/PlayerChunkMap.cpp @@ -10,7 +10,7 @@ #include #include -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "ServerChunkCache.h" #include "ServerLevel.h" @@ -264,7 +264,7 @@ void PlayerChunkMap::PlayerChunk::broadcast(std::shared_ptr packet) { ServerPlayer::getFlagIndexForChunk(pos, parent->dimension); if (player->seenChunks.find(pos) != player->seenChunks.end() && (player->connection->isLocal() || - g_NetworkManager.SystemFlagGet( + NetworkService.SystemFlagGet( player->connection->getNetworkPlayer(), flagIndex))) { player->connection->send(packet); sentTo.push_back(player); @@ -298,7 +298,7 @@ void PlayerChunkMap::PlayerChunk::broadcast(std::shared_ptr packet) { // (this flag will be the same for all players on the same system) int flagIndex = ServerPlayer::getFlagIndexForChunk(pos, parent->dimension); - if (!g_NetworkManager.SystemFlagGet( + if (!NetworkService.SystemFlagGet( player->connection->getNetworkPlayer(), flagIndex)) continue; diff --git a/targets/minecraft/server/level/ServerPlayer.cpp b/targets/minecraft/server/level/ServerPlayer.cpp index 1281b502c..8bd0d39e5 100644 --- a/targets/minecraft/server/level/ServerPlayer.cpp +++ b/targets/minecraft/server/level/ServerPlayer.cpp @@ -14,7 +14,7 @@ #include "EntityTracker.h" #include "minecraft/Console_Debug_enum.h" #include "minecraft/world/level/GameRules/GameRulesInstance.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "ServerLevel.h" #include "ServerPlayerGameMode.h" @@ -442,7 +442,7 @@ void ServerPlayer::doChunkSendingTick(bool dontDelayChunks) { // connection->getNetworkPlayer()->GetSmallId(), // canSendToPlayer, // connection->countDelayedPackets(), - // g_NetworkManager.GetHostPlayer()->GetSendQueueSizeMessages( + // NetworkService.GetHostPlayer()->GetSendQueueSizeMessages( // nullptr, true ), // connection->done); // } @@ -450,7 +450,7 @@ void ServerPlayer::doChunkSendingTick(bool dontDelayChunks) { if (dontDelayChunks || (canSendToPlayer && (connection->countDelayedPackets() < 4) && - (g_NetworkManager.GetHostPlayer() + (NetworkService.GetHostPlayer() ->GetSendQueueSizeMessages(nullptr, true) < 4) && //(tickCount - lastBrupSendTickCount) > //(connection->getNetworkPlayer()->GetCurrentRtt()>>4) && @@ -504,7 +504,7 @@ void ServerPlayer::doChunkSendingTick(bool dontDelayChunks) { // ever request that chunks be unloaded on the client // and so just gradually build up more and more of the // finite set of chunks as the player moves - if (!g_NetworkManager.SystemFlagGet( + if (!NetworkService.SystemFlagGet( connection->getNetworkPlayer(), flagIndex)) { // Log::info("Creating // BRUP for %d %d\n",nearest.x, nearest.z); @@ -530,7 +530,7 @@ void ServerPlayer::doChunkSendingTick(bool dontDelayChunks) { } // Set flag to say we have send this block already to // this system - g_NetworkManager.SystemFlagSet( + NetworkService.SystemFlagSet( connection->getNetworkPlayer(), flagIndex); chunkDataSent = true; diff --git a/targets/minecraft/server/network/PlayerConnection.cpp b/targets/minecraft/server/network/PlayerConnection.cpp index 185ad999b..b016c42fd 100644 --- a/targets/minecraft/server/network/PlayerConnection.cpp +++ b/targets/minecraft/server/network/PlayerConnection.cpp @@ -15,7 +15,7 @@ #include "minecraft/Console_Debug_enum.h" #include "app/common/DLC/DLCManager.h" #include "app/common/DLC/DLCSkinFile.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "minecraft/network/platform/NetworkPlayerInterface.h" #include "app/common/Network/Socket.h" #include "minecraft/client/model/SkinBox.h" @@ -1098,7 +1098,7 @@ void PlayerConnection::handleServerSettingsChanged( gameServices().getGameHostOption(eGameHostOption_All)))); // Update the QoS data - g_NetworkManager.UpdateAndSetGameSessionData(); + NetworkService.UpdateAndSetGameSessionData(); } } } diff --git a/targets/minecraft/world/level/Level.cpp b/targets/minecraft/world/level/Level.cpp index 88f11375b..17b0a37f4 100644 --- a/targets/minecraft/world/level/Level.cpp +++ b/targets/minecraft/world/level/Level.cpp @@ -20,7 +20,7 @@ #include "minecraft/GameEnums.h" #include "minecraft/client/resources/Colours/ColourTable.h" #include "minecraft/Console_Debug_enum.h" -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "util/FrameProfiler.h" #include "java/Random.h" #include "minecraft/Direction.h" @@ -3830,7 +3830,7 @@ void Level::setBlocksAndData(int x, int y, int z, int xs, int ys, int zs, // This is quite expensive so only actually do it if we are hosting, // online, and the update will actually change something bool forceUnshare = false; - if (g_NetworkManager.IsHost() && isClientSide) { + if (NetworkService.IsHost() && isClientSide) { forceUnshare = lc->testSetBlocksAndData(data, x0, y0, z0, x1, y1, z1, p); } @@ -3844,7 +3844,7 @@ void Level::setBlocksAndData(int x, int y, int z, int xs, int ys, int zs, setTilesDirty(xc * 16 + x0, y0, zc * 16 + z0, xc * 16 + x1, y1, zc * 16 + z1); - if (g_NetworkManager.IsHost() && isClientSide) { + if (NetworkService.IsHost() && isClientSide) { lc->startSharingTilesAndData(); } } diff --git a/targets/minecraft/world/level/chunk/LevelChunk.cpp b/targets/minecraft/world/level/chunk/LevelChunk.cpp index e7de983fa..14556ef88 100644 --- a/targets/minecraft/world/level/chunk/LevelChunk.cpp +++ b/targets/minecraft/world/level/chunk/LevelChunk.cpp @@ -9,7 +9,7 @@ #include #include -#include "app/common/Network/GameNetworkManager.h" +#include "minecraft/network/INetworkService.h" #include "SparseLightStorage.h" #include "java/Class.h" #include "java/Random.h" @@ -1832,7 +1832,7 @@ int LevelChunk::setBlocksAndData(std::vector& data, int x0, int y0, // server updated them. This will leave the lighting information out of // sync on the client, so resync for this & surrounding chunks that // might have been affected - if (level->isClientSide && g_NetworkManager.IsHost()) { + if (level->isClientSide && NetworkService.IsHost()) { reSyncLighting(); level->getChunk(x - 1, z - 1)->reSyncLighting(); level->getChunk(x - 0, z - 1)->reSyncLighting(); @@ -2154,7 +2154,7 @@ void LevelChunk::compressBlocks() { // compress the local client copy of the data if the data is unshared, since // we'll be throwing this data away again anyway once we share with the // server again. - if (level->isClientSide && g_NetworkManager.IsHost()) { + if (level->isClientSide && NetworkService.IsHost()) { // Note - only the extraction of the pointers needs to be done in the // lock, since even if the data is unshared whilst we are // processing this data is still valid (for the server) @@ -2254,7 +2254,7 @@ void LevelChunk::compressData() { // compress the local client copy of the data if the data is unshared, since // we'll be throwing this data away again anyway once we share with the // server again. - if (level->isClientSide && g_NetworkManager.IsHost()) { + if (level->isClientSide && NetworkService.IsHost()) { // Note - only the extraction of the pointers needs to be done in the // lock, since even if the data is unshared whilst we are // processing this data is still valid (for the server) diff --git a/targets/minecraft/world/level/tile/entity/SignTileEntity.cpp b/targets/minecraft/world/level/tile/entity/SignTileEntity.cpp index e25505c30..d02363f13 100644 --- a/targets/minecraft/world/level/tile/entity/SignTileEntity.cpp +++ b/targets/minecraft/world/level/tile/entity/SignTileEntity.cpp @@ -108,7 +108,7 @@ void SignTileEntity::setChanged() { // 4J-PB - For TU14 we are allowed to not verify strings anymore ! m_bVerified = true; /* - if(!g_NetworkManager.IsLocalGame() && !m_bVerified) + if(!NetworkService.IsLocalGame() && !m_bVerified) //if (pMinecraft->level->isClientSide) { char *wcMessages[MAX_SIGN_LINES];