From d5715454feb746850c242421bfd3be1bc06cf0ca Mon Sep 17 00:00:00 2001 From: Trương Hoàng Long Date: Sun, 9 Oct 2022 19:43:43 +0200 Subject: Status Bar code cleanup - Fix hp bar sometimes showing absorption incorrectly. - Fix xp bar not filling all the way (fix #85) --- .../skyblocker/skyblock/FancyStatusBars.java | 2 +- .../skyblocker/skyblock/StatusBarTracker.java | 31 +++++----------------- 2 files changed, 8 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 70385e01..dfaeebd0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -56,7 +56,7 @@ public class FancyStatusBars extends DrawableHelper { int def = statusBarTracker.getDefense(); bars[2].fill[0] = fill(def, def + 100); bars[2].text = def; - bars[3].fill[0] = (int) (32 * player.experienceProgress); + bars[3].fill[0] = (int) (100 * player.experienceProgress); bars[3].text = player.experienceLevel; // Update positions of bars from config diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java index 134ec1f9..96165ce8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java @@ -42,25 +42,13 @@ public class StatusBarTracker { private void updateHealth(Matcher m) { int value = parseInt(m, 1); int max = parseInt(m, 3); - int overflow = 0; - ClientPlayerEntity player = null; - try { - player = MinecraftClient.getInstance().player; + int overflow = Math.max(0, value - max); + if (MinecraftClient.getInstance() != null && MinecraftClient.getInstance().player != null) { + ClientPlayerEntity player = MinecraftClient.getInstance().player; + value = (int) (player.getHealth() * max / player.getMaxHealth()); + overflow = (int) (player.getAbsorptionAmount() * max / player.getMaxHealth()); } - // Is triggered by tests. Couldn't come up with a better solution. - catch (NullPointerException ignored) { - } - if (player != null) { - int hp = (int) (player.getHealth() * max / player.getMaxHealth()); - overflow = value - hp; - value = hp; - } else if (value > max) { - overflow = value - max; - value = max; - } - if (overflow > max) - overflow = max; - this.health = new Resource(value, max, overflow); + this.health = new Resource(Math.min(value, max), max, Math.min(overflow, max)); } private String reset(String str, Matcher m) { @@ -101,10 +89,5 @@ public class StatusBarTracker { return res.isEmpty() ? null : res; } - public record Resource( - int value, - int max, - int overflow - ) { - } + public record Resource(int value, int max, int overflow) {} } -- cgit