From 99924ef6f857083c0d960d3d7ca50781ac09556a Mon Sep 17 00:00:00 2001 From: UniversePM Date: Wed, 26 Aug 2026 17:52:26 -0500 Subject: [PATCH] is it morally wrong to steal code --- .../Windows64/Windows64_Minecraft.cpp | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 35f89393..0b162786 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -301,6 +301,108 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { + case WM_KILLFOCUS: + g_KBMInput.ClearAllState(); + g_KBMInput.SetWindowFocused(false); + if (g_KBMInput.IsMouseGrabbed()) + g_KBMInput.SetMouseGrabbed(false); + break; + case WM_SETFOCUS: + g_KBMInput.SetWindowFocused(true); + break; + case WM_CHAR: + if (wParam >= 0x20 || wParam == 0x08 || wParam == 0x0D) + g_KBMInput.OnChar(static_cast(wParam)); + break; + + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + { + int vk = static_cast(wParam); + if ((lParam & 0x40000000) && vk != VK_LEFT && vk != VK_RIGHT && vk != VK_BACK) + break; + const Minecraft* pm = Minecraft::GetInstance(); + ChatScreen* chat = pm && pm->screen ? dynamic_cast(pm->screen) : nullptr; + if (chat) + { + if (vk == 'V' && (GetKeyState(VK_CONTROL) & 0x8000)) + { chat->handlePasteRequest(); break; } + if ((vk == VK_UP || vk == VK_DOWN) && !(lParam & 0x40000000)) + { if (vk == VK_UP) chat->handleHistoryUp(); else chat->handleHistoryDown(); break; } + if (vk >= '1' && vk <= '9') + break; + if (vk == VK_SHIFT) + break; + } + + if (vk == VK_SHIFT) + vk = (MapVirtualKey((lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK_EX) == VK_RSHIFT) ? VK_RSHIFT : VK_LSHIFT; + else if (vk == VK_CONTROL) + vk = (lParam & (1 <, 24)) ? VK_RCONTROL : VK_LCONTROL; + else if (vk == VK_MENU) + vk = (lParam & (1 << 24)) ? VK_RMENU : VK_LMENU; + g_KBMInput.OnKeyDown(vk); + break; + } + case WM_KEYUP: + case WM_SYSKEYUP: + { + int vk = static_cast(wParam); + if (vk == VK_SHIFT) + vk = (MapVirtualKey((lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK_EX) == VK_RSHIFT) ? VK_RSHIFT : VK_LSHIFT; + else if (vk == VK_CONTROL) + vk = (lParam & (1 << 24)) ? VK_RCONTROL : VK_LCONTROL; + else if (vk == VK_MENU) + vk = (lParam & (1 << 24)) ? VK_RMENU : VK_LMENU; + g_KBMInput.OnKeyUp(vk); + break; + } + + case WM_LBUTTONDOWN: + g_KBMInput.OnMouseButtonDown(KeyboardMouseInput::MOUSE_LEFT); + break; + case WM_LBUTTONUP: + g_KBMInput.OnMouseButtonUp(KeyboardMouseInput::MOUSE_LEFT); + break; + case WM_RBUTTONDOWN: + g_KBMInput.OnMouseButtonDown(KeyboardMouseInput::MOUSE_RIGHT); + break; + case WM_RBUTTONUP: + g_KBMInput.OnMouseButtonUp(KeyboardMouseInput::MOUSE_RIGHT); + break; + case WM_MBUTTONDOWN: + g_KBMInput.OnMouseButtonDown(KeyboardMouseInput::MOUSE_MIDDLE); + break; + case WM_MBUTTONUP: + g_KBMInput.OnMouseButtonUp(KeyboardMouseInput::MOUSE_MIDDLE); + break; + + case WM_MOUSEMOVE: + g_KBMInput.OnMouseMove(LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_MOUSEWHEEL: + g_KBMInput.OnMouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); + break; + + case WM_INPUT: + { + UINT dwSize = 0; + GetRawInputData((HRAWINPUT)lParam, RID_INPUT, nullptr, &dwSize, sizeof(RAWINPUTHEADER)); + if (dwSize > 0 && dwSize <= 256) + { + BYTE rawBuffer[256]; + if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, rawBuffer, &dwSize, sizeof(RAWINPUTHEADER)) == dwSize) + { + const RAWINPUT* raw = (RAWINPUT*)rawBuffer; + if (raw->header.dwType == RIM_TYPEMOUSE) + { + g_KBMInput.OnRawMouseDelta(raw->data.mouse.lLastX, raw->data.mouse.lLastY); + } + } + } + } + break; case WM_SETCURSOR: if (LOWORD(lParam) == HTCLIENT || LOWORD(lParam) == HTCAPTION) {