diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java index 1225ff6c..a43fc6db 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/MixinModelManager.java @@ -1,11 +1,14 @@ package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.resources.model.BlockStateModelLoader; import net.minecraft.client.resources.model.ClientItemInfoLoader; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.resources.Identifier; import net.minecraft.server.packs.resources.Resource; +import net.minecraft.world.level.block.state.BlockState; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.dynresources.DynamicModelSystem; import org.spongepowered.asm.mixin.Mixin; @@ -41,4 +44,13 @@ public class MixinModelManager { ) { return new DynamicModelSystem.DynamicResolver(inputModels, loadedModels, loadedClientInfos, standaloneModels).resolvedModels(); } + + /** + * @author embeddedt + * @reason Build the model groups dynamically + */ + @Overwrite + private static Object2IntMap buildModelGroups(BlockColors blockColors, BlockStateModelLoader.LoadedModels loadedModels) { + return new DynamicModelSystem.BlockGroupingMap(blockColors, loadedModels); + } } diff --git a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java index 03bbc302..f9275ea9 100644 --- a/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java +++ b/src/main/java/org/embeddedt/modernfix/dynresources/DynamicModelSystem.java @@ -4,8 +4,13 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.Maps; +import it.unimi.dsi.fastutil.objects.AbstractObject2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectSet; +import it.unimi.dsi.fastutil.objects.ObjectSets; +import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.renderer.block.model.ItemModelGenerator; -import net.minecraft.client.renderer.item.ItemModel; import net.minecraft.client.resources.model.BlockStateModelLoader; import net.minecraft.client.resources.model.ClientItemInfoLoader; import net.minecraft.client.resources.model.MissingBlockModel; @@ -112,4 +117,35 @@ public class DynamicModelSystem { return new ModelManager.ResolvedModels(resolvedMissingModel, Maps.asMap(inputModels.keySet(), resolvedModelCache::getUnchecked)); } } + + public static class BlockGroupingMap extends AbstractObject2IntMap { + private final BlockColors blockColors; + private final BlockStateModelLoader.LoadedModels loadedModels; + + record GroupKey(Object equalityGroup, List coloringValues) {} + + private final Object2IntMap groupKeyToId; + + public BlockGroupingMap(BlockColors blockColors, BlockStateModelLoader.LoadedModels loadedModels) { + this.blockColors = blockColors; + this.loadedModels = loadedModels; + this.groupKeyToId = new Object2IntOpenHashMap<>(); + } + + @Override + public int size() { + return 0; + } + + @Override + public ObjectSet> object2IntEntrySet() { + return ObjectSets.emptySet(); + } + + @Override + public int getInt(Object key) { + // TODO: Implement + return -1; + } + } }