From e22f5caec7ebee1796374ad737cda45e71bdfac7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 17 Mar 2024 15:18:18 -0400 Subject: [PATCH] Fix registry progress bar going off end of screen in NeoForge --- .../GameDataMixin.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java index 4170b69d..4302fdf2 100644 --- a/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java +++ b/neoforge/src/main/java/org/embeddedt/modernfix/neoforge/mixin/feature/registry_event_progress/GameDataMixin.java @@ -1,6 +1,7 @@ package org.embeddedt.modernfix.neoforge.mixin.feature.registry_event_progress; import net.neoforged.bus.api.Event; +import net.neoforged.bus.api.EventPriority; import net.neoforged.fml.ModList; import net.neoforged.fml.ModLoader; import net.neoforged.fml.ModLoadingContext; @@ -36,17 +37,25 @@ public class GameDataMixin { @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/neoforged/bus/api/Event;)V")) private static void swapThreadAndPost(ModLoader loader, T event) { RegisterEvent registryEvent = (RegisterEvent)event; - var pb = StartupMessageManager.addProgressBar(registryEvent.getRegistryKey().location().toString(), ModList.get().size()); - try { - loader.postEventWithWrapInModOrder(event, (mc, e) -> { - ModLoadingContext.get().setActiveContainer(mc); - pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName()); - pb.increment(); - }, (mc, e) -> { - ModLoadingContext.get().setActiveContainer(null); - }); - } finally { - pb.complete(); + // We control phases ourselves so we can make a separate progress bar for each phase. + String registryName = registryEvent.getRegistryKey().location().toString(); + for(EventPriority phase : EventPriority.values()) { + var pb = StartupMessageManager.addProgressBar(registryName, ModList.get().size()); + try { + ModList.get().forEachModInOrder(mc -> { + ModLoadingContext.get().setActiveContainer(mc); + pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName()); + pb.increment(); + var bus = mc.getEventBus(); + if(bus != null) { + bus.post(phase, event); + } + ModLoadingContext.get().setActiveContainer(null); + }); + } finally { + pb.complete(); + } } + } }