use mixin to change the f3 text background instead of canceling the event (#1537)

This commit is contained in:
Alexdoru authored and GitHub committed 2026-03-19 09:32:56 -07:00
1 parent a3f0efd629
commit 465e36148c
3 files changed
+42 -31

No files matched your search

@@ -41,6 +41,7 @@ public enum Mixins implements IMixins {
, "angelica.gui.MixinGuiOptions"
, "angelica.optimizations.MixinRendererLivingEntity"
, "angelica.rendering.MixinRenderGlobal_SelectionBox"
, "angelica.gui.MixinGuiIngameForge_ModernF3"
)
),
@@ -46,12 +46,9 @@ import net.coderbot.iris.Iris;
import net.coderbot.iris.client.IrisDebugScreenHandler;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiVideoSettings;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.client.settings.KeyBinding;
@@ -204,7 +201,7 @@ public class ClientProxy extends CommonProxy {
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onRenderOverlay(RenderGameOverlayEvent.Pre event) {
if (event.isCanceled() || !mc.gameSettings.showDebugInfo) return;
if (!mc.gameSettings.showDebugInfo) return;
if (AngelicaConfig.modernizeF3Screen && event.type == RenderGameOverlayEvent.ElementType.CROSSHAIRS) {
F3Direction.renderWorldDirectionsEvent(mc, event);
event.setCanceled(true);
@@ -214,7 +211,7 @@ public class ClientProxy extends CommonProxy {
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onRenderOverlay(RenderGameOverlayEvent.Text event) {
Minecraft mc = Minecraft.getMinecraft();
if (event.isCanceled() || !mc.gameSettings.showDebugInfo || event.left.isEmpty()) return;
if (!mc.gameSettings.showDebugInfo || event.left.isEmpty()) return;
NetHandlerPlayClient cl = mc.getNetHandler();
if (cl != null) {
@@ -281,32 +278,6 @@ public class ClientProxy extends CommonProxy {
chunk.getBlockLightValue(bX & 15, MathHelper.clamp_int(bY, 0, 255), bZ & 15, 0)));
}
}
event.setCanceled(true);
// TODO don't cancel the event and render here,
// instead mixin into the vanilla code and add a background to it
/* render ourselves for modern background */
FontRenderer fontrenderer = mc.fontRenderer;
int fontColor = 0xe0e0e0;
int rectColor = 0x90505050;
for (int x = 0; x < event.left.size(); x++) {
String msg = event.left.get(x);
if (msg == null) continue;
int strX = 2;
int strY = 2 + x * fontrenderer.FONT_HEIGHT;
Gui.drawRect(1, strY - 1, strX + fontrenderer.getStringWidth(msg) + 1, strY + fontrenderer.FONT_HEIGHT - 1, rectColor);
fontrenderer.drawString(msg, strX, strY, fontColor);
}
int width = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight).getScaledWidth();
for (int x = 0; x < event.right.size(); x++) {
String msg = event.right.get(x);
if (msg == null) continue;
int w = fontrenderer.getStringWidth(msg);
int strX = width - w - 2;
int strY = 2 + x * fontrenderer.FONT_HEIGHT;
Gui.drawRect(strX - 1, strY - 1, strX + w + 1, strY + fontrenderer.FONT_HEIGHT - 1, rectColor);
fontrenderer.drawString(msg, strX, strY, fontColor);
}
// Draw a frametime graph
if (((IGameSettingsExt)mc.gameSettings).angelica$showFpsGraph()) {
frametimeGraph.render();
@@ -0,0 +1,39 @@
package com.gtnewhorizons.angelica.mixins.early.angelica.gui;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraftforge.client.GuiIngameForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(GuiIngameForge.class)
public class MixinGuiIngameForge_ModernF3 {
@Redirect(
method = "renderHUDText",
remap = false,
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/gui/FontRenderer;drawStringWithShadow(Ljava/lang/String;III)I",
ordinal = 0,
remap = true))
private int renderBackgroundLeft(FontRenderer fontRenderer, String text, int x, int y, int color) {
Gui.drawRect(x - 1, y - 1, x + fontRenderer.getStringWidth(text) + 1, y + fontRenderer.FONT_HEIGHT, 0x90505050);
return fontRenderer.drawString(text, x, y, 0xe0e0e0);
}
@Redirect(
method = "renderHUDText",
remap = false,
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/gui/FontRenderer;drawStringWithShadow(Ljava/lang/String;III)I",
ordinal = 1,
remap = true))
private int renderBackgroundRight(FontRenderer fontRenderer, String text, int x, int y, int color) {
x += 8;
Gui.drawRect(x - 1, y - 1, x + fontRenderer.getStringWidth(text) + 1, y + fontRenderer.FONT_HEIGHT, 0x90505050);
return fontRenderer.drawString(text, x, y, 0xe0e0e0);
}
}