Skip to content

Commit 4c01abf

Browse files
viciscatAlex33856
authored andcommitted
use HudElementRegistry instead of mixins
Cherry-picked from: 7b26e87
1 parent aea8f35 commit 4c01abf

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;
24+
import org.jetbrains.annotations.Nullable;
2025
import org.jetbrains.annotations.VisibleForTesting;
26+
import org.joml.Matrix3x2fStack;
2127
import org.lwjgl.glfw.GLFW;
2228
import org.slf4j.Logger;
2329
import org.slf4j.LoggerFactory;
@@ -30,8 +36,10 @@
3036
import java.nio.file.Path;
3137
import java.util.*;
3238
import java.util.concurrent.CompletableFuture;
39+
import java.util.function.Function;
3340

3441
public class FancyStatusBars {
42+
private static final Identifier HUD_LAYER = SkyblockerMod.id("fancy_status_bars");
3543
private static final Path FILE = SkyblockerMod.CONFIG_DIR.resolve("status_bars.json");
3644
private static final Logger LOGGER = LoggerFactory.getLogger(FancyStatusBars.class);
3745

@@ -54,6 +62,47 @@ public static boolean isBarEnabled(StatusBarType type) {
5462
@SuppressWarnings("deprecation")
5563
@Init
5664
public static void init() {
65+
Function<HudElement, HudElement> hideIfFancyStatusBarsEnabled = hudElement -> {
66+
if (Utils.isOnSkyblock() && isEnabled())
67+
return (context, tickCounter) -> {};
68+
return hudElement;
69+
};
70+
71+
HudElementRegistry.replaceElement(VanillaHudElements.HEALTH_BAR, hudElement -> {
72+
if (!Utils.isOnSkyblock() || !isEnabled()) return hudElement;
73+
if (isHealthFancyBarEnabled()) {
74+
return (context, tickCounter) -> {};
75+
} else if (isExperienceFancyBarEnabled()) {
76+
return (context, tickCounter) -> {
77+
Matrix3x2fStack matrices = context.getMatrices();
78+
matrices.pushMatrix();
79+
matrices.translate(0, 6);
80+
hudElement.render(context, tickCounter);
81+
matrices.popMatrix();
82+
};
83+
}
84+
return hudElement;
85+
});
86+
HudElementRegistry.replaceElement(VanillaHudElements.EXPERIENCE_LEVEL, hudElement -> {
87+
if (!Utils.isOnSkyblock() || !isEnabled() || !isExperienceFancyBarEnabled()) return hudElement;
88+
return (context, tickCounter) -> {};
89+
});
90+
HudElementRegistry.replaceElement(VanillaHudElements.INFO_BAR, hudElement -> {
91+
if (!Utils.isOnSkyblock() || !isEnabled() || !isExperienceFancyBarEnabled()) return hudElement;
92+
return (context, tickCounter) -> {};
93+
});
94+
HudElementRegistry.replaceElement(VanillaHudElements.ARMOR_BAR, hideIfFancyStatusBarsEnabled);
95+
HudElementRegistry.replaceElement(VanillaHudElements.MOUNT_HEALTH, hideIfFancyStatusBarsEnabled);
96+
HudElementRegistry.replaceElement(VanillaHudElements.FOOD_BAR, hideIfFancyStatusBarsEnabled);
97+
HudElementRegistry.replaceElement(VanillaHudElements.AIR_BAR, hudElement -> {
98+
if (!Utils.isOnSkyblock() || !isEnabled() || !isBarEnabled(StatusBarType.AIR)) return hudElement;
99+
return (context, tickCounter) -> {};
100+
});
101+
102+
HudElementRegistry.attachElementAfter(VanillaHudElements.HOTBAR, HUD_LAYER, (context, tickCounter) -> {
103+
if (Utils.isOnSkyblock()) render(context, MinecraftClient.getInstance());
104+
});
105+
57106
statusBars.put(StatusBarType.HEALTH, StatusBarType.HEALTH.newStatusBar());
58107
statusBars.put(StatusBarType.INTELLIGENCE, StatusBarType.INTELLIGENCE.newStatusBar());
59108
statusBars.put(StatusBarType.DEFENSE, StatusBarType.DEFENSE.newStatusBar());
@@ -152,7 +201,7 @@ public static void placeBarsInPositioner() {
152201
}
153202
}
154203

155-
public static JsonObject loadBarConfig() {
204+
public static @Nullable JsonObject loadBarConfig() {
156205
try (BufferedReader reader = Files.newBufferedReader(FILE)) {
157206
return SkyblockerMod.GSON.fromJson(reader, JsonObject.class);
158207
} 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
@@ -2,7 +2,12 @@
22

33
import de.hysky.skyblocker.annotations.Init;
44
import de.hysky.skyblocker.config.SkyblockerConfigManager;
5+
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
6+
import de.hysky.skyblocker.utils.Utils;
57
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
8+
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry;
9+
import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements;
10+
import net.minecraft.client.MinecraftClient;
611
import net.minecraft.client.option.KeyBinding;
712
import net.minecraft.client.util.InputUtil;
813
import org.lwjgl.glfw.GLFW;
@@ -23,6 +28,11 @@ public static void init() {
2328
InputUtil.Type.KEYSYM,
2429
GLFW.GLFW_KEY_M,
2530
"key.categories.skyblocker"));
31+
32+
HudElementRegistry.replaceElement(VanillaHudElements.PLAYER_LIST, hudElement -> {
33+
if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.shouldRenderVanilla() || MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen) return hudElement;
34+
return (context, tickCounter) -> {};
35+
});
2636
}
2737

2838
public static boolean shouldRenderVanilla() {

0 commit comments

Comments
 (0)