Skip to content

Commit 8e2d696

Browse files
committed
Improve dynamic resources performance when mods iterate the whole model map
1 parent 7a8f40d commit 8e2d696

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import net.minecraft.client.resources.model.UnbakedModel;
2121
import net.minecraft.client.resources.model.cuboid.ItemModelGenerator;
2222
import net.minecraft.client.resources.model.cuboid.MissingCuboidModel;
23+
import net.minecraft.core.registries.BuiltInRegistries;
2324
import net.minecraft.resources.FileToIdConverter;
2425
import net.minecraft.resources.Identifier;
2526
import net.minecraft.server.packs.resources.Resource;
@@ -73,7 +74,25 @@ public interface SingleBlockStateEntryLoader {
7374
}
7475

7576
public static Set<BlockState> getAllBlockStates() {
76-
return ReferenceSets.unmodifiable(((IdMapperAccessor<BlockState>) Block.BLOCK_STATE_REGISTRY).getReferenceMap().keySet());
77+
var blockStateSet = ((IdMapperAccessor<BlockState>) Block.BLOCK_STATE_REGISTRY).getReferenceMap().keySet();
78+
return new AbstractSet<>() {
79+
@Override
80+
public Iterator<BlockState> iterator() {
81+
// We explicitly override iterator() and handle it differently so that mods iterating the maps
82+
// are likely to work with the same block many times in a row, which hits our caches better
83+
return BuiltInRegistries.BLOCK.stream().flatMap(b -> b.getStateDefinition().getPossibleStates().stream()).iterator();
84+
}
85+
86+
@Override
87+
public boolean contains(Object o) {
88+
return blockStateSet.contains(o);
89+
}
90+
91+
@Override
92+
public int size() {
93+
return blockStateSet.size();
94+
}
95+
};
7796
}
7897

7998
public static BlockStateModelLoader.LoadedModels createDynamicBlockStateLoadedModels(Map<Identifier, List<Resource>> resourceMap, SingleBlockStateEntryLoader entryLoader) {

0 commit comments

Comments
 (0)