diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/buffer_builder_leak/BufferBuilderMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/buffer_builder_leak/BufferBuilderMixin.java index c78e6c5a..0319d519 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/buffer_builder_leak/BufferBuilderMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/buffer_builder_leak/BufferBuilderMixin.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.vertex.BufferBuilder; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.render.UnsafeBufferHelper; +import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -12,13 +13,21 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.nio.ByteBuffer; -@Mixin(BufferBuilder.class) +@Mixin(value = BufferBuilder.class, priority = 1500) @ClientOnlyMixin public class BufferBuilderMixin { @Shadow private ByteBuffer buffer; private static boolean leakReported = false; + private boolean mfix$shouldFree = true; + + @Dynamic + @Inject(method = "flywheel$injectForRender", at = @At("RETURN"), remap = false, require = 0) + private void preventFree(CallbackInfo ci) { + mfix$shouldFree = false; + } + /** * Ensure UnsafeBufferHelper is classloaded early, to avoid Forge's event transformer showing an error in the log. */ @@ -32,7 +41,7 @@ public class BufferBuilderMixin { try { ByteBuffer buf = buffer; // can be null if a mod already tried to free the buffer - if(buf != null) { + if(buf != null && mfix$shouldFree) { if(!leakReported) { leakReported = true; ModernFix.LOGGER.warn("One or more BufferBuilders have been leaked, ModernFix will attempt to correct this."); diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ItemOverridesMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ItemOverridesMixin.java index 51915c7c..75374599 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ItemOverridesMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ItemOverridesMixin.java @@ -1,7 +1,11 @@ package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.block.model.ItemOverride; import net.minecraft.client.renderer.block.model.ItemOverrides; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -11,11 +15,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ItemOverrides.class) public class ItemOverridesMixin { @Inject(method = "resolve", at = @At("RETURN"), cancellable = true) - private void getRealModel(CallbackInfoReturnable cir) { + private void getRealModel(BakedModel bakedModel, ItemStack itemStack, ClientLevel clientLevel, LivingEntity livingEntity, CallbackInfoReturnable cir) { BakedModel original = cir.getReturnValue(); if(original instanceof ItemOverrideBakedModel) { ItemOverrideBakedModel override = (ItemOverrideBakedModel)original; - cir.setReturnValue(override.getRealModel()); + BakedModel overrideModel = override.getRealModel(); + cir.setReturnValue(overrideModel != null ? overrideModel : bakedModel); } } }