From eef3d2f50ae1489af7c9c48cd36a89fc563f8e83 Mon Sep 17 00:00:00 2001 From: Caedis Date: Mon, 1 Jun 2026 15:38:27 -0500 Subject: [PATCH] feat(hand): add cancellable RenderHandEvent for canRender (#1806) --- .../angelica/event/RenderHandEvent.java | 25 +++++++++++++++++++ .../coderbot/iris/pipeline/HandRenderer.java | 4 ++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gtnewhorizons/angelica/event/RenderHandEvent.java diff --git a/src/main/java/com/gtnewhorizons/angelica/event/RenderHandEvent.java b/src/main/java/com/gtnewhorizons/angelica/event/RenderHandEvent.java new file mode 100644 index 000000000..9b10c73d4 --- /dev/null +++ b/src/main/java/com/gtnewhorizons/angelica/event/RenderHandEvent.java @@ -0,0 +1,25 @@ +package com.gtnewhorizons.angelica.event; + +import net.minecraftforge.eventbus.api.bus.CancellableEventBus; +import net.minecraftforge.eventbus.api.event.RecordEvent; +import net.minecraftforge.eventbus.api.event.characteristic.Cancellable; + +/** + * Posted from {@link net.coderbot.iris.pipeline.HandRenderer}'s {@code canRender} + *

+ * Cancel the event to prevent the hand from rendering. + */ +public record RenderHandEvent() implements RecordEvent, Cancellable { + + public static final CancellableEventBus BUS = CancellableEventBus.create(RenderHandEvent.class); + + private static final RenderHandEvent INSTANCE = new RenderHandEvent(); + + /** + * @return true if a listener cancelled the event, meaning the hand should NOT render. + */ + public static boolean post() { + if (!BUS.hasListeners()) return false; + return BUS.post(INSTANCE); + } +} diff --git a/src/main/java/net/coderbot/iris/pipeline/HandRenderer.java b/src/main/java/net/coderbot/iris/pipeline/HandRenderer.java index d694bbd1e..e20469d85 100644 --- a/src/main/java/net/coderbot/iris/pipeline/HandRenderer.java +++ b/src/main/java/net/coderbot/iris/pipeline/HandRenderer.java @@ -3,6 +3,7 @@ package net.coderbot.iris.pipeline; import com.gtnewhorizons.angelica.compat.mojang.Camera; import com.gtnewhorizons.angelica.compat.mojang.GameModeUtil; import com.gtnewhorizons.angelica.compat.mojang.InteractionHand; +import com.gtnewhorizons.angelica.event.RenderHandEvent; import com.gtnewhorizons.angelica.glsm.GLStateManager; import com.gtnewhorizons.angelica.rendering.RenderingState; import com.gtnewhorizons.angelica.rendering.celeritas.BlockRenderLayer; @@ -78,7 +79,8 @@ public class HandRenderer { !camera.isSleeping() && !mc.gameSettings.hideGUI && !GameModeUtil.isSpectator() && - !mc.playerController.enableEverythingIsScrewedUpMode(); + !mc.playerController.enableEverythingIsScrewedUpMode() && + !RenderHandEvent.post(); } public boolean isHandTranslucent(InteractionHand hand) {