diff --git a/src/main/java/net/minecraftforge/fml/ModContainer.java b/src/main/java/net/minecraftforge/fml/ModContainer.java index daeb247b0..4869f7557 100644 --- a/src/main/java/net/minecraftforge/fml/ModContainer.java +++ b/src/main/java/net/minecraftforge/fml/ModContainer.java @@ -104,6 +104,7 @@ public abstract class ModContainer */ public final void transitionState(LifecycleEventProvider.LifecycleEvent event, Consumer> errorHandler) { + if (shutdown) return; //TODO: Remove if (modLoadingStage == event.fromStage()) { try @@ -165,4 +166,11 @@ public abstract class ModContainer * @param e Event to accept */ protected void acceptEvent(Event e) {} + + //TEMPORARY INTERNAL FUNCTION UNTIL net.minecraftforge.fml.ModList.dispatchParallelEvent is fixed. + @Deprecated protected boolean shutdown = false; + @Deprecated protected void shutdown() + { + this.shutdown = true; + } } diff --git a/src/main/java/net/minecraftforge/fml/ModList.java b/src/main/java/net/minecraftforge/fml/ModList.java index c587048fd..929870e3c 100644 --- a/src/main/java/net/minecraftforge/fml/ModList.java +++ b/src/main/java/net/minecraftforge/fml/ModList.java @@ -141,6 +141,7 @@ public class ModList catch (InterruptedException | ExecutionException e) { LOGGER.error(LOADING, "Encountered an exception during parallel processing - sleeping 10 seconds to wait for jobs to finish", e); + this.mods.forEach(ModContainer::shutdown); //Prevent all future events from being sent out. errorHandler.accept(Collections.singletonList(new UncaughtModLoadingException(lifecycleEvent.fromStage(), e))); modLoadingThreadPool.awaitQuiescence(10, TimeUnit.SECONDS); if (!modLoadingThreadPool.isQuiescent()) { diff --git a/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java b/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java index 627196af7..cfc0e1443 100644 --- a/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java +++ b/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java @@ -171,6 +171,7 @@ public class FMLModContainer extends ModContainer @Override protected void acceptEvent(final Event e) { + if (this.shutdown) return; this.eventBus.post(e); }