From b179340a0f5c689b7ce498dd3555f941093f8c56 Mon Sep 17 00:00:00 2001 From: Eclipse-Sol Date: Thu, 19 Mar 2026 12:33:52 -0400 Subject: [PATCH] Fix mob's eyes from z-fighting (#1519) --- .../gtnewhorizons/angelica/mixins/Mixins.java | 1 + .../MixinRendererLivingEntity_EyeDepth.java | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/bugfixes/MixinRendererLivingEntity_EyeDepth.java diff --git a/src/main/java/com/gtnewhorizons/angelica/mixins/Mixins.java b/src/main/java/com/gtnewhorizons/angelica/mixins/Mixins.java index 0052f9719..ddc3a26bb 100644 --- a/src/main/java/com/gtnewhorizons/angelica/mixins/Mixins.java +++ b/src/main/java/com/gtnewhorizons/angelica/mixins/Mixins.java @@ -35,6 +35,7 @@ public enum Mixins implements IMixins { , "angelica.MixinMinecraft" , "angelica.MixinMinecraftServer" , "angelica.bugfixes.MixinRenderGlobal_DestroyBlock" + , "angelica.bugfixes.MixinRendererLivingEntity_EyeDepth" , "angelica.debug.MixinMinecraft_FPSCap" , "angelica.ffp.MixinTessellator_CoreProfile" , "angelica.glsm.MixinSplashProgressCaching" diff --git a/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/bugfixes/MixinRendererLivingEntity_EyeDepth.java b/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/bugfixes/MixinRendererLivingEntity_EyeDepth.java new file mode 100644 index 000000000..48720ba51 --- /dev/null +++ b/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/angelica/bugfixes/MixinRendererLivingEntity_EyeDepth.java @@ -0,0 +1,41 @@ +package com.gtnewhorizons.angelica.mixins.early.angelica.bugfixes; + +import com.gtnewhorizons.angelica.glsm.GLStateManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderDragon; +import net.minecraft.client.renderer.entity.RenderEnderman; +import net.minecraft.client.renderer.entity.RenderSpider; +import net.minecraft.client.renderer.entity.RendererLivingEntity; +import net.minecraft.entity.Entity; +import org.lwjgl.opengl.GL11; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Slice; + +@Mixin(RendererLivingEntity.class) +public class MixinRendererLivingEntity_EyeDepth { + + /** + * Push the eye out just a tad towards the camera. Fixes Z-Fighting on the eyes. + */ + @WrapOperation( + method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/ModelBase;render(Lnet/minecraft/entity/Entity;FFFFFF)V"), + slice = @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/RendererLivingEntity;shouldRenderPass(Lnet/minecraft/entity/EntityLivingBase;IF)I") + ) + ) + private void angelica$eyePassPolygonOffset(ModelBase instance, Entity entity, float a, float b, float c, float d, float e, float f, Operation original) { + if (!((Object) this instanceof RenderSpider) && !((Object) this instanceof RenderEnderman) && !((Object) this instanceof RenderDragon)) { + original.call(instance, entity, a, b, c, d, e, f); + return; + } + GLStateManager.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + GLStateManager.glPolygonOffset(-1.0f, -1.0f); + original.call(instance, entity, a, b, c, d, e, f); + GLStateManager.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + GLStateManager.glPolygonOffset(0.0f, 0.0f); + } +}