Fix registry progress bar going off end of screen in NeoForge

This commit is contained in:
embeddedt 2024-03-17 15:18:18 -04:00
parent 0a2299ee33
commit e22f5caec7
No known key found for this signature in database
GPG Key ID: A69433EC199B5613

View File

@ -1,6 +1,7 @@
package org.embeddedt.modernfix.neoforge.mixin.feature.registry_event_progress; package org.embeddedt.modernfix.neoforge.mixin.feature.registry_event_progress;
import net.neoforged.bus.api.Event; import net.neoforged.bus.api.Event;
import net.neoforged.bus.api.EventPriority;
import net.neoforged.fml.ModList; import net.neoforged.fml.ModList;
import net.neoforged.fml.ModLoader; import net.neoforged.fml.ModLoader;
import net.neoforged.fml.ModLoadingContext; 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")) @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/neoforged/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/neoforged/bus/api/Event;)V"))
private static <T extends Event & IModBusEvent> void swapThreadAndPost(ModLoader loader, T event) { private static <T extends Event & IModBusEvent> void swapThreadAndPost(ModLoader loader, T event) {
RegisterEvent registryEvent = (RegisterEvent)event; RegisterEvent registryEvent = (RegisterEvent)event;
var pb = StartupMessageManager.addProgressBar(registryEvent.getRegistryKey().location().toString(), ModList.get().size()); // 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 { try {
loader.postEventWithWrapInModOrder(event, (mc, e) -> { ModList.get().forEachModInOrder(mc -> {
ModLoadingContext.get().setActiveContainer(mc); ModLoadingContext.get().setActiveContainer(mc);
pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName()); pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName());
pb.increment(); pb.increment();
}, (mc, e) -> { var bus = mc.getEventBus();
if(bus != null) {
bus.post(phase, event);
}
ModLoadingContext.get().setActiveContainer(null); ModLoadingContext.get().setActiveContainer(null);
}); });
} finally { } finally {
pb.complete(); pb.complete();
} }
} }
}
} }