From e4d04afd9541cb3bab3313b7128379fe1368631c Mon Sep 17 00:00:00 2001 From: mezz Date: Mon, 1 May 2017 17:14:55 -0700 Subject: [PATCH] When the window is closed during loading, exit the game quickly (#3858) --- .../net/minecraftforge/fml/client/FMLClientHandler.java | 6 ++++++ .../net/minecraftforge/fml/common/FMLCommonHandler.java | 5 +++++ .../net/minecraftforge/fml/common/IFMLSidedHandler.java | 2 ++ .../java/net/minecraftforge/fml/common/LoadController.java | 6 ++++++ .../net/minecraftforge/fml/server/FMLServerHandler.java | 6 ++++++ 5 files changed, 25 insertions(+) diff --git a/src/main/java/net/minecraftforge/fml/client/FMLClientHandler.java b/src/main/java/net/minecraftforge/fml/client/FMLClientHandler.java index dc3c98a335..c19fbcf359 100644 --- a/src/main/java/net/minecraftforge/fml/client/FMLClientHandler.java +++ b/src/main/java/net/minecraftforge/fml/client/FMLClientHandler.java @@ -637,6 +637,12 @@ public class FMLClientHandler implements IFMLSidedHandler return loading; } + @Override + public boolean isDisplayCloseRequested() + { + return Display.isCreated() && Display.isCloseRequested(); + } + @Override public boolean shouldServerShouldBeKilledQuietly() { diff --git a/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java b/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java index 968b6de9d4..f79ac5a8e5 100644 --- a/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java +++ b/src/main/java/net/minecraftforge/fml/common/FMLCommonHandler.java @@ -438,6 +438,11 @@ public class FMLCommonHandler if (!confirmed) StartupQuery.abort(); } + public boolean isDisplayCloseRequested() + { + return sidedDelegate != null && sidedDelegate.isDisplayCloseRequested(); + } + public boolean shouldServerBeKilledQuietly() { if (sidedDelegate == null) diff --git a/src/main/java/net/minecraftforge/fml/common/IFMLSidedHandler.java b/src/main/java/net/minecraftforge/fml/common/IFMLSidedHandler.java index e28ea0fd13..28126cf6dd 100644 --- a/src/main/java/net/minecraftforge/fml/common/IFMLSidedHandler.java +++ b/src/main/java/net/minecraftforge/fml/common/IFMLSidedHandler.java @@ -51,6 +51,8 @@ public interface IFMLSidedHandler MinecraftServer getServer(); + boolean isDisplayCloseRequested(); + boolean shouldServerShouldBeKilledQuietly(); void addModAsResource(ModContainer container); diff --git a/src/main/java/net/minecraftforge/fml/common/LoadController.java b/src/main/java/net/minecraftforge/fml/common/LoadController.java index 784778b75a..792b6d5669 100644 --- a/src/main/java/net/minecraftforge/fml/common/LoadController.java +++ b/src/main/java/net/minecraftforge/fml/common/LoadController.java @@ -150,6 +150,12 @@ public class LoadController public void transition(LoaderState desiredState, boolean forceState) { + if (FMLCommonHandler.instance().isDisplayCloseRequested()) + { + FMLLog.info("The game window is being closed by the player, exiting."); + FMLCommonHandler.instance().exitJava(0, false); + } + LoaderState oldState = state; state = state.transition(!errors.isEmpty()); if (state != desiredState && !forceState) diff --git a/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java b/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java index 64a175dd44..68ae604e56 100644 --- a/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java +++ b/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java @@ -222,6 +222,12 @@ public class FMLServerHandler implements IFMLSidedHandler } } + @Override + public boolean isDisplayCloseRequested() + { + return false; + } + @Override public boolean shouldServerShouldBeKilledQuietly() {