LoVisual/combatant-client-26.2/src/main/java/dev/loki/lovisual/mixins/ScreenEffectRendererMixin.java
2026-07-30 11:12:56 +02:00

85 lines
3 KiB
Java

/*
* 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);
}
}