Skip to content

Commit d0a1fb0

Browse files
committed
An attempt was made
1 parent ed3a54a commit d0a1fb0

10 files changed

Lines changed: 64 additions & 130 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ org.gradle.configuration-cache=false
1212
loom_version=1.15-SNAPSHOT
1313

1414
# Mod Properties
15-
mod_version = 5.2.1
15+
mod_version = 5.3.0
1616
maven_group = io.github.madis0
1717
archives_base_name = onebar
1818

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.github.madis0;
2+
3+
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry;
4+
import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements;
5+
import net.minecraft.resources.Identifier;
6+
import net.minecraft.client.Minecraft;
7+
import java.util.Objects;
8+
9+
public class BarVisibility {
10+
public BarVisibility(){
11+
render();
12+
13+
if(!MixinConfigQuery.isOneBarEnabled()) return;
14+
15+
if(!MixinConfigQuery.isCompatModeEnabled()){
16+
HudElementRegistry.removeElement(VanillaHudElements.HEALTH_BAR);
17+
HudElementRegistry.removeElement(VanillaHudElements.FOOD_BAR);
18+
HudElementRegistry.removeElement(VanillaHudElements.ARMOR_BAR);
19+
HudElementRegistry.removeElement(VanillaHudElements.MOUNT_HEALTH);
20+
HudElementRegistry.removeElement(VanillaHudElements.AIR_BAR);
21+
if(!MixinConfigQuery.isLocatorBarEnabled()){
22+
HudElementRegistry.removeElement(VanillaHudElements.INFO_BAR);
23+
HudElementRegistry.removeElement(VanillaHudElements.EXPERIENCE_LEVEL);
24+
}
25+
}
26+
}
27+
28+
public void render() {
29+
var showOneBar = MixinConfigQuery.isOneBarEnabled(); // This var exists because it also shows whether oneBarElements is initialized
30+
var minecraft = Minecraft.getInstance();
31+
32+
if (minecraft.options == null)
33+
return;
34+
boolean barsVisible = !minecraft.options.hideGui && Objects.requireNonNull(minecraft.gameMode).canHurtPlayer();
35+
36+
if(showOneBar && barsVisible)
37+
HudElementRegistry.attachElementBefore(VanillaHudElements.HOTBAR, Identifier.fromNamespaceAndPath("onebar", "main"), OneBarElements::render);
38+
39+
if(showOneBar && MixinConfigQuery.showMountJump() && !minecraft.options.hideGui)
40+
HudElementRegistry.attachElementBefore(VanillaHudElements.HOTBAR, Identifier.fromNamespaceAndPath("onebar", "main"), OneBarElements::renderEntityBar);
41+
42+
PlayerProperties.setLocatorBarAvailable(minecraft.player.connection.getWaypointManager().hasWaypoints());
43+
}
44+
}

src/main/java/io/github/madis0/OneBar.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public void onInitializeClient() {
2222
// Proceed with mild caution.
2323
AutoConfig.register(ModConfig.class, GsonConfigSerializer::new);
2424

25+
// --- HUD ---
26+
27+
new BarVisibility();
28+
2529
// --- Keybindings ---
2630

2731
ModConfig config = AutoConfig.getConfigHolder(ModConfig.class).getConfig();

src/main/java/io/github/madis0/OneBarElements.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.madis0;
22

33
import me.shedaniel.autoconfig.AutoConfig;
4+
import net.minecraft.client.DeltaTracker;
45
import net.minecraft.client.Minecraft;
56
import net.minecraft.client.gui.Font;
67
import net.minecraft.client.gui.GuiGraphicsExtractor;
@@ -23,13 +24,14 @@
2324
import java.util.Objects;
2425

2526
public class OneBarElements {
27+
private static final OneBarElements INSTANCE = new OneBarElements();
2628
private final ModConfig config = AutoConfig.getConfigHolder(ModConfig.class).getConfig();
2729
private final ClientProperties clientProperties = new ClientProperties();
2830
private final PlayerProperties playerProperties = new PlayerProperties();
2931
private final Minecraft client = Minecraft.getInstance();
3032
private final Difficulty difficulty = Objects.requireNonNull(client.getCameraEntity()).level().getDifficulty();
31-
private final GuiGraphicsExtractor drawContext;
3233
private final Font textRenderer = client.font;
34+
private GuiGraphicsExtractor drawContext;
3335

3436
boolean hasHunger = playerProperties.hasHunger && !config.disableHunger;
3537
float armorBarGap = 0.1F;
@@ -39,11 +41,17 @@ public class OneBarElements {
3941
float armorBarTotalLength = armorBarBootsLength + playerProperties.bootsMaxArmor;
4042
float elytraDurability = playerProperties.getArmorElementDurability(Objects.requireNonNull(client.player), EquipmentSlot.CHEST, 8); //8 aka same full width as Diamond/Netherite
4143

42-
public OneBarElements(GuiGraphicsExtractor context){
43-
drawContext = context;
44+
public static void render(GuiGraphicsExtractor drawContext, DeltaTracker deltaTracker) {
45+
INSTANCE.drawContext = drawContext;
46+
INSTANCE.renderOneBar();
4447
}
4548

46-
public void renderOneBar(){
49+
public static void renderEntityBar(GuiGraphicsExtractor drawContext, DeltaTracker deltaTracker) {
50+
INSTANCE.drawContext = drawContext;
51+
INSTANCE.mountJumpBar();
52+
}
53+
54+
private void renderOneBar(){
4755
Player playerEntity = Minecraft.getInstance().player;
4856
if (playerEntity != null) {
4957
barBackground();

src/main/java/io/github/madis0/mixin/BarMixin.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/main/java/io/github/madis0/mixin/ExperienceBarMixin.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/main/java/io/github/madis0/mixin/InGameHudMixin.java

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,16 @@
77
import org.spongepowered.asm.mixin.injection.At;
88
import org.spongepowered.asm.mixin.injection.Inject;
99
import org.spongepowered.asm.mixin.injection.ModifyVariable;
10-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1110
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
12-
import java.util.Objects;
13-
import net.minecraft.client.DeltaTracker;
14-
import net.minecraft.client.Minecraft;
1511
import net.minecraft.client.gui.Gui;
1612
import net.minecraft.client.gui.Gui.ContextualInfo;
17-
import net.minecraft.client.gui.GuiGraphicsExtractor;
1813
import net.minecraft.world.entity.LivingEntity;
1914

2015
@Mixin(value = Gui.class)
2116
public abstract class InGameHudMixin {
22-
@Final @Shadow private Minecraft minecraft;
2317
@Shadow protected abstract LivingEntity getPlayerVehicleWithHealth();
2418

25-
private OneBarElements oneBarElements;
26-
private boolean showOneBar = false;
27-
28-
@Inject(at = @At("HEAD"), method = "render")
29-
public void render(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) {
30-
oneBarElements = new OneBarElements(context);
31-
showOneBar = MixinConfigQuery.isOneBarEnabled(); // This var exists because it also shows whether oneBarElements is initialized
32-
33-
boolean barsVisible = !minecraft.options.hideGui && Objects.requireNonNull(minecraft.gameMode).canHurtPlayer();
34-
if(showOneBar && barsVisible) oneBarElements.renderOneBar();
35-
if(showOneBar && MixinConfigQuery.showMountJump() && !minecraft.options.hideGui) oneBarElements.mountJumpBar();
36-
37-
PlayerProperties.setLocatorBarAvailable(minecraft.player.connection.getWaypointManager().hasWaypoints());
38-
}
39-
40-
@Inject(method = "renderPlayerHealth", at = @At(value = "HEAD"), cancellable = true)
41-
private void hideHud(GuiGraphicsExtractor context, CallbackInfo ci){
42-
if(showOneBar && !MixinConfigQuery.isCompatModeEnabled())
43-
ci.cancel();
44-
}
45-
46-
@Inject(method = "renderVehicleHealth", at = @At(value = "HEAD"), cancellable = true)
47-
private void hideMountHealth(GuiGraphicsExtractor context, CallbackInfo ci) {
48-
if(showOneBar && !MixinConfigQuery.isCompatModeEnabled())
49-
ci.cancel();
50-
oneBarElements.mountBar(getPlayerVehicleWithHealth());
51-
}
19+
private boolean showOneBar = MixinConfigQuery.isOneBarEnabled();;
5220

5321
@Inject(method = "nextContextualInfoState", at = @At("HEAD"), cancellable = true)
5422
private void forceLocatorBar(CallbackInfoReturnable<ContextualInfo> cir) {

src/main/java/io/github/madis0/mixin/JumpBarMixin.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/main/java/io/github/madis0/mixin/LocatorBarMixin.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,4 @@ private int modifyHeightAddons(int original) {
4040

4141
return MixinConfigQuery.getLocatorBarHeight();
4242
}
43-
44-
@Inject(method = "render", at = @At(value = "HEAD"), cancellable = true)
45-
private void hideBar(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci){
46-
if(MixinConfigQuery.isOneBarEnabled() && !MixinConfigQuery.isLocatorBarEnabled())
47-
ci.cancel();
48-
}
49-
50-
@Inject(method = "render", at = @At(value = "HEAD"), cancellable = true)
51-
private void hideAddons(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci){
52-
if(MixinConfigQuery.isOneBarEnabled() && !MixinConfigQuery.isLocatorBarEnabled())
53-
ci.cancel();
54-
}
5543
}

src/main/resources/onebar.mixins.json

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
{
22
"required": true,
33
"package": "io.github.madis0.mixin",
4-
"compatibilityLevel": "JAVA_21",
4+
"compatibilityLevel": "JAVA_25",
55
"client": [
6-
"BarMixin",
7-
"BossBarHudMixin",
8-
"ClientSoulFireBlockMixin",
9-
"ExperienceBarMixin",
10-
"InGameHudMixin",
11-
"JumpBarMixin",
12-
"LocatorBarMixin"
6+
"ClientSoulFireBlockMixin"
137
],
148
"injectors": {
159
"defaultRequire": 1

0 commit comments

Comments
 (0)