From 841f29cb6330187b0b5cf759b420086617c83aba Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Mon, 14 Mar 2022 23:30:04 +0100 Subject: [PATCH] Avoid 1.14.2 crashing when pressing anywhere and in the option menu --- .../src/main/java/org/lwjgl/glfw/GLFW.java | 114 ++++++++++-------- 1 file changed, 62 insertions(+), 52 deletions(-) diff --git a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java index 1b15369b2..e0c095070 100644 --- a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java @@ -1083,57 +1083,62 @@ public class GLFW } for (Long ptr : mGLFWWindowMap.keySet()) { - switch (dataArr[0]) { - case CallbackBridge.EVENT_TYPE_CHAR: - if (mGLFWCharCallback != null) { - mGLFWCharCallback.invoke(ptr, dataArr[1]); - } - break; - case CallbackBridge.EVENT_TYPE_CHAR_MODS: - if (mGLFWCharModsCallback != null) { - mGLFWCharModsCallback.invoke(ptr, dataArr[1], dataArr[2]); - } - break; - case CallbackBridge.EVENT_TYPE_CURSOR_ENTER: - if (mGLFWCursorEnterCallback != null) { - mGLFWCursorEnterCallback.invoke(ptr, dataArr[1] == 1); - } - break; - case CallbackBridge.EVENT_TYPE_KEY: - if (mGLFWKeyCallback != null) { - keyDownBuffer[Math.max(0, dataArr[1]-31)]=(byte)(int)dataArr[3]; - mGLFWKeyCallback.invoke(ptr, dataArr[1], dataArr[2], dataArr[3], dataArr[4]); - } - break; - case CallbackBridge.EVENT_TYPE_MOUSE_BUTTON: - if (mGLFWMouseButtonCallback != null) { - mGLFWMouseButtonCallback.invoke(ptr, dataArr[1], dataArr[2], dataArr[3]); - } - break; - case CallbackBridge.EVENT_TYPE_SCROLL: - if (mGLFWScrollCallback != null) { - mGLFWScrollCallback.invoke(ptr, dataArr[1], dataArr[2]); - } - break; - case CallbackBridge.EVENT_TYPE_FRAMEBUFFER_SIZE: - case CallbackBridge.EVENT_TYPE_WINDOW_SIZE: - try { - internalChangeMonitorSize(dataArr[1], dataArr[2]); - glfwSetWindowSize(ptr, mGLFWWindowWidth, mGLFWWindowHeight); - if (dataArr[0] == CallbackBridge.EVENT_TYPE_FRAMEBUFFER_SIZE && mGLFWFramebufferSizeCallback != null) { - mGLFWFramebufferSizeCallback.invoke(ptr, mGLFWWindowWidth, mGLFWWindowHeight); - } else if (dataArr[0] == CallbackBridge.EVENT_TYPE_WINDOW_SIZE && mGLFWWindowSizeCallback != null) { - mGLFWWindowSizeCallback.invoke(ptr, mGLFWWindowWidth, mGLFWWindowHeight); - } - } catch (Throwable th) { - // Some Minecraft versions cause a NPE when setting size, so we will have to ignore them to make game alive - th.printStackTrace(); - } - break; - default: - System.err.println("GLFWEvent: unknown callback type " + dataArr[0]); - break; - } + try { + switch (dataArr[0]) { + case CallbackBridge.EVENT_TYPE_CHAR: + if (mGLFWCharCallback != null) { + mGLFWCharCallback.invoke(ptr, dataArr[1]); + } + break; + case CallbackBridge.EVENT_TYPE_CHAR_MODS: + if (mGLFWCharModsCallback != null) { + mGLFWCharModsCallback.invoke(ptr, dataArr[1], dataArr[2]); + } + break; + case CallbackBridge.EVENT_TYPE_CURSOR_ENTER: + if (mGLFWCursorEnterCallback != null) { + mGLFWCursorEnterCallback.invoke(ptr, dataArr[1] == 1); + } + break; + case CallbackBridge.EVENT_TYPE_KEY: + if (mGLFWKeyCallback != null) { + keyDownBuffer[Math.max(0, dataArr[1]-31)]=(byte)(int)dataArr[3]; + mGLFWKeyCallback.invoke(ptr, dataArr[1], dataArr[2], dataArr[3], dataArr[4]); + } + break; + case CallbackBridge.EVENT_TYPE_MOUSE_BUTTON: + if (mGLFWMouseButtonCallback != null) { + mGLFWMouseButtonCallback.invoke(ptr, dataArr[1], dataArr[2], dataArr[3]); + } + break; + case CallbackBridge.EVENT_TYPE_SCROLL: + if (mGLFWScrollCallback != null) { + mGLFWScrollCallback.invoke(ptr, dataArr[1], dataArr[2]); + } + break; + case CallbackBridge.EVENT_TYPE_FRAMEBUFFER_SIZE: + case CallbackBridge.EVENT_TYPE_WINDOW_SIZE: + try { + internalChangeMonitorSize(dataArr[1], dataArr[2]); + glfwSetWindowSize(ptr, mGLFWWindowWidth, mGLFWWindowHeight); + if (dataArr[0] == CallbackBridge.EVENT_TYPE_FRAMEBUFFER_SIZE && mGLFWFramebufferSizeCallback != null) { + mGLFWFramebufferSizeCallback.invoke(ptr, mGLFWWindowWidth, mGLFWWindowHeight); + } else if (dataArr[0] == CallbackBridge.EVENT_TYPE_WINDOW_SIZE && mGLFWWindowSizeCallback != null) { + mGLFWWindowSizeCallback.invoke(ptr, mGLFWWindowWidth, mGLFWWindowHeight); + } + } catch (Throwable th) { + // Some Minecraft versions cause a NPE when setting size, so we will have to ignore them to make game alive + th.printStackTrace(); + } + break; + default: + System.err.println("GLFWEvent: unknown callback type " + dataArr[0]); + break; + } + }catch (Throwable throwable){ + throwable.printStackTrace(); + } + } } @@ -1142,7 +1147,12 @@ public class GLFW mGLFWCursorLastY = mGLFWCursorY; for (Long ptr : mGLFWWindowMap.keySet()) { if (!mGLFWIsGrabbing && mGLFWWindowSizeCallback != null) { - mGLFWWindowSizeCallback.invoke(ptr, mGLFWWindowWidth, mGLFWWindowHeight); + try { + mGLFWWindowSizeCallback.invoke(ptr, mGLFWWindowWidth, mGLFWWindowHeight); + }catch (Throwable throwable){ + throwable.printStackTrace(); + } + } mGLFWCursorPosCallback.invoke(ptr, mGLFWCursorX, mGLFWCursorY); }