From 8f896f065cd3a95d73f3cf7778a301cb41ca6141 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 6 Jul 2023 22:03:08 -0400 Subject: [PATCH] Limit registry wrapping to known bad mods to avoid performance issues --- .../forge/dynresources/ModelBakeEventHelper.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java index c2b3de68..0e81d4ae 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java @@ -1,6 +1,7 @@ package org.embeddedt.modernfix.forge.dynresources; import com.google.common.collect.ForwardingMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.common.graph.GraphBuilder; import com.google.common.graph.MutableGraph; @@ -26,6 +27,8 @@ import java.util.Set; * of the model registry that emulates vanilla keySet behavior. */ public class ModelBakeEventHelper { + // TODO: make into config option + private static final Set INCOMPATIBLE_MODS = ImmutableSet.of("industrialforegoing"); private final Map modelRegistry; private final Set topLevelModelLocations; private final MutableGraph dependencyGraph; @@ -43,6 +46,9 @@ public class ModelBakeEventHelper { this.dependencyGraph = GraphBuilder.undirected().build(); ModList.get().forEachModContainer((id, mc) -> { this.dependencyGraph.addNode(id); + for(IModInfo.ModVersion version : mc.getModInfo().getDependencies()) { + this.dependencyGraph.addNode(version.getModId()); + } }); for(String id : this.dependencyGraph.nodes()) { Optional mContainer = ModList.get().getModContainerById(id); @@ -61,6 +67,8 @@ public class ModelBakeEventHelper { modIdsToInclude.addAll(this.dependencyGraph.adjacentNodes(modId)); } catch(IllegalArgumentException ignored) { /* sanity check */ } modIdsToInclude.remove("minecraft"); + if(modIdsToInclude.stream().noneMatch(INCOMPATIBLE_MODS::contains)) + return this.modelRegistry; Set ourModelLocations = Sets.filter(this.topLevelModelLocations, loc -> modIdsToInclude.contains(loc.getNamespace())); return new ForwardingMap() { @Override