Merge 1.20.4 into 1.20.5

This commit is contained in:
embeddedt 2024-03-17 16:09:55 -04:00
commit e6b28de740
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 29 additions and 21 deletions

View File

@ -5,18 +5,17 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.common.graph.GraphBuilder; import com.google.common.graph.GraphBuilder;
import com.google.common.graph.MutableGraph; import com.google.common.graph.MutableGraph;
import net.minecraft.client.renderer.block.BlockModelShaper;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModList; import net.neoforged.fml.ModList;
import net.neoforged.neoforgespi.language.IModInfo; import net.neoforged.neoforgespi.language.IModInfo;
import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.dynamicresources.ModelLocationCache;
import org.embeddedt.modernfix.util.ForwardingInclDefaultsMap; import org.embeddedt.modernfix.util.ForwardingInclDefaultsMap;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -41,14 +40,14 @@ public class ModelBakeEventHelper {
public ModelBakeEventHelper(Map<ResourceLocation, BakedModel> modelRegistry) { public ModelBakeEventHelper(Map<ResourceLocation, BakedModel> modelRegistry) {
this.modelRegistry = modelRegistry; this.modelRegistry = modelRegistry;
this.topLevelModelLocations = new HashSet<>(modelRegistry.keySet()); this.topLevelModelLocations = new HashSet<>(modelRegistry.keySet());
for(Block block : BuiltInRegistries.BLOCK) { // Skip going through ModelLocationCache because most of the accesses will be misses
for(BlockState state : block.getStateDefinition().getPossibleStates()) { BuiltInRegistries.BLOCK.entrySet().forEach(entry -> {
topLevelModelLocations.add(ModelLocationCache.get(state)); var location = entry.getKey().location();
for(BlockState state : entry.getValue().getStateDefinition().getPossibleStates()) {
topLevelModelLocations.add(BlockModelShaper.stateToModelLocation(location, state));
} }
} });
for(Item item : BuiltInRegistries.ITEM) { BuiltInRegistries.ITEM.keySet().forEach(location -> topLevelModelLocations.add(new ModelResourceLocation(location, "inventory")));
topLevelModelLocations.add(ModelLocationCache.get(item));
}
this.dependencyGraph = GraphBuilder.undirected().build(); this.dependencyGraph = GraphBuilder.undirected().build();
ModList.get().forEachModContainer((id, mc) -> { ModList.get().forEachModContainer((id, mc) -> {
this.dependencyGraph.addNode(id); this.dependencyGraph.addNode(id);

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.
try { String registryName = registryEvent.getRegistryKey().location().toString();
loader.postEventWithWrapInModOrder(event, (mc, e) -> { for(EventPriority phase : EventPriority.values()) {
ModLoadingContext.get().setActiveContainer(mc); var pb = StartupMessageManager.addProgressBar(registryName, ModList.get().size());
pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName()); try {
pb.increment(); ModList.get().forEachModInOrder(mc -> {
}, (mc, e) -> { ModLoadingContext.get().setActiveContainer(mc);
ModLoadingContext.get().setActiveContainer(null); pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName());
}); pb.increment();
} finally { var bus = mc.getEventBus();
pb.complete(); if(bus != null) {
bus.post(phase, event);
}
ModLoadingContext.get().setActiveContainer(null);
});
} finally {
pb.complete();
}
} }
} }
} }