diff options
| author | Peyton Brown <81496880+PeytonBrown@users.noreply.github.com> | 2025-06-22 00:42:48 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-22 00:42:48 -0400 |
| commit | 3e0f1ea98e1f6b9027afb9536b8c62fe79c5f3b7 (patch) | |
| tree | 1983e4a3f9580fb0f9e9b2e69bb492fff7974cac /src/main/java/de/hysky | |
| parent | 63868aae78f78289e6c2bcf300f3d1aadf0b7a73 (diff) | |
| download | Skyblocker-3e0f1ea98e1f6b9027afb9536b8c62fe79c5f3b7.tar.gz Skyblocker-3e0f1ea98e1f6b9027afb9536b8c62fe79c5f3b7.tar.bz2 Skyblocker-3e0f1ea98e1f6b9027afb9536b8c62fe79c5f3b7.zip | |
Adds an oxygen bar (#1367)
* Initial Implementation
* Max value of air is 300
* Clamped values and only render when submerged
Diffstat (limited to 'src/main/java/de/hysky')
3 files changed, 23 insertions, 2 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java index 33331f9d..e9f288ab 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java @@ -12,6 +12,7 @@ import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.math.MathHelper; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -26,6 +27,7 @@ public class StatusBarTracker { private static Resource health = new Resource(100, 100, 0); private static Resource mana = new Resource(100, 100, 0); private static Resource speed = new Resource(100, 400, 0); + private static Resource air = new Resource(100, 300, 0); private static int defense = 0; @Init @@ -51,10 +53,15 @@ public class StatusBarTracker { return speed; } + public static Resource getAir() { + return air; + } + private static void tick() { if (client == null || client.player == null) return; updateHealth(health.value, health.max, health.overflow); updateSpeed(); + updateAir(); } private static boolean allowOverlayMessage(Text text, boolean overlay) { @@ -155,5 +162,12 @@ public class StatusBarTracker { speed = new Resource(value, max, 0); } + private static void updateAir() { + assert client.player != null; + int max = client.player.getMaxAir(); + int value = MathHelper.clamp(client.player.getAir(), 0, max); + air = new Resource(value, max, 0); + } + public record Resource(int value, int max, int overflow) {} } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java index 9bdc00b9..73cb26fa 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java @@ -56,6 +56,7 @@ public class FancyStatusBars { statusBars.put(StatusBarType.DEFENSE, StatusBarType.DEFENSE.newStatusBar()); statusBars.put(StatusBarType.EXPERIENCE, StatusBarType.EXPERIENCE.newStatusBar()); statusBars.put(StatusBarType.SPEED, StatusBarType.SPEED.newStatusBar()); + statusBars.put(StatusBarType.AIR, StatusBarType.AIR.newStatusBar()); // Fetch from old status bar config int[] counts = new int[3]; // counts for RIGHT, LAYER1, LAYER2 @@ -65,6 +66,7 @@ public class FancyStatusBars { initBarPosition(statusBars.get(StatusBarType.DEFENSE), counts, barPositions.defenceBarPosition); initBarPosition(statusBars.get(StatusBarType.EXPERIENCE), counts, barPositions.experienceBarPosition); initBarPosition(statusBars.get(StatusBarType.SPEED), counts, UIAndVisualsConfig.LegacyBarPosition.RIGHT); + initBarPosition(statusBars.get(StatusBarType.AIR), counts, UIAndVisualsConfig.LegacyBarPosition.RIGHT); CompletableFuture.supplyAsync(FancyStatusBars::loadBarConfig).thenAccept(object -> { if (object != null) { @@ -294,7 +296,9 @@ public class FancyStatusBars { Collection<StatusBar> barCollection = statusBars.values(); for (StatusBar statusBar : barCollection) { - if (statusBar.anchor != null) statusBar.render(context, -1, -1, client.getRenderTickCounter().getDynamicDeltaTicks()); + if (statusBar.anchor == null) continue; + if (statusBar == statusBars.get(StatusBarType.AIR) && !player.isSubmergedInWater()) continue; + statusBar.render(context, -1, -1, client.getRenderTickCounter().getDynamicDeltaTicks()); } StatusBarTracker.Resource health = StatusBarTracker.getHealth(); @@ -309,6 +313,8 @@ public class FancyStatusBars { StatusBarTracker.Resource speed = StatusBarTracker.getSpeed(); statusBars.get(StatusBarType.SPEED).updateValues(speed.value() / (float) speed.max(), 0, speed.value()); statusBars.get(StatusBarType.EXPERIENCE).updateValues(player.experienceProgress, 0, player.experienceLevel); + StatusBarTracker.Resource air = StatusBarTracker.getAir(); + statusBars.get(StatusBarType.AIR).updateValues(air.value() / (float) air.max(), 0, air.value()); return true; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarType.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarType.java index 0d5c1500..451412c2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarType.java @@ -13,7 +13,8 @@ public enum StatusBarType implements StringIdentifiable { INTELLIGENCE("intelligence", BarPositioner.BarAnchor.HOTBAR_TOP, 0, new Color[]{new Color(0, 255, 255), new Color(180, 0, 255)}, true, new Color(85, 255, 255), Text.translatable("skyblocker.bars.config.intelligence")), DEFENSE("defense", BarPositioner.BarAnchor.HOTBAR_RIGHT, 0, new Color[]{new Color(255, 255, 255)}, false, new Color(185, 185, 185), Text.translatable("skyblocker.bars.config.defense")), EXPERIENCE("experience", BarPositioner.BarAnchor.HOTBAR_TOP, 1, new Color[]{new Color(100, 230, 70)}, false, new Color(128, 255, 32), Text.translatable("skyblocker.bars.config.experience")), - SPEED("speed", BarPositioner.BarAnchor.HOTBAR_RIGHT, 0, new Color[]{new Color(255, 255, 255)}, false, new Color(185, 185, 185), Text.translatable("skyblocker.bars.config.speed")); + SPEED("speed", BarPositioner.BarAnchor.HOTBAR_RIGHT, 0, new Color[]{new Color(255, 255, 255)}, false, new Color(185, 185, 185), Text.translatable("skyblocker.bars.config.speed")), + AIR("air", BarPositioner.BarAnchor.HOTBAR_RIGHT, 1, new Color[]{new Color(135, 206, 250)}, false, new Color(150, 230, 255), Text.translatable("skyblocker.bars.config.air")); private final String id; private final BarPositioner.BarAnchor defaultAnchor; |
