Shut down all other mod handlers if the loading cycle errors.

This prevents other mods from throwing errors and being blamed for initial cause.
This is a temporary hack until cpw re-writes the mod event dispatcher.
This commit is contained in:
LexManos 2020-07-28 14:39:53 -07:00
parent 30bad1e26d
commit 7592bbe87e
3 changed files with 10 additions and 0 deletions

View file

@ -104,6 +104,7 @@ public abstract class ModContainer
*/ */
public final void transitionState(LifecycleEventProvider.LifecycleEvent event, Consumer<List<ModLoadingException>> errorHandler) public final void transitionState(LifecycleEventProvider.LifecycleEvent event, Consumer<List<ModLoadingException>> errorHandler)
{ {
if (shutdown) return; //TODO: Remove
if (modLoadingStage == event.fromStage()) if (modLoadingStage == event.fromStage())
{ {
try try
@ -165,4 +166,11 @@ public abstract class ModContainer
* @param e Event to accept * @param e Event to accept
*/ */
protected void acceptEvent(Event e) {} 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;
}
} }

View file

@ -141,6 +141,7 @@ public class ModList
catch (InterruptedException | ExecutionException e) catch (InterruptedException | ExecutionException e)
{ {
LOGGER.error(LOADING, "Encountered an exception during parallel processing - sleeping 10 seconds to wait for jobs to finish", 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))); errorHandler.accept(Collections.singletonList(new UncaughtModLoadingException(lifecycleEvent.fromStage(), e)));
modLoadingThreadPool.awaitQuiescence(10, TimeUnit.SECONDS); modLoadingThreadPool.awaitQuiescence(10, TimeUnit.SECONDS);
if (!modLoadingThreadPool.isQuiescent()) { if (!modLoadingThreadPool.isQuiescent()) {

View file

@ -171,6 +171,7 @@ public class FMLModContainer extends ModContainer
@Override @Override
protected void acceptEvent(final Event e) protected void acceptEvent(final Event e)
{ {
if (this.shutdown) return;
this.eventBus.post(e); this.eventBus.post(e);
} }