diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/IModelBakerImpl.java b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/IModelBakerImpl.java new file mode 100644 index 00000000..b2cced35 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/IModelBakerImpl.java @@ -0,0 +1,5 @@ +package org.embeddedt.modernfix.forge.dynresources; + +public interface IModelBakerImpl { + void mfix$ignoreCache(); +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java index ba9ee2e9..9ca72ed5 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ModelBakerImplMixin.java @@ -9,6 +9,7 @@ import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; import org.embeddedt.modernfix.duck.IExtendedModelBakery; import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider; +import org.embeddedt.modernfix.forge.dynresources.IModelBakerImpl; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,16 +20,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.function.Function; @Mixin(ModelBakery.ModelBakerImpl.class) -public abstract class ModelBakerImplMixin { +public abstract class ModelBakerImplMixin implements IModelBakerImpl { private static final boolean debugDynamicModelLoading = Boolean.getBoolean("modernfix.debugDynamicModelLoading"); @Shadow @Final private ModelBakery field_40571; @Shadow public abstract UnbakedModel getModel(ResourceLocation arg); + private boolean mfix$ignoreCache = false; + + @Override + public void mfix$ignoreCache() { + mfix$ignoreCache = true; + } + @Inject(method = "bake(Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/client/resources/model/ModelState;Ljava/util/function/Function;)Lnet/minecraft/client/resources/model/BakedModel;", at = @At("HEAD"), cancellable = true, remap = false) public void getOrLoadBakedModelDynamic(ResourceLocation arg, ModelState arg2, Function textureGetter, CallbackInfoReturnable cir) { ModelBakery.BakedCacheKey key = new ModelBakery.BakedCacheKey(arg, arg2.getRotation(), arg2.isUvLocked()); - BakedModel existing = this.field_40571.bakedCache.get(key); + BakedModel existing = mfix$ignoreCache ? null : this.field_40571.bakedCache.get(key); if (existing != null) { cir.setReturnValue(existing); } else { diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java index de8d78ae..34e740a5 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/ctm/TextureMetadataHandlerMixin.java @@ -11,6 +11,7 @@ import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; +import org.embeddedt.modernfix.forge.dynresources.IModelBakerImpl; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -113,6 +114,8 @@ public abstract class TextureMetadataHandlerMixin implements ModernFixClientInte ModelBakery.ModelBakerImpl baker = ModelBakerImplAccessor.createImpl(bakery, ($, m) -> { return spriteGetter.apply(m); }, key); + // bypass bakedCache so that dependent models get re-baked and thus retrieve their sprites again + ((IModelBakerImpl)baker).mfix$ignoreCache(); ctmModel.bake(baker, spriteGetter, BlockModelRotation.X0_Y0, key); } }