From 43878b91030d8ebb2da918a38b3282cb3b44ce09 Mon Sep 17 00:00:00 2001 From: 552eden <552eden@gmail.com> Date: Wed, 5 Aug 2026 00:39:26 +0300 Subject: [PATCH 1/2] fixed vita startup crash by guarding commerce calls --- Minecraft.Client/Common/Consoles_App.cpp | 2 +- .../Common/Network/Sony/PlatformNetworkManagerSony.cpp | 2 +- Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp | 4 ++-- Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp | 2 +- Minecraft.Client/PSVita/PSVita_App.cpp | 3 ++- Minecraft.Client/PSVita/PSVita_Minecraft.cpp | 2 ++ 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 0282a639..a58a8247 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -4419,7 +4419,7 @@ int CMinecraftApp::EthernetDisconnectReturned(void *pParam,int iPad,const C4JSto // 4J-PB - turn off the PSN store icon just in case this happened when we were in one of the DLC menus #ifdef __ORBIS__ sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ +#elif defined(__PSVITA__) && !defined(DISABLE_PSN) app.GetCommerce()->HidePsStoreIcon(); #endif app.SetAction(iPad,eAppAction_EthernetDisconnectedReturned_Menus); diff --git a/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp b/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp index 64bc1d67..ac1c4e9b 100644 --- a/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp +++ b/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp @@ -56,7 +56,7 @@ void CPlatformNetworkManagerSony::HandleStateChange(SQRNetworkManager::eSQRNetwo // 4J Stu - We may be accepting an invite from the DLC menu, so hide the icon #ifdef __ORBIS__ sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ +#elif defined(__PSVITA__) && !defined(DISABLE_PSN) app.GetCommerce()->HidePsStoreIcon(); #endif m_bLeavingGame = false; diff --git a/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp b/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp index 6c01f785..45794790 100644 --- a/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp @@ -100,7 +100,7 @@ void UIScene_DLCMainMenu::handleInput(int iPad, int key, bool repeat, bool press { #ifdef __ORBIS__ sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ +#elif defined(__PSVITA__) && !defined(DISABLE_PSN) app.GetCommerce()->HidePsStoreIcon(); #endif navigateBack(); @@ -174,7 +174,7 @@ int UIScene_DLCMainMenu::ExitDLCMainMenu(void *pParam,int iPad,C4JStorage::EMess #ifdef __ORBIS__ sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ +#elif defined(__PSVITA__) && !defined(DISABLE_PSN) app.GetCommerce()->HidePsStoreIcon(); #endif pClass->navigateBack(); diff --git a/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp b/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp index c4cad811..087faada 100644 --- a/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp @@ -107,7 +107,7 @@ int UIScene_DLCOffersMenu::ExitDLCOffersMenu(void *pParam,int iPad,C4JStorage::E #ifdef __ORBIS__ sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ +#elif defined(__PSVITA__) && !defined(DISABLE_PSN) app.GetCommerce()->HidePsStoreIcon(); #endif ui.NavigateToHomeMenu();//iPad,eUIScene_MainMenu); diff --git a/Minecraft.Client/PSVita/PSVita_App.cpp b/Minecraft.Client/PSVita/PSVita_App.cpp index 3bee4de3..e1990801 100644 --- a/Minecraft.Client/PSVita/PSVita_App.cpp +++ b/Minecraft.Client/PSVita/PSVita_App.cpp @@ -46,6 +46,7 @@ CConsoleMinecraftApp::CConsoleMinecraftApp() : CMinecraftApp() m_pSaveToDelete = NULL; m_pCheckoutProductInfo = NULL; + m_pCommerce = NULL; } void CConsoleMinecraftApp::SetRichPresenceContext(int iPad, int contextId) @@ -1080,7 +1081,7 @@ void CConsoleMinecraftApp::AppEventTick() bool CConsoleMinecraftApp::CheckForEmptyStore(int iPad) { -#ifdef VITA_COMMERCE +#ifdef VITA_COMMERCE_ENABLED SonyCommerce::CategoryInfo *pCategories=app.GetCategoryInfo(); bool bEmptyStore=true; diff --git a/Minecraft.Client/PSVita/PSVita_Minecraft.cpp b/Minecraft.Client/PSVita/PSVita_Minecraft.cpp index e4a32956..9c8e9b51 100644 --- a/Minecraft.Client/PSVita/PSVita_Minecraft.cpp +++ b/Minecraft.Client/PSVita/PSVita_Minecraft.cpp @@ -665,7 +665,9 @@ int main() app.CommerceInit(); // MGH - moved this here so GetCommerce isn't NULL // 4J-PB - Kick of the check for trial or full version - requires ui to be initialised +#ifndef DISABLE_PSN app.GetCommerce()->CheckForTrialUpgradeKey(); +#endif -- 2.54.0 From f1b29767c270db7fae2c14d68d187bd3abdf1291 Mon Sep 17 00:00:00 2001 From: 552eden <552eden@gmail.com> Date: Wed, 5 Aug 2026 01:17:32 +0300 Subject: [PATCH 2/2] fix lock crashes and enable full mode --- .../Common/Network/NetworkSocketLayer.cpp | 29 +++++++++++++------ Minecraft.Client/PSVita/PSVita_Minecraft.cpp | 7 +++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp b/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp index 62edc33f..9e45a79c 100644 --- a/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp +++ b/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp @@ -57,6 +57,9 @@ std::vector NetworkSocketLayer::s_disconnectedSmallIds; CRITICAL_SECTION NetworkSocketLayer::s_freeSmallIdLock; std::vector NetworkSocketLayer::s_freeSmallIds; +// only goes true on a successful Initialize(), and a failed one gets retried +static bool s_locksCreated = false; + bool g_MultiplayerHost = false; bool g_MultiplayerJoin = true; int g_MultiplayerPort = NETWORK_LAN_DEFAULT_PORT; @@ -65,6 +68,19 @@ char g_MultiplayerIP[256] = "127.0.0.1"; bool NetworkSocketLayer::Initialize() { if (s_initialized) return true; + + // Create the locks before touching the platform network stack. + if (!s_locksCreated) + { + InitializeCriticalSection(&s_sendLock); + InitializeCriticalSection(&s_connectionsLock); + InitializeCriticalSection(&s_advertiseLock); + InitializeCriticalSection(&s_discoveryLock); + InitializeCriticalSection(&s_disconnectLock); + InitializeCriticalSection(&s_freeSmallIdLock); + s_locksCreated = true; + } + #if defined _WINDOWS64 || defined _XBOX WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); @@ -95,19 +111,13 @@ bool NetworkSocketLayer::Initialize() param.flags = 0; int result = sceNetInit(¶m); - if (result < 0) { - app.DebugPrintf("sceNetInit failed: %d\n", result); + // libnet is brought up before us by the platform layer, which reports EBUSY here. + if (result < 0 && result != SCE_NET_ERROR_EBUSY) { + app.DebugPrintf("sceNetInit failed: 0x%08x\n", result); return false; } #endif - InitializeCriticalSection(&s_sendLock); - InitializeCriticalSection(&s_connectionsLock); - InitializeCriticalSection(&s_advertiseLock); - InitializeCriticalSection(&s_discoveryLock); - InitializeCriticalSection(&s_disconnectLock); - InitializeCriticalSection(&s_freeSmallIdLock); - s_initialized = true; StartDiscovery(); @@ -190,6 +200,7 @@ void NetworkSocketLayer::Shutdown() s_disconnectedSmallIds.clear(); DeleteCriticalSection(&s_freeSmallIdLock); s_freeSmallIds.clear(); + s_locksCreated = false; WSACleanup(); s_initialized = false; } diff --git a/Minecraft.Client/PSVita/PSVita_Minecraft.cpp b/Minecraft.Client/PSVita/PSVita_Minecraft.cpp index 9c8e9b51..ea26eb59 100644 --- a/Minecraft.Client/PSVita/PSVita_Minecraft.cpp +++ b/Minecraft.Client/PSVita/PSVita_Minecraft.cpp @@ -674,6 +674,13 @@ int main() // debug switch to trial version //ProfileManager.SetDebugFullOverride(false); +#ifdef DISABLE_PSN + // Set full mode. on DISABLE_PSN we cannot check if its trial or not. + ProfileManager.SetFullVersion(true); + ProfileManager.SetDebugFullOverride(true); + StorageManager.SetSaveDisabled(false); +#endif + //ProfileManager.AddDLC(2); StorageManager.SetDLCPackageRoot("DLCDrive"); #if 0 -- 2.54.0