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 4354ff49..570f5242 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 @@ -21,6 +21,7 @@ import net.minecraftforge.fml.server.ServerLifecycleHooks; import net.minecraftforge.registries.ForgeRegistries; import org.apache.commons.lang3.tuple.Pair; 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; @@ -46,6 +47,7 @@ public class ModernFixForge { MinecraftForge.EVENT_BUS.register(KubeUtil.class); PacketHandler.register(); ModFileScanDataDeduplicator.deduplicate(); + ClassLoadHack.loadModClasses(); } @SubscribeEvent