From bf24f709f96d4da96211a4d209c3938a94f909d0 Mon Sep 17 00:00:00 2001 From: Galen Guyer Date: Sun, 1 Mar 2026 13:13:11 -0500 Subject: [PATCH 1/7] Copy other folders needed for a standalone release asset --- Minecraft.Client/Minecraft.Client.vcxproj | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Minecraft.Client/Minecraft.Client.vcxproj b/Minecraft.Client/Minecraft.Client.vcxproj index 8e54bc42..a6aeac2e 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj +++ b/Minecraft.Client/Minecraft.Client.vcxproj @@ -1304,7 +1304,12 @@ if not exist "$(TargetDir)\savedata" mkdir "$(TargetDir)\savedata" Copying sound assets to output directory xcopy /q /y /i /s /e "$(ProjectDir)Durango\Sound" "$(OutDir)Durango\Sound" -xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" +xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" +xcopy /q /y /i /s /e "$(ProjectDir)Windows64\GameHDD" "$(OutDir)Windows64\GameHDD" +xcopy /q /y /i /s /e "$(ProjectDir)Common\Media" "$(OutDir)Common\Media" +xcopy /q /y /i /s /e "$(ProjectDir)Common\res" "$(OutDir)Common\res" +xcopy /q /y /i /s /e "$(ProjectDir)Common\Trial" "$(OutDir)Common\Trial" +xcopy /q /y /i /s /e "$(ProjectDir)Common\Tutorial" "$(OutDir)Common\Tutorial" $(ProjectDir)xbox\xex-dev.xml @@ -1437,7 +1442,12 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CU Copying sound assets to output directory xcopy /q /y /i /s /e "$(ProjectDir)Durango\Sound" "$(OutDir)Durango\Sound" -xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" +xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" +xcopy /q /y /i /s /e "$(ProjectDir)Windows64\GameHDD" "$(OutDir)Windows64\GameHDD" +xcopy /q /y /i /s /e "$(ProjectDir)Common\Media" "$(OutDir)Common\Media" +xcopy /q /y /i /s /e "$(ProjectDir)Common\res" "$(OutDir)Common\res" +xcopy /q /y /i /s /e "$(ProjectDir)Common\Trial" "$(OutDir)Common\Trial" +xcopy /q /y /i /s /e "$(ProjectDir)Common\Tutorial" "$(OutDir)Common\Tutorial" $(ProjectDir)xbox\xex-dev.xml From 3db164d913a0e6e464cc9f32c6c471cbea7a46e7 Mon Sep 17 00:00:00 2001 From: APAmk2 <107351397+APAmk2@users.noreply.github.com> Date: Sun, 1 Mar 2026 22:13:44 +0400 Subject: [PATCH 2/7] Windows: More proper shutdown --- Minecraft.Client/Windows64/Windows64_App.cpp | 4 ++-- Minecraft.Client/Windows64/Windows64_App.h | 2 ++ Minecraft.Client/Windows64/Windows64_Minecraft.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Minecraft.Client/Windows64/Windows64_App.cpp b/Minecraft.Client/Windows64/Windows64_App.cpp index a8b2d9cc..bba33cad 100644 --- a/Minecraft.Client/Windows64/Windows64_App.cpp +++ b/Minecraft.Client/Windows64/Windows64_App.cpp @@ -14,6 +14,7 @@ CConsoleMinecraftApp app; CConsoleMinecraftApp::CConsoleMinecraftApp() : CMinecraftApp() { + m_bShutdown = false; } void CConsoleMinecraftApp::SetRichPresenceContext(int iPad, int contextId) @@ -26,8 +27,7 @@ void CConsoleMinecraftApp::StoreLaunchData() } void CConsoleMinecraftApp::ExitGame() { - // This is likely not the correct way to exit the game, but it will do for now - ExitProcess(0); + m_bShutdown = true; } void CConsoleMinecraftApp::FatalLoadError() { diff --git a/Minecraft.Client/Windows64/Windows64_App.h b/Minecraft.Client/Windows64/Windows64_App.h index 39351d55..de8f6d85 100644 --- a/Minecraft.Client/Windows64/Windows64_App.h +++ b/Minecraft.Client/Windows64/Windows64_App.h @@ -29,6 +29,8 @@ public: // original code virtual void TemporaryCreateGameStart(); + + bool m_bShutdown; }; extern CConsoleMinecraftApp app; diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 42fb2d44..7fe77632 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -1054,7 +1054,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, } #endif MSG msg = {0}; - while( WM_QUIT != msg.message ) + while( WM_QUIT != msg.message && !app.m_bShutdown) { if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { From ec61d19d783da9dcc212aab5298ec98329280afd Mon Sep 17 00:00:00 2001 From: Galen Guyer Date: Sun, 1 Mar 2026 13:13:28 -0500 Subject: [PATCH 3/7] Revert "Merge pull request #25 from NEVARLeVrai/main" This reverts commit 33e1b5ceb9970e08cb6b2b987afdff4bd42331ac, reversing changes made to 44b68333a31727f2869470acb8df3dab2c653f68. This is a hacky way of doing it instead of just copying the assets that are needed --- .../Windows64/Windows64_Minecraft.cpp | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 42fb2d44..931e7f17 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -716,26 +716,6 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); - - WCHAR exePath[MAX_PATH] = { 0 }; - GetModuleFileNameW(NULL, exePath, MAX_PATH); - WCHAR* lastSlash = wcsrchr(exePath, L'\\'); - if (lastSlash) { - *lastSlash = L'\0'; - - WCHAR devCheckPath[MAX_PATH] = { 0 }; - swprintf_s(devCheckPath, MAX_PATH, L"%s\\..\\..\\Minecraft.Client\\Minecraft.Client.vcxproj", exePath); - - if (GetFileAttributesW(devCheckPath) != INVALID_FILE_ATTRIBUTES) { - WCHAR projectPath[MAX_PATH] = { 0 }; - swprintf_s(projectPath, MAX_PATH, L"%s\\..\\..\\Minecraft.Client", exePath); - SetCurrentDirectoryW(projectPath); - } - else { - SetCurrentDirectoryW(exePath); - } - } - // Declare DPI awareness so GetSystemMetrics returns physical pixels SetProcessDPIAware(); g_iScreenWidth = GetSystemMetrics(SM_CXSCREEN); From 90504b14794c912decbee51cb23cd966539cc354 Mon Sep 17 00:00:00 2001 From: Slenderman Date: Sun, 1 Mar 2026 13:38:11 -0500 Subject: [PATCH 4/7] fix various things --- Minecraft.Client/Common/DLC/DLCPack.cpp | 7 ++++-- Minecraft.Client/Common/DLC/DLCSkinFile.cpp | 4 +++- .../Common/UI/UIScene_LoadMenu.cpp | 2 +- .../Common/UI/UIScene_SkinSelectMenu.cpp | 24 ++++++++++++++++--- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Minecraft.Client/Common/DLC/DLCPack.cpp b/Minecraft.Client/Common/DLC/DLCPack.cpp index 23a2e44a..507e51a7 100644 --- a/Minecraft.Client/Common/DLC/DLCPack.cpp +++ b/Minecraft.Client/Common/DLC/DLCPack.cpp @@ -382,7 +382,10 @@ DWORD DLCPack::getFileIndexAt(DLCManager::EDLCType type, const wstring &path, bo bool DLCPack::hasPurchasedFile(DLCManager::EDLCType type, const wstring &path) { - if(type == DLCManager::e_DLCType_All) + // Patch all DLC to be "purchased" + return true; + + /*if(type == DLCManager::e_DLCType_All) { app.DebugPrintf("Unimplemented\n"); #ifndef _CONTENT_PACKAGE @@ -406,5 +409,5 @@ bool DLCPack::hasPurchasedFile(DLCManager::EDLCType type, const wstring &path) { //purchased return true; - } + }*/ } diff --git a/Minecraft.Client/Common/DLC/DLCSkinFile.cpp b/Minecraft.Client/Common/DLC/DLCSkinFile.cpp index f3768a34..c845acd9 100644 --- a/Minecraft.Client/Common/DLC/DLCSkinFile.cpp +++ b/Minecraft.Client/Common/DLC/DLCSkinFile.cpp @@ -205,7 +205,9 @@ bool DLCSkinFile::getParameterAsBool(DLCManager::EDLCParameterType type) switch(type) { case DLCManager::e_DLCParamType_Free: - return m_bIsFree; + // Patch all DLC to be "paid" + return false; + // return m_bIsFree; default: return false; } diff --git a/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp index e2cbc2aa..1c07e540 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp @@ -62,7 +62,7 @@ UIScene_LoadMenu::UIScene_LoadMenu(int iPad, void *initData, UILayer *parentLaye LoadMenuInitData *params = (LoadMenuInitData *)initData; - //m_labelGameName.init(app.GetString(IDS_WORLD_NAME)); + m_labelGameName.init(app.GetString(IDS_WORLD_NAME)); m_labelSeed.init(L""); m_labelCreatedMode.init(app.GetString(IDS_CREATED_IN_SURVIVAL)); diff --git a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp index 6910dd65..e40dc37a 100644 --- a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp @@ -1249,7 +1249,13 @@ void UIScene_SkinSelectMenu::updatePackDisplay() if(m_packIndex >= SKIN_SELECT_MAX_DEFAULTS) { DLCPack *thisPack = app.m_dlcManager.getPack(m_packIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); - setCentreLabel(thisPack->getName().c_str()); + // Fix the incorrect string type on title to display correctly + const char* name = (LPCSTR)thisPack->getName().c_str(); + int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); + std::wstring wName(len, 0); + MultiByteToWideChar(CP_UTF8, 0, name, -1, &wName[0], len); + setCentreLabel(wName.c_str()); + //setCentreLabel(thisPack->getName().c_str()); } else { @@ -1268,7 +1274,13 @@ void UIScene_SkinSelectMenu::updatePackDisplay() if(nextPackIndex >= SKIN_SELECT_MAX_DEFAULTS) { DLCPack *thisPack = app.m_dlcManager.getPack(nextPackIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); - setRightLabel(thisPack->getName().c_str()); + // Fix the incorrect string type on title to display correctly + const char* name = (LPCSTR)thisPack->getName().c_str(); + int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); + std::wstring wName(len, 0); + MultiByteToWideChar(CP_UTF8, 0, name, -1, &wName[0], len); + setRightLabel(wName.c_str()); + //setRightLabel(thisPack->getName().c_str()); } else { @@ -1287,7 +1299,13 @@ void UIScene_SkinSelectMenu::updatePackDisplay() if(previousPackIndex >= SKIN_SELECT_MAX_DEFAULTS) { DLCPack *thisPack = app.m_dlcManager.getPack(previousPackIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); - setLeftLabel(thisPack->getName().c_str()); + // Fix the incorrect string type on title to display correctly + const char* name = (LPCSTR)thisPack->getName().c_str(); + int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); + std::wstring wName(len, 0); + MultiByteToWideChar(CP_UTF8, 0, name, -1, &wName[0], len); + setLeftLabel(wName.c_str()); + //setLeftLabel(thisPack->getName().c_str()); } else { From 82fb9f4e33517ba237042aa250f7d924d9d6b11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=CE=9EV=CE=9BR?= Date: Sun, 1 Mar 2026 19:50:45 +0100 Subject: [PATCH 5/7] added Controls info (Keyboard & Mouse) to readme --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 279f7051..76b0afe1 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,23 @@ This project contains the source code of Minecraft Legacy Console Edition v1.3.0 - Added fullscreen mode support (toggle using F11) - Disabled V-Sync for better performance - Auto-detect native monitor resolution with DPI awareness, resulting in sharper visuals on high-resolution displays +- Full support for keyboard and mouse input + +## Controls (Keyboard & Mouse) + +- **Movement**: `W` `A` `S` `D` +- **Jump / Fly (Up)**: `Space` +- **Sneak / Fly (Down)**: `Shift` (Hold) +- **Sprint**: `Ctrl` (Hold) +- **Inventory**: `E` +- **Drop Item**: `Q` +- **Crafting**: `C` +- **Toggle View (FPS/TPS)**: `F5` +- **Fullscreen**: `F11` +- **Pause Menu**: `Esc` +- **Attack / Destroy**: `Left Click` +- **Use / Place**: `Right Click` +- **Select Item**: `Mouse Wheel` or keys `1` to `9` ## Build & Run From 6850c3b42c0e3919c45011fb4d9e24f839c9a569 Mon Sep 17 00:00:00 2001 From: void_17 <61356189+void2012@users.noreply.github.com> Date: Mon, 2 Mar 2026 01:54:47 +0700 Subject: [PATCH 6/7] Create pull_request_template.md --- .github/pull_request_template.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..c1108a81 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,22 @@ +# Pull Request Template + +## Description +Briefly describe the changes this PR introduces. + +## Changes + +### Previous Behavior +*Describe how the code behaved before this change.* + +### Root Cause +*Explain the core reason behind the erroneous/old behavior (e.g., bug, design flaw, missing edge case).* + +### New Behavior +*Describe how the code behaves after this change.* + +### Fix Implementation +*Detail exactly how the issue was resolved (specific code changes, algorithms, logic flows).* + +## Related Issues +- Fixes #[issue-number] +- Related to #[issue-number] From 6080c4ceac7a0968db06deac0853209f69aba2ab Mon Sep 17 00:00:00 2001 From: Slenderman Date: Sun, 1 Mar 2026 14:12:39 -0500 Subject: [PATCH 7/7] use C++ style cast instead of C-style cast --- Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp index e40dc37a..bce5e34e 100644 --- a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp @@ -1250,7 +1250,7 @@ void UIScene_SkinSelectMenu::updatePackDisplay() { DLCPack *thisPack = app.m_dlcManager.getPack(m_packIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); // Fix the incorrect string type on title to display correctly - const char* name = (LPCSTR)thisPack->getName().c_str(); + const char* name = static_cast(thisPack->getName().c_str()); int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); std::wstring wName(len, 0); MultiByteToWideChar(CP_UTF8, 0, name, -1, &wName[0], len); @@ -1275,7 +1275,7 @@ void UIScene_SkinSelectMenu::updatePackDisplay() { DLCPack *thisPack = app.m_dlcManager.getPack(nextPackIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); // Fix the incorrect string type on title to display correctly - const char* name = (LPCSTR)thisPack->getName().c_str(); + const char* name = static_cast(thisPack->getName().c_str()); int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); std::wstring wName(len, 0); MultiByteToWideChar(CP_UTF8, 0, name, -1, &wName[0], len); @@ -1300,7 +1300,7 @@ void UIScene_SkinSelectMenu::updatePackDisplay() { DLCPack *thisPack = app.m_dlcManager.getPack(previousPackIndex - SKIN_SELECT_MAX_DEFAULTS, DLCManager::e_DLCType_Skin); // Fix the incorrect string type on title to display correctly - const char* name = (LPCSTR)thisPack->getName().c_str(); + const char* name = static_cast(thisPack->getName().c_str()); int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); std::wstring wName(len, 0); MultiByteToWideChar(CP_UTF8, 0, name, -1, &wName[0], len);