aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorPeyton Brown <81496880+PeytonBrown@users.noreply.github.com>2025-06-22 00:42:48 -0400
committerGitHub <noreply@github.com>2025-06-22 00:42:48 -0400
commit3e0f1ea98e1f6b9027afb9536b8c62fe79c5f3b7 (patch)
tree1983e4a3f9580fb0f9e9b2e69bb492fff7974cac /src/main/java/de/hysky
parent63868aae78f78289e6c2bcf300f3d1aadf0b7a73 (diff)
downloadSkyblocker-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')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarType.java3
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;