diff --git a/Minecraft.Client/UI/Screens/PauseScreen.cpp b/Minecraft.Client/UI/Screens/PauseScreen.cpp index fe8fd973c..72e4efd56 100644 --- a/Minecraft.Client/UI/Screens/PauseScreen.cpp +++ b/Minecraft.Client/UI/Screens/PauseScreen.cpp @@ -22,6 +22,11 @@ void PauseScreen::init() { saveStep = 0; 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) + app.SetXuiServerAction(ProfileManager.GetPrimaryPad(), + eXuiServerAction_PauseServer, (void*)TRUE); buttons.push_back(new Button(1, width / 2 - 100, height / 4 + 24 * 5 + yo, L"Save and quit to title")); if (minecraft->isClientSide()) { @@ -49,6 +54,15 @@ void PauseScreen::init() { */ } +void PauseScreen::keyPressed(wchar_t eventCharacter, int eventKey) { + if (eventKey == Keyboard::KEY_ESCAPE && g_NetworkManager.IsLocalGame() && + g_NetworkManager.GetPlayerCount() == 1) + app.SetXuiServerAction(ProfileManager.GetPrimaryPad(), + eXuiServerAction_PauseServer, (void*)FALSE); + + Screen::keyPressed(eventCharacter, eventKey); +} + void PauseScreen::exitWorld(Minecraft* minecraft, bool save) { // 4jcraft: made our own static method for use in the java gui (other // places such as the deathscreen need this) @@ -78,6 +92,8 @@ void PauseScreen::buttonClicked(Button* button) { exitWorld(minecraft, true); } if (button->id == 4) { + app.SetXuiServerAction(ProfileManager.GetPrimaryPad(), + eXuiServerAction_PauseServer, (void*)FALSE); minecraft->setScreen(NULL); // minecraft->grabMouse(); // 4J - removed } diff --git a/Minecraft.Client/UI/Screens/PauseScreen.h b/Minecraft.Client/UI/Screens/PauseScreen.h index 375d03eb6..6f71beb09 100644 --- a/Minecraft.Client/UI/Screens/PauseScreen.h +++ b/Minecraft.Client/UI/Screens/PauseScreen.h @@ -9,6 +9,7 @@ private: public: PauseScreen(); // 4J added virtual void init(); + virtual void keyPressed(wchar_t eventCharacter, int eventKey); static void exitWorld(Minecraft* minecraft, bool save); protected: