diff --git a/common/src/main/java/com/vaporvee/loadsupport/Allocated.java b/common/src/main/java/com/vaporvee/loadsupport/Allocated.java index 327edc7..ef95e10 100644 --- a/common/src/main/java/com/vaporvee/loadsupport/Allocated.java +++ b/common/src/main/java/com/vaporvee/loadsupport/Allocated.java @@ -1,5 +1,10 @@ package com.vaporvee.loadsupport; +import com.vaporvee.loadsupport.platform.Services; + +import javax.swing.*; +import java.awt.*; + public class Allocated { public static float memoryInGB; public static void init(){ @@ -9,4 +14,43 @@ public class Allocated { public static void printAllocated() { Constants.LOG.info(String.format("Allocated Memory: %.1f GB", memoryInGB)); } + + public static String[] getWarningMessage(){ + Config config = Services.CONFIG.getConfig(); + return new String[]{config.errorTitle, config.errorDescription + .replace("{minMemory}", String.valueOf(config.minMemory)) + .replace("{currentMemory}", String.valueOf(memoryInGB))}; + }; + + static boolean errorWindowOpen = false; + private static JFrame errorWindow; + + public static void createErrorWindow() { + try { + if (!errorWindowOpen) { + errorWindowOpen = true; + SwingUtilities.invokeLater(() -> { + errorWindow = new JFrame(getWarningMessage()[0]); + errorWindow.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + errorWindow.setSize(400, 200); + errorWindow.setLocationRelativeTo(null); + + JLabel message = new JLabel("

"+ getWarningMessage()[1]+"

", JLabel.CENTER); + JButton exitButton = new JButton("OK"); + + exitButton.addActionListener(e -> { + errorWindow.dispose(); + //minecraftClient.stop(); // how to get client crossplatform? + }); + + errorWindow.setLayout(new BorderLayout()); + errorWindow.add(message, BorderLayout.CENTER); + errorWindow.add(exitButton, BorderLayout.SOUTH); + errorWindow.setVisible(true); + }); + } + } catch (RuntimeException e) { + Constants.LOG.error(String.valueOf(e)); + } + } } diff --git a/common/src/main/java/com/vaporvee/loadsupport/CommonClass.java b/common/src/main/java/com/vaporvee/loadsupport/CommonClass.java index 70eae69..2ad56a2 100644 --- a/common/src/main/java/com/vaporvee/loadsupport/CommonClass.java +++ b/common/src/main/java/com/vaporvee/loadsupport/CommonClass.java @@ -13,17 +13,17 @@ public class CommonClass { Allocated.printAllocated(); Services.CONFIG.InitConfig(); } - public static void checkConfig(LSConfig config) { - Constants.LOG.info("Load config test!"); + public static void checkConfig(Config config) { + Constants.LOG.info("Config loaded!"); if (config != null) { if(config.minMemory > Allocated.memoryInGB){ System.setProperty("java.awt.headless", "false"); - Constants.LOG.info("Not enough memory! Allocated memory in GB is {} but set in config is {}", + Constants.LOG.error("Not enough memory! Allocated memory in GB is {} but set in config is {}", Allocated.memoryInGB, config.minMemory); - //create jframe window + Allocated.createErrorWindow(); } } else { - Constants.LOG.info("Load config is null!"); + Constants.LOG.warn("Load config is null!"); } } } \ No newline at end of file diff --git a/common/src/main/java/com/vaporvee/loadsupport/LSConfig.java b/common/src/main/java/com/vaporvee/loadsupport/Config.java similarity index 73% rename from common/src/main/java/com/vaporvee/loadsupport/LSConfig.java rename to common/src/main/java/com/vaporvee/loadsupport/Config.java index d9b446d..0c671a2 100644 --- a/common/src/main/java/com/vaporvee/loadsupport/LSConfig.java +++ b/common/src/main/java/com/vaporvee/loadsupport/Config.java @@ -1,10 +1,9 @@ package com.vaporvee.loadsupport; import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -@Config(name = Constants.MOD_ID) -public class LSConfig implements ConfigData { +@me.shedaniel.autoconfig.annotation.Config(name = Constants.MOD_ID) +public class Config implements ConfigData { boolean startSound = true; float minMemory = 4.0f; String errorTitle = "Error: Not enough Java memory!"; diff --git a/common/src/main/java/com/vaporvee/loadsupport/platform/services/IConfig.java b/common/src/main/java/com/vaporvee/loadsupport/platform/services/IConfig.java index 46c6109..7cb6b34 100644 --- a/common/src/main/java/com/vaporvee/loadsupport/platform/services/IConfig.java +++ b/common/src/main/java/com/vaporvee/loadsupport/platform/services/IConfig.java @@ -1,10 +1,16 @@ package com.vaporvee.loadsupport.platform.services; -import com.vaporvee.loadsupport.LSConfig; +import com.vaporvee.loadsupport.Config; public interface IConfig { /** * Initializes config on available platforms */ void InitConfig(); + + /** + * Gets the populated config class with local config data when loaded correctly + * @return pupulated Config object + */ + Config getConfig(); } diff --git a/fabric/src/main/java/com/vaporvee/loadsupport/platform/LSConfigFabric.java b/fabric/src/main/java/com/vaporvee/loadsupport/platform/LSConfigFabric.java index f0b6bd0..4aa12fe 100644 --- a/fabric/src/main/java/com/vaporvee/loadsupport/platform/LSConfigFabric.java +++ b/fabric/src/main/java/com/vaporvee/loadsupport/platform/LSConfigFabric.java @@ -1,20 +1,21 @@ package com.vaporvee.loadsupport.platform; import com.vaporvee.loadsupport.CommonClass; -import com.vaporvee.loadsupport.Constants; -import com.vaporvee.loadsupport.LSConfig; +import com.vaporvee.loadsupport.Config; import com.vaporvee.loadsupport.platform.services.IConfig; import me.shedaniel.autoconfig.AutoConfig; -import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer; -@Config(name = Constants.MOD_ID) public class LSConfigFabric implements IConfig { - public static LSConfig config; + public static Config config; @Override public void InitConfig() { - AutoConfig.register(LSConfig.class, Toml4jConfigSerializer::new); - config = AutoConfig.getConfigHolder(LSConfig.class).getConfig(); + AutoConfig.register(Config.class, Toml4jConfigSerializer::new); + config = AutoConfig.getConfigHolder(Config.class).getConfig(); CommonClass.checkConfig(config); } + @Override + public Config getConfig() { + return config; + } } diff --git a/neoforge/src/main/java/com/vaporvee/loadsupport/platform/LSConfigNeoForge.java b/neoforge/src/main/java/com/vaporvee/loadsupport/platform/LSConfigNeoForge.java index 93b23ec..b6e13e9 100644 --- a/neoforge/src/main/java/com/vaporvee/loadsupport/platform/LSConfigNeoForge.java +++ b/neoforge/src/main/java/com/vaporvee/loadsupport/platform/LSConfigNeoForge.java @@ -1,20 +1,21 @@ package com.vaporvee.loadsupport.platform; import com.vaporvee.loadsupport.CommonClass; -import com.vaporvee.loadsupport.Constants; -import com.vaporvee.loadsupport.LSConfig; +import com.vaporvee.loadsupport.Config; import com.vaporvee.loadsupport.platform.services.IConfig; import me.shedaniel.autoconfig.AutoConfig; -import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer; -@Config(name = Constants.MOD_ID) public class LSConfigNeoForge implements IConfig { - public static LSConfig config; + public static Config config; @Override public void InitConfig() { - AutoConfig.register(LSConfig.class, Toml4jConfigSerializer::new); - config = AutoConfig.getConfigHolder(LSConfig.class).getConfig(); + AutoConfig.register(Config.class, Toml4jConfigSerializer::new); + config = AutoConfig.getConfigHolder(Config.class).getConfig(); CommonClass.checkConfig(config); } + @Override + public Config getConfig() { + return config; + } }