Merge 1.20.4 into 1.20.5
This commit is contained in:
commit
7646bfa153
|
|
@ -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,7 +13,7 @@ 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;
|
||||
|
|
@ -20,6 +21,14 @@ public class BufferBuilderMixin {
|
|||
|
||||
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.
|
||||
*/
|
||||
|
|
@ -33,7 +42,7 @@ public class BufferBuilderMixin {
|
|||
try {
|
||||
ByteBuffer buf = buffer;
|
||||
// can be null if a mod already tried to free the buffer
|
||||
if(!this.closed && buf != null) {
|
||||
if(!this.closed && buf != null && mfix$shouldFree) {
|
||||
if(!leakReported) {
|
||||
leakReported = true;
|
||||
ModernFix.LOGGER.warn("One or more BufferBuilders have been leaked, ModernFix will attempt to correct this.");
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources;
|
||||
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
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 +14,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<BakedModel> cir) {
|
||||
private void getRealModel(BakedModel bakedModel, ItemStack stack, ClientLevel level, LivingEntity entity, int seed, CallbackInfoReturnable<BakedModel> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user