diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-02-18 02:15:26 -0500 |
---|---|---|
committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-04-26 16:23:20 -0400 |
commit | 4f4d3f480d75293a2f19f799423a282a4f03b421 (patch) | |
tree | b3206e5e52dec1a3707a48a01c309a0305f51e36 /src/main/java/de/hysky/skyblocker/events | |
parent | 3c967b384500d117c23fa5d1cb23bc415a5d6324 (diff) | |
download | Skyblocker-4f4d3f480d75293a2f19f799423a282a4f03b421.tar.gz Skyblocker-4f4d3f480d75293a2f19f799423a282a4f03b421.tar.bz2 Skyblocker-4f4d3f480d75293a2f19f799423a282a4f03b421.zip |
Hud Render Events
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/events')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java b/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java new file mode 100644 index 00000000..13e70498 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java @@ -0,0 +1,50 @@ +package de.hysky.skyblocker.events; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.client.gui.DrawContext; + +/** + * HUD render events that allow for proper layering between different HUD elements. + * This should always be preferred over Fabric's {@link net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback}. + * + * Perhaps in the future this system could be PR'd to Fabric. + */ +public class HudRenderEvents { + /** + * Called after the hotbar, status bars, and experience bar have been rendered. + */ + public static final Event<HudRenderStage> AFTER_MAIN_HUD = createEventForStage(); + + /** + * Called before the {@link net.minecraft.client.gui.hud.ChatHud} is rendered. + */ + public static final Event<HudRenderStage> BEFORE_CHAT = createEventForStage(); + + /** + * Called after the entire HUD is rendered. + */ + public static final Event<HudRenderStage> LAST = createEventForStage(); + + private static Event<HudRenderStage> createEventForStage() { + return EventFactory.createArrayBacked(HudRenderStage.class, listeners -> (context, tickDelta) -> { + for (HudRenderStage listener : listeners) { + listener.onRender(context, tickDelta); + } + }); + } + + /** + * @implNote Similar to Fabric's {@link net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback} + */ + @FunctionalInterface + public interface HudRenderStage { + /** + * Called sometime during a specific HUD render stage. + * + * @param drawContext The {@link DrawContext} instance + * @param tickDelta Progress for linearly interpolating between the previous and current game state + */ + void onRender(DrawContext context, float tickDelta); + } +} |