Trim ModelManager maps

This commit is contained in:
embeddedt 2023-01-04 14:24:54 -05:00
parent 50fb19156c
commit 89ebab3ab8
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 39 additions and 1 deletions

View File

@ -0,0 +1,37 @@
package org.embeddedt.modernfix.mixin;
import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.model.ModelManager;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import org.embeddedt.modernfix.ModernFix;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.HashMap;
import java.util.Map;
@Mixin(ModelManager.class)
public class ModelManagerMixin {
private void trimBakeryMap(ModelBakery bakery, String fieldName) {
Map map = ObfuscationReflectionHelper.getPrivateValue(ModelBakery.class, bakery, fieldName);
int size = map.size();
ModernFix.LOGGER.warn("Trimming " + fieldName + " with " + size + " entries");
if(map instanceof HashMap) {
ObfuscationReflectionHelper.setPrivateValue(ModelBakery.class, bakery, new HashMap<>(), fieldName);
} else
map.clear();
}
@Inject(method = "apply(Lnet/minecraft/client/renderer/model/ModelBakery;Lnet/minecraft/resources/IResourceManager;Lnet/minecraft/profiler/IProfiler;)V", at = @At("RETURN"))
private void trimModelCaches(ModelBakery bakery, IResourceManager p_212853_2_, IProfiler p_212853_3_, CallbackInfo ci) {
trimBakeryMap(bakery, "unbakedCache");
trimBakeryMap(bakery, "bakedCache");
trimBakeryMap(bakery, "topLevelModels");
// bakedTopLevelModels is used as the model registry
}
}

View File

@ -18,7 +18,8 @@
"client": [
"MinecraftMixin",
"RenderTypeMixin",
"ModelBakeryMixin"
"ModelBakeryMixin",
"ModelManagerMixin"
],
"injectors": {
"defaultRequire": 1