Skip to content

Commit e4c6ee4

Browse files
viciscatAlex33856
authored andcommitted
use HudElementRegistry instead of mixins
Cherry-picked from: 7b26e87
1 parent 4573bd4 commit e4c6ee4

File tree

4 files changed

+77
-54
lines changed

4 files changed

+77
-54
lines changed

src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
77
import com.llamalad7.mixinextras.sugar.Local;
88
import de.hysky.skyblocker.config.SkyblockerConfigManager;
9-
import de.hysky.skyblocker.skyblock.fancybars.FancyStatusBars;
109
import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
1110
import de.hysky.skyblocker.skyblock.item.ItemCooldowns;
1211
import de.hysky.skyblocker.skyblock.item.ItemProtection;
@@ -24,8 +23,6 @@
2423
import net.minecraft.client.gui.DrawContext;
2524
import net.minecraft.client.gui.hud.InGameHud;
2625
import net.minecraft.client.gui.hud.PlayerListHud;
27-
import net.minecraft.client.gui.hud.bar.Bar;
28-
import net.minecraft.client.render.RenderTickCounter;
2926
import net.minecraft.component.DataComponentTypes;
3027
import net.minecraft.component.type.NbtComponent;
3128
import net.minecraft.entity.player.PlayerEntity;
@@ -128,56 +125,6 @@ private static boolean isQuiverItem(ItemStack stack) {
128125
}
129126
}
130127

131-
@WrapWithCondition(method = "renderMainHud", at = {
132-
@At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/bar/Bar;renderBar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/render/RenderTickCounter;)V"),
133-
@At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/bar/Bar;renderAddons(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/render/RenderTickCounter;)V")
134-
}, require = 2)
135-
private boolean skyblocker$renderExperienceBar(Bar bar, DrawContext context, RenderTickCounter tickCounter) {
136-
return shouldShowExperienceBar();
137-
}
138-
139-
@WrapWithCondition(method = "renderMainHud", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/bar/Bar;drawExperienceLevel(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/font/TextRenderer;I)V"))
140-
private boolean skyblocker$renderExperienceLevel(DrawContext context, TextRenderer textRenderer, int level) {
141-
return shouldShowExperienceBar();
142-
}
143-
144-
@Unique
145-
private static boolean shouldShowExperienceBar() {
146-
return !(Utils.isOnSkyblock() && FancyStatusBars.isEnabled() && FancyStatusBars.isExperienceFancyBarEnabled());
147-
}
148-
149-
@Inject(method = "renderStatusBars", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderHealthBar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/entity/player/PlayerEntity;IIIIFIIIZ)V", shift = At.Shift.AFTER), cancellable = true)
150-
private void skyblocker$renderStatusBars(DrawContext context, CallbackInfo ci) {
151-
if (Utils.isOnSkyblock() && FancyStatusBars.render(context, client)) ci.cancel();
152-
}
153-
154-
@Inject(method = "renderHealthBar", at = @At(value = "HEAD"), cancellable = true)
155-
private void skyblocker$renderHealthBar(DrawContext context, PlayerEntity player, int x, int y, int lines, int regeneratingHeartIndex, float maxHealth, int lastHealth, int health, int absorption, boolean blinking, CallbackInfo ci) {
156-
if (!Utils.isOnSkyblock()) return;
157-
if (FancyStatusBars.isEnabled() && FancyStatusBars.isHealthFancyBarEnabled()) ci.cancel();
158-
}
159-
160-
@ModifyExpressionValue(method = "renderStatusBars", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;getScaledWindowHeight()I"))
161-
private int skyblocker$moveHealthDown(int original) {
162-
return Utils.isOnSkyblock() && FancyStatusBars.isEnabled() && !FancyStatusBars.isHealthFancyBarEnabled() && FancyStatusBars.isExperienceFancyBarEnabled() ? original + 6 : original;
163-
}
164-
165-
@Inject(method = "renderArmor", at = @At("HEAD"), cancellable = true)
166-
private static void skyblocker$renderStatusBars(DrawContext context, PlayerEntity player, int i, int j, int k, int x, CallbackInfo ci) {
167-
if (Utils.isOnSkyblock() && FancyStatusBars.isEnabled()) ci.cancel();
168-
}
169-
170-
@Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true)
171-
private void skyblocker$renderMountHealth(CallbackInfo ci) {
172-
if (Utils.isOnSkyblock() && FancyStatusBars.isEnabled())
173-
ci.cancel();
174-
}
175-
176-
@Inject(method = "renderStatusEffectOverlay", at = @At("HEAD"), cancellable = true)
177-
private void skyblocker$dontRenderStatusEffects(CallbackInfo ci) {
178-
if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay) ci.cancel();
179-
}
180-
181128
@ModifyExpressionValue(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getAttackCooldownProgress(F)F"))
182129
private float skyblocker$modifyAttackIndicatorCooldown(float cooldownProgress) {
183130
if (Utils.isOnSkyblock() && client.player != null) {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package de.hysky.skyblocker.skyblock;
2+
3+
import de.hysky.skyblocker.annotations.Init;
4+
import de.hysky.skyblocker.config.SkyblockerConfigManager;
5+
import de.hysky.skyblocker.utils.Utils;
6+
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry;
7+
import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements;
8+
9+
public final class HideStatusEffectOverlay {
10+
@Init
11+
public static void init() {
12+
HudElementRegistry.replaceElement(VanillaHudElements.STATUS_EFFECTS, hudElement -> {
13+
if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay) return (context, tickCounter) -> {};
14+
return hudElement;
15+
});
16+
}
17+
}

src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@
1212
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
1313
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
1414
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
15+
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElement;
16+
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry;
17+
import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements;
1518
import net.minecraft.client.MinecraftClient;
1619
import net.minecraft.client.gui.DrawContext;
1720
import net.minecraft.client.gui.ScreenPos;
1821
import net.minecraft.client.network.ClientPlayerEntity;
22+
import net.minecraft.util.Identifier;
1923
import net.minecraft.util.math.MathHelper;
2024
import org.jetbrains.annotations.VisibleForTesting;
25+
import org.joml.Matrix3x2fStack;
26+
import org.jspecify.annotations.Nullable;
2127
import org.lwjgl.glfw.GLFW;
2228
import org.slf4j.Logger;
2329
import org.slf4j.LoggerFactory;
@@ -35,8 +41,10 @@
3541
import java.util.List;
3642
import java.util.Map;
3743
import java.util.concurrent.CompletableFuture;
44+
import java.util.function.Function;
3845

3946
public class FancyStatusBars {
47+
private static final Identifier HUD_LAYER = SkyblockerMod.id("fancy_status_bars");
4048
private static final Path FILE = SkyblockerMod.CONFIG_DIR.resolve("status_bars.json");
4149
private static final Logger LOGGER = LoggerFactory.getLogger(FancyStatusBars.class);
4250

@@ -59,6 +67,47 @@ public static boolean isBarEnabled(StatusBarType type) {
5967
@SuppressWarnings("deprecation")
6068
@Init
6169
public static void init() {
70+
Function<HudElement, HudElement> hideIfFancyStatusBarsEnabled = hudElement -> {
71+
if (Utils.isOnSkyblock() && isEnabled())
72+
return (context, tickCounter) -> {};
73+
return hudElement;
74+
};
75+
76+
HudElementRegistry.replaceElement(VanillaHudElements.HEALTH_BAR, hudElement -> {
77+
if (!Utils.isOnSkyblock() || !isEnabled()) return hudElement;
78+
if (isHealthFancyBarEnabled()) {
79+
return (context, tickCounter) -> {};
80+
} else if (isExperienceFancyBarEnabled()) {
81+
return (context, tickCounter) -> {
82+
Matrix3x2fStack matrices = context.getMatrices();
83+
matrices.pushMatrix();
84+
matrices.translate(0, 6);
85+
hudElement.render(context, tickCounter);
86+
matrices.popMatrix();
87+
};
88+
}
89+
return hudElement;
90+
});
91+
HudElementRegistry.replaceElement(VanillaHudElements.EXPERIENCE_LEVEL, hudElement -> {
92+
if (!Utils.isOnSkyblock() || !isEnabled() || !isExperienceFancyBarEnabled()) return hudElement;
93+
return (context, tickCounter) -> {};
94+
});
95+
HudElementRegistry.replaceElement(VanillaHudElements.INFO_BAR, hudElement -> {
96+
if (!Utils.isOnSkyblock() || !isEnabled() || !isExperienceFancyBarEnabled()) return hudElement;
97+
return (context, tickCounter) -> {};
98+
});
99+
HudElementRegistry.replaceElement(VanillaHudElements.ARMOR_BAR, hideIfFancyStatusBarsEnabled);
100+
HudElementRegistry.replaceElement(VanillaHudElements.MOUNT_HEALTH, hideIfFancyStatusBarsEnabled);
101+
HudElementRegistry.replaceElement(VanillaHudElements.FOOD_BAR, hideIfFancyStatusBarsEnabled);
102+
HudElementRegistry.replaceElement(VanillaHudElements.AIR_BAR, hudElement -> {
103+
if (!Utils.isOnSkyblock() || !isEnabled() || !isBarEnabled(StatusBarType.AIR)) return hudElement;
104+
return (context, tickCounter) -> {};
105+
});
106+
107+
HudElementRegistry.attachElementAfter(VanillaHudElements.HOTBAR, HUD_LAYER, (context, tickCounter) -> {
108+
if (Utils.isOnSkyblock()) render(context, MinecraftClient.getInstance());
109+
});
110+
62111
statusBars.put(StatusBarType.HEALTH, StatusBarType.HEALTH.newStatusBar());
63112
statusBars.put(StatusBarType.INTELLIGENCE, StatusBarType.INTELLIGENCE.newStatusBar());
64113
statusBars.put(StatusBarType.DEFENSE, StatusBarType.DEFENSE.newStatusBar());
@@ -158,7 +207,7 @@ public static void placeBarsInPositioner() {
158207
}
159208
}
160209

161-
public static JsonObject loadBarConfig() {
210+
public static @Nullable JsonObject loadBarConfig() {
162211
try (BufferedReader reader = Files.newBufferedReader(FILE)) {
163212
return SkyblockerMod.GSON.fromJson(reader, JsonObject.class);
164213
} catch (NoSuchFileException e) {

src/main/java/de/hysky/skyblocker/skyblock/tabhud/TabHud.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
import de.hysky.skyblocker.SkyblockerMod;
44
import de.hysky.skyblocker.annotations.Init;
55
import de.hysky.skyblocker.config.SkyblockerConfigManager;
6+
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
7+
import de.hysky.skyblocker.utils.Utils;
68
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
9+
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry;
10+
import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements;
11+
import net.minecraft.client.MinecraftClient;
712
import net.minecraft.client.option.KeyBinding;
813
import net.minecraft.client.util.InputUtil;
914
import org.lwjgl.glfw.GLFW;
@@ -24,6 +29,11 @@ public static void init() {
2429
InputUtil.Type.KEYSYM,
2530
GLFW.GLFW_KEY_M,
2631
SkyblockerMod.KEYBINDING_CATEGORY));
32+
33+
HudElementRegistry.replaceElement(VanillaHudElements.PLAYER_LIST, hudElement -> {
34+
if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.shouldRenderVanilla() || MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen) return hudElement;
35+
return (context, tickCounter) -> {};
36+
});
2737
}
2838

2939
public static boolean shouldRenderVanilla() {

0 commit comments

Comments
 (0)