diff --git a/src/main/java/net/minecraftforge/fml/client/FMLClientHandler.java b/src/main/java/net/minecraftforge/fml/client/FMLClientHandler.java index dc3c98a33..c19fbcf35 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 968b6de9d..f79ac5a8e 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 e28ea0fd1..28126cf6d 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 784778b75..792b6d566 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 64a175dd4..68ae604e5 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() {