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 f27f8824..e96181b2 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 @@ -20,6 +20,7 @@ import net.minecraftforge.network.NetworkConstants; import net.minecraftforge.registries.ForgeRegistries; 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; @@ -42,6 +43,7 @@ public class ModernFixForge { ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG); PacketHandler.register(); ModFileScanDataDeduplicator.deduplicate(); + ClassLoadHack.loadModClasses(); } @SubscribeEvent