Fix registry progress bar on 1.21
This commit is contained in:
parent
1daea1f5e3
commit
631ad0528b
|
|
@ -3,52 +3,38 @@ 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.bus.api.EventPriority;
|
||||||
import net.neoforged.fml.ModList;
|
import net.neoforged.fml.ModList;
|
||||||
|
import net.neoforged.fml.ModLoader;
|
||||||
import net.neoforged.fml.ModLoadingContext;
|
import net.neoforged.fml.ModLoadingContext;
|
||||||
import net.neoforged.fml.event.IModBusEvent;
|
import net.neoforged.fml.event.IModBusEvent;
|
||||||
import net.neoforged.fml.loading.progress.StartupNotificationManager;
|
import net.neoforged.fml.loading.progress.StartupNotificationManager;
|
||||||
import net.neoforged.neoforge.registries.GameData;
|
import net.neoforged.neoforge.registries.GameData;
|
||||||
import net.neoforged.neoforge.registries.RegisterEvent;
|
import net.neoforged.neoforge.registries.RegisterEvent;
|
||||||
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
||||||
import org.embeddedt.modernfix.neoforge.util.AsyncLoadingScreen;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
@Mixin(value = GameData.class, remap = false)
|
@Mixin(value = GameData.class, remap = false)
|
||||||
@ClientOnlyMixin
|
@ClientOnlyMixin
|
||||||
public class GameDataMixin {
|
public class GameDataMixin {
|
||||||
|
|
||||||
private static AsyncLoadingScreen mfix$asyncScreen;
|
|
||||||
|
|
||||||
@Inject(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Ljava/util/Set;iterator()Ljava/util/Iterator;", ordinal = 0))
|
|
||||||
private static void createAsyncScreen(CallbackInfo ci) {
|
|
||||||
mfix$asyncScreen = new AsyncLoadingScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Ljava/lang/RuntimeException;getSuppressed()[Ljava/lang/Throwable;", ordinal = 0))
|
|
||||||
private static void closeAsyncScreen(CallbackInfo ci) {
|
|
||||||
mfix$asyncScreen.close();
|
|
||||||
mfix$asyncScreen = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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(T event) {
|
private static <T extends Event & IModBusEvent> void postWithProgressBar(T event) {
|
||||||
|
if(ModLoader.hasErrors()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
RegisterEvent registryEvent = (RegisterEvent)event;
|
RegisterEvent registryEvent = (RegisterEvent)event;
|
||||||
// We control phases ourselves so we can make a separate progress bar for each phase.
|
// We control phases ourselves so we can make a separate progress bar for each phase.
|
||||||
String registryName = registryEvent.getRegistryKey().location().toString();
|
String registryName = registryEvent.getRegistryKey().location().toString();
|
||||||
for(EventPriority phase : EventPriority.values()) {
|
for(EventPriority phase : EventPriority.values()) {
|
||||||
var pb = StartupNotificationManager.addProgressBar(registryName, ModList.get().size());
|
// FIXME need to use prepend rather than append for it to be visible for now
|
||||||
|
var pb = StartupNotificationManager.prependProgressBar(registryName, ModList.get().size());
|
||||||
try {
|
try {
|
||||||
ModList.get().forEachModInOrder(mc -> {
|
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();
|
||||||
var bus = mc.getEventBus();
|
mc.acceptEvent(phase, event);
|
||||||
if(bus != null) {
|
|
||||||
bus.post(phase, event);
|
|
||||||
}
|
|
||||||
ModLoadingContext.get().setActiveContainer(null);
|
ModLoadingContext.get().setActiveContainer(null);
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user