diff --git a/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java b/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java index a93b57d4f..eec5fdb93 100644 --- a/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java +++ b/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java @@ -2,6 +2,7 @@ import com.google.common.collect.ForwardingMap; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.common.graph.GraphBuilder; import com.google.common.graph.MutableGraph; @@ -64,7 +65,7 @@ public ModelBakeEventHelper(Map modelRegistry) { for (var b : BuiltInRegistries.BLOCK) { blockStateCount += b.getStateDefinition().getPossibleStates().size(); } - this.topLevelModelLocations = new ObjectLinkedOpenHashSet<>(blockStateCount + BuiltInRegistries.ITEM.size()); + Set topLevelModelLocations = new ObjectLinkedOpenHashSet<>(blockStateCount + BuiltInRegistries.ITEM.size()); this.namespacesWithModels = new ObjectOpenHashSet<>(ModList.get().size()); var modelLocationBuilder = new ModelLocationBuilder(); BuiltInRegistries.BLOCK.entrySet().forEach(entry -> { @@ -76,10 +77,13 @@ public ModelBakeEventHelper(Map modelRegistry) { topLevelModelLocations.add(new ModelResourceLocation(key, "inventory")); namespacesWithModels.add(key.getNamespace()); }); - this.topLevelModelLocations.addAll(modelRegistry.keySet()); + topLevelModelLocations.addAll(modelRegistry.keySet()); for (var loc : modelRegistry.keySet()) { this.namespacesWithModels.add(loc.getNamespace()); } + // Iteration uses a compact array instead of following links through the hash table. + // These locations are only exposed through read-only views after construction. + this.topLevelModelLocations = ImmutableSet.copyOf(topLevelModelLocations); this.dependencyGraph = buildDependencyGraph(); }