diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 23f20bd1..2b6b60c1 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -40,6 +40,7 @@ public class ModernFixEarlyConfig { this.addMixinRule("perf.deduplicate_location", true); this.addMixinRule("perf.cache_blockstate_cache_arrays", true); this.addMixinRule("perf.faster_baking", true); + this.addMixinRule("perf.cache_model_materials", true); /* Keep this off if JEI isn't installed to prevent breaking vanilla gameplay */ this.addMixinRule("perf.blast_search_trees", FMLLoader.getLoadingModList().getModFileById("jei") != null); this.addMixinRule("safety", true); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java new file mode 100644 index 00000000..9da20bae --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/MultipartMixin.java @@ -0,0 +1,26 @@ +package org.embeddedt.modernfix.mixin.perf.cache_model_materials; + +import net.minecraft.client.renderer.model.multipart.Multipart; +import net.minecraft.util.ResourceLocation; +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.CallbackInfoReturnable; + +import java.util.Collection; + +@Mixin(Multipart.class) +public class MultipartMixin { + private Collection dependencyCache = null; + @Inject(method = "getDependencies", at = @At("HEAD"), cancellable = true) + private void useDependencyCache(CallbackInfoReturnable> cir) { + if(dependencyCache != null) + cir.setReturnValue(dependencyCache); + } + + @Inject(method = "getDependencies", at = @At("RETURN")) + private void storeDependencyCache(CallbackInfoReturnable> cir) { + if(dependencyCache == null) + dependencyCache = cir.getReturnValue(); + } +} diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java new file mode 100644 index 00000000..aed0fc11 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/cache_model_materials/VanillaModelMixin.java @@ -0,0 +1,36 @@ +package org.embeddedt.modernfix.mixin.perf.cache_model_materials; + +import com.mojang.datafixers.util.Pair; +import net.minecraft.client.renderer.model.BlockModel; +import net.minecraft.client.renderer.model.IUnbakedModel; +import net.minecraft.client.renderer.model.RenderMaterial; +import net.minecraft.client.renderer.model.VariantList; +import net.minecraft.client.renderer.model.multipart.Multipart; +import net.minecraft.util.ResourceLocation; +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.CallbackInfoReturnable; + +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.function.Function; + +@Mixin(value = {VariantList.class, Multipart.class, BlockModel.class}) +public class VanillaModelMixin { + private Collection materialsCache = null; + + @Inject(method = "getMaterials", at = @At("HEAD"), cancellable = true) + private void useCachedMaterials(Function pModelGetter, Set> pMissingTextureErrors, CallbackInfoReturnable> cir) { + if(materialsCache != null) { + cir.setReturnValue(materialsCache); + } + } + + @Inject(method = "getMaterials", at = @At("RETURN")) + private void storeCachedMaterials(Function pModelGetter, Set> pMissingTextureErrors, CallbackInfoReturnable> cir) { + if(materialsCache == null) + materialsCache = Collections.unmodifiableCollection(cir.getReturnValue()); + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 95f0518f..863318ae 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -49,7 +49,9 @@ "perf.flatten_model_predicates.PropertyValueConditionMixin", "perf.blast_search_trees.MinecraftMixin", "perf.blast_search_trees.IngredientFilterInvoker", - "perf.faster_baking.ModelBakeryMixin" + "perf.faster_baking.ModelBakeryMixin", + "perf.cache_model_materials.VanillaModelMixin", + "perf.cache_model_materials.MultipartMixin" ], "injectors": { "defaultRequire": 1