Merge 1.20 into 1.20.4

This commit is contained in:
embeddedt 2023-12-23 15:55:42 -05:00
commit d03571cb05
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 21 additions and 3 deletions

View File

@ -4,6 +4,7 @@ import com.mojang.blaze3d.vertex.BufferBuilder;
import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.render.UnsafeBufferHelper; import org.embeddedt.modernfix.render.UnsafeBufferHelper;
import org.spongepowered.asm.mixin.Dynamic;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -12,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@Mixin(BufferBuilder.class) @Mixin(value = BufferBuilder.class, priority = 1500)
@ClientOnlyMixin @ClientOnlyMixin
public class BufferBuilderMixin { public class BufferBuilderMixin {
@Shadow private ByteBuffer buffer; @Shadow private ByteBuffer buffer;
@ -20,6 +21,14 @@ public class BufferBuilderMixin {
private static boolean leakReported = false; 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. * Ensure UnsafeBufferHelper is classloaded early, to avoid Forge's event transformer showing an error in the log.
*/ */
@ -33,7 +42,11 @@ public class BufferBuilderMixin {
try { try {
ByteBuffer buf = buffer; ByteBuffer buf = buffer;
// can be null if a mod already tried to free the buffer // can be null if a mod already tried to free the buffer
<<<<<<< HEAD
if(!this.closed && buf != null) { if(!this.closed && buf != null) {
=======
if(buf != null && mfix$shouldFree) {
>>>>>>> propagations/1.20
if(!leakReported) { if(!leakReported) {
leakReported = true; leakReported = true;
ModernFix.LOGGER.warn("One or more BufferBuilders have been leaked, ModernFix will attempt to correct this."); ModernFix.LOGGER.warn("One or more BufferBuilders have been leaked, ModernFix will attempt to correct this.");

View File

@ -1,7 +1,11 @@
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources; 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.renderer.block.model.ItemOverrides;
import net.minecraft.client.resources.model.BakedModel; 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.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -11,11 +15,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ItemOverrides.class) @Mixin(ItemOverrides.class)
public class ItemOverridesMixin { public class ItemOverridesMixin {
@Inject(method = "resolve", at = @At("RETURN"), cancellable = true) @Inject(method = "resolve", at = @At("RETURN"), cancellable = true)
private void getRealModel(CallbackInfoReturnable<BakedModel> cir) { private void getRealModel(BakedModel bakedModel, ItemStack stack, ClientLevel level, LivingEntity entity, int seed, CallbackInfoReturnable<BakedModel> cir) {
BakedModel original = cir.getReturnValue(); BakedModel original = cir.getReturnValue();
if(original instanceof ItemOverrideBakedModel) { if(original instanceof ItemOverrideBakedModel) {
ItemOverrideBakedModel override = (ItemOverrideBakedModel)original; ItemOverrideBakedModel override = (ItemOverrideBakedModel)original;
cir.setReturnValue(override.getRealModel()); BakedModel overrideModel = override.getRealModel();
cir.setReturnValue(overrideModel != null ? overrideModel : bakedModel);
} }
} }
} }