diff --git a/src/main/java/codechicken/nei/ClientHandler.java b/src/main/java/codechicken/nei/ClientHandler.java index c3429a9a..401fe28c 100644 --- a/src/main/java/codechicken/nei/ClientHandler.java +++ b/src/main/java/codechicken/nei/ClientHandler.java @@ -276,7 +276,11 @@ public class ClientHandler { if (!NEIClientConfig.isEnabled()) return; - KeyManager.tickKeyStates(); + /* + * NEI plugins are loaded in a separate thread. Make sure loading them has finished otherwise a CME might + * occur in KeyManager if a plugin calls API.addKeyBind() during initialization. + */ + if (NEIClientConfig.isLoaded()) KeyManager.tickKeyStates(); NEIController.updateUnlimitedItems(mc.thePlayer.inventory); if (mc.currentScreen == null) NEIController.processCreativeCycling(mc.thePlayer.inventory); diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index 15025876..de4a0a0b 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -472,8 +472,6 @@ public class NEIClientConfig { NEIController.load(); RecipeCatalysts.loadCatalystInfo(); - configLoaded = true; - new Thread("NEI Plugin Loader") { @Override @@ -496,6 +494,7 @@ public class NEIClientConfig { } MinecraftForge.EVENT_BUS.post(new NEIConfigsLoadedEvent()); + configLoaded = true; } }.start(); ItemSorter.loadConfig(); @@ -597,6 +596,10 @@ public class NEIClientConfig { return enabledOverride && getBooleanSetting("inventory.widgetsenabled"); } + public static boolean isLoaded() { + return configLoaded; + } + public static boolean loadHandlersFromJar() { return !getBooleanSetting("tools.handler_load_from_config"); }