Posted December 8, 201410 yr First off, this is most likely a Minecraft issue and not a Forge bug. I am registered to receive the GuiOpenEvent in one of my classes and noticed that it gets fired twice for GuiGameOver. Once when the GUI is first opened (expected) and again when it is closed by clicking the "Respawn" button (unexpected). At first I thought it may be because the GuiGameOver screen creates a 2nd new screen, GuiYesNo, after clicking the "Title screen" button but in both cases event.gui.toString() is still "net.minecraft.client.gui.GuiGameOver". To reproduce this, simply get to the death screen by typing "/kill" and notice that the GuiOpenEvent fires twice. I am using Forge 1.8-11.14.0.1261.
December 9, 201410 yr What is the stac of both? it wouldnt be us firing it twice, it'd be the game doing it. I do Forge for free, however the servers to run it arn't free, so anything is appreciated. Consider supporting the team on Patreon
December 9, 201410 yr Author 1st stacktrace (after "/kill" is executed): Thread [Client thread] (Suspended (breakpoint at line 112 in Coordinates)) Coordinates.GuiOpenEvent(GuiOpenEvent) line: 112 ASMEventHandler_14_Coordinates_GuiOpenEvent_GuiOpenEvent.invoke(Event) line: not available ASMEventHandler.invoke(Event) line: 55 EventBus.post(Event) line: 138 Minecraft.displayGuiScreen(GuiScreen) line: 906 Minecraft.runTick() line: 1639 Minecraft.runGameLoop() line: 1022 Minecraft.run() line: 345 Main.main(String[]) line: 117 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available Method.invoke(Object, Object...) line: not available Launch.launch(String[]) line: 135 Launch.main(String[]) line: 28 GradleStart(GradleStartCommon).launch(String[]) line: 78 GradleStart.main(String[]) line: 45 2nd stacktrace (after "Respawn" is clicked) Thread [Client thread] (Suspended (breakpoint at line 112 in Coordinates)) Coordinates.GuiOpenEvent(GuiOpenEvent) line: 112 ASMEventHandler_14_Coordinates_GuiOpenEvent_GuiOpenEvent.invoke(Event) line: not available ASMEventHandler.invoke(Event) line: 55 EventBus.post(Event) line: 138 Minecraft.displayGuiScreen(GuiScreen) line: 906 GuiGameOver.actionPerformed(GuiButton) line: 61 GuiGameOver(GuiScreen).mouseClicked(int, int, int) line: 472 GuiGameOver(GuiScreen).handleMouseInput() line: 544 GuiGameOver(GuiScreen).handleInput() line: 516 Minecraft.runTick() line: 1663 Minecraft.runGameLoop() line: 1022 Minecraft.run() line: 345 Main.main(String[]) line: 117 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available Method.invoke(Object, Object...) line: not available Launch.launch(String[]) line: 135 Launch.main(String[]) line: 28 GradleStart(GradleStartCommon).launch(String[]) line: 78 GradleStart.main(String[]) line: 45 Sure enough, when "Respawn" is clicked, Minecraft decides it wants to open a new null screen, which the game then interprets as a GuiGameOver because the player has <= 0 health. So it is just an unintended side effect of some bad coding from Mojang. I used this to my advantage by using the following logic: if(mc.currentScreen != null) { //"Respawn" is clicked } else { //GuiGameOver is initially displayed }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.