/* * This file is part of the Combatant Client distribution. * Copyright (c) 2026 pivosos2007. * * Licensed under the GNU General Public License v3.0. */ package dev.loki.lovisual.mixins; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ScreenEffectRenderer; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; import dev.loki.lovisual.features.module.Modules; import dev.loki.lovisual.features.module.modules.visuals.NoRender; import dev.loki.lovisual.mixins.accessors.InGameOverlayRendererAccessor; @Mixin(ScreenEffectRenderer.class) public abstract class ScreenEffectRendererMixin { @Redirect( method = "submit", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/renderer/ScreenEffectRenderer;submitFire(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;)V" ) ) private static void combatant$maybeRenderFireOverlay( PoseStack matrices, SubmitNodeCollector vertexConsumers, TextureAtlasSprite sprite ) { Minecraft client = Minecraft.getInstance(); Player player = client.player; if (player == null) return; NoRender noRender = Modules.get(NoRender.class); if (noRender != null && noRender.off("fire_overlay")) { if (!noRender.fireOnlyWhenResistant()) { return; } if (player.hasEffect(MobEffects.FIRE_RESISTANCE)) { return; } } if (player.hasEffect(MobEffects.FIRE_RESISTANCE)) { return; } InGameOverlayRendererAccessor.callRenderFireOverlay(matrices, vertexConsumers, sprite); } @Redirect( method = "submit", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/renderer/ScreenEffectRenderer;submitBlockSprite(Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;I)V" ) ) private static void combatant$maybeRenderBlockOverlay( TextureAtlasSprite sprite, PoseStack matrices, SubmitNodeCollector vertexConsumers, int color ) { NoRender noRender = Modules.get(NoRender.class); if (noRender != null && noRender.off("block_overlay")) { return; } InGameOverlayRendererAccessor.callRenderInWallOverlay(sprite, matrices, vertexConsumers, color); } }