diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ClassLoadHack.java b/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ClassLoadHack.java new file mode 100644 index 00000000..169de148 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/classloading/ClassLoadHack.java @@ -0,0 +1,26 @@ +package org.embeddedt.modernfix.forge.classloading; + +/** + * Sometimes mods have classes that circularly reference each other. If each of these classes ends up being loaded + * from two mods, a deadlock occurs. + * + * To avoid this problem we maintain a list of classes that should be loaded early and do it via Class.forName. + */ +public class ClassLoadHack { + private static final String[] classesToLoadEarly = new String[] { + "team.creative.creativecore.common.config.ConfigTypeConveration", + "team.creative.creativecore.common.util.ingredient.CreativeIngredient" + }; + + public static void loadModClasses() { + for(String clzName : classesToLoadEarly) { + try { + Class.forName(clzName); + } catch(Throwable e) { + if(!(e instanceof ClassNotFoundException)) { + e.printStackTrace(); + } + } + } + } +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java index ec81da54..55d19c56 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixForge.java @@ -22,6 +22,7 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegisterEvent; import net.minecraftforge.server.ServerLifecycleHooks; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.forge.classloading.ClassLoadHack; import org.embeddedt.modernfix.forge.classloading.ModFileScanDataDeduplicator; import org.embeddedt.modernfix.forge.ModernFixConfig; import org.embeddedt.modernfix.entity.EntityDataIDSyncHandler; @@ -44,6 +45,7 @@ public class ModernFixForge { ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG); PacketHandler.register(); ModFileScanDataDeduplicator.deduplicate(); + ClassLoadHack.loadModClasses(); } @SubscribeEvent