aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorolim88 <bobq4582@gmail.com>2025-03-08 04:56:53 +0000
committerGitHub <noreply@github.com>2025-03-07 23:56:53 -0500
commitea6944c47a4058fdbbc44cda63d5be323055b391 (patch)
treed7253dffb663b39e8b217e0b78b2a1d77bd0b511 /src/main/java/de
parentfcb762a10e06ae9bb9b23cff0d2745b849ea972a (diff)
downloadSkyblocker-ea6944c47a4058fdbbc44cda63d5be323055b391.tar.gz
Skyblocker-ea6944c47a4058fdbbc44cda63d5be323055b391.tar.bz2
Skyblocker-ea6944c47a4058fdbbc44cda63d5be323055b391.zip
Add support for Abbreviations in health values (#1199)
* Add support for Abbreviations in health values * Fix pattern for K * fix not removing from name due to case change * move try catch into health bars * Clean up parsing --------- Co-authored-by: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/HealthBars.java29
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Formatters.java6
3 files changed, 21 insertions, 16 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
index 477b7adc..84aedae3 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
@@ -77,7 +77,7 @@ public abstract class ClientPlayNetworkHandlerMixin extends ClientCommonNetworkH
EggFinder.checkIfEgg(armorStandEntity);
CorpseFinder.checkIfCorpse(armorStandEntity);
- HealthBars.heathBar(armorStandEntity);
+ HealthBars.healthBar(armorStandEntity);
try { //Prevent packet handling fails if something goes wrong so that entity trackers still update, just without compact damage numbers
CompactDamage.compactDamage(armorStandEntity);
} catch (Exception e) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/HealthBars.java b/src/main/java/de/hysky/skyblocker/skyblock/HealthBars.java
index 32f93040..a94d004c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/HealthBars.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/HealthBars.java
@@ -3,10 +3,11 @@ package de.hysky.skyblocker.skyblock;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.ColorUtils;
+import de.hysky.skyblocker.utils.Formatters;
import de.hysky.skyblocker.utils.render.RenderHelper;
import it.unimi.dsi.fastutil.objects.Object2FloatMap;
import it.unimi.dsi.fastutil.objects.Object2FloatOpenHashMap;
-import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
+import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
@@ -19,6 +20,8 @@ import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Vec3d;
import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.awt.*;
import java.util.List;
@@ -27,14 +30,14 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class HealthBars {
-
+ private static final Logger LOGGER = LoggerFactory.getLogger(HealthBars.class);
private static final Identifier HEALTH_BAR_BACKGROUND_TEXTURE = Identifier.ofVanilla("textures/gui/sprites/boss_bar/white_background.png");
private static final Identifier HEALTH_BAR_TEXTURE = Identifier.ofVanilla("textures/gui/sprites/boss_bar/white_progress.png");
- private static final Pattern HEALTH_PATTERN = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?)/(\\d{1,3}(,\\d{3})*(\\.\\d+)?)❤");
- private static final Pattern HEALTH_ONLY_PATTERN = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?)❤");
+ protected static final Pattern HEALTH_PATTERN = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?[kKmMbBtT]?)/(\\d{1,3}(,\\d{3})*(\\.\\d+)?[kKmMbBtT]?)❤");
+ protected static final Pattern HEALTH_ONLY_PATTERN = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?[kKmMbBtT]?)❤");
private static final Object2FloatOpenHashMap<ArmorStandEntity> healthValues = new Object2FloatOpenHashMap<>();
- private static final Object2IntOpenHashMap<ArmorStandEntity> mobStartingHealth = new Object2IntOpenHashMap<>();
+ private static final Object2LongOpenHashMap<ArmorStandEntity> mobStartingHealth = new Object2LongOpenHashMap<>();
@Init
public static void init() {
@@ -56,7 +59,7 @@ public class HealthBars {
public static void onEntityDespawn(Entity entity, ClientWorld clientWorld) {
if (entity instanceof ArmorStandEntity armorStandEntity) {
healthValues.removeFloat(armorStandEntity);
- mobStartingHealth.removeInt(armorStandEntity);
+ mobStartingHealth.removeLong(armorStandEntity);
}
}
@@ -65,7 +68,7 @@ public class HealthBars {
*
* @param armorStand updated armorstand
*/
- public static void heathBar(ArmorStandEntity armorStand) {
+ public static void healthBar(ArmorStandEntity armorStand) {
if (!armorStand.isInvisible() || !armorStand.hasCustomName() || !armorStand.isCustomNameVisible() || !SkyblockerConfigManager.get().uiAndVisuals.healthBars.enabled) {
return;
}
@@ -73,7 +76,7 @@ public class HealthBars {
//check if armor stand is dead and remove it from list
if (armorStand.isDead()) {
healthValues.removeFloat(armorStand);
- mobStartingHealth.removeInt(armorStand);
+ mobStartingHealth.removeLong(armorStand);
return;
}
@@ -89,9 +92,9 @@ public class HealthBars {
}
//work out health value and save to hashMap
- int firstValue = Integer.parseInt(healthMatcher.group(1).replace(",", ""));
- int secondValue = Integer.parseInt(healthMatcher.group(4).replace(",", ""));
- float health = (float) firstValue / secondValue;
+ float firstValue = Formatters.parseNumber(healthMatcher.group(1).toUpperCase()).floatValue();
+ float secondValue = Formatters.parseNumber(healthMatcher.group(4).toUpperCase()).floatValue();
+ float health = firstValue / secondValue;
healthValues.put(armorStand, health);
//edit armor stand name to remove health
@@ -162,7 +165,7 @@ public class HealthBars {
}
//get the current health of the mob
- int currentHealth = Integer.parseInt(healthOnlyMatcher.group(1).replace(",", ""));
+ long currentHealth = Formatters.parseNumber(healthOnlyMatcher.group(1).toUpperCase()).longValue();
//if it's a new health only armor stand add to starting health lookup (not always full health if already damaged but best that can be done)
if (!mobStartingHealth.containsKey(armorStand)) {
@@ -170,7 +173,7 @@ public class HealthBars {
}
//add to health bar values
- float health = (float) currentHealth / mobStartingHealth.getInt(armorStand);
+ float health = (float) currentHealth / mobStartingHealth.getLong(armorStand);
healthValues.put(armorStand, health);
//if enabled remove from name
diff --git a/src/main/java/de/hysky/skyblocker/utils/Formatters.java b/src/main/java/de/hysky/skyblocker/utils/Formatters.java
index 50409430..b51d4250 100644
--- a/src/main/java/de/hysky/skyblocker/utils/Formatters.java
+++ b/src/main/java/de/hysky/skyblocker/utils/Formatters.java
@@ -63,11 +63,13 @@ public class Formatters {
public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("E MMM d yyyy " + getTimeFormat(), Locale.US).withZone(ZoneId.systemDefault());
/**
- * Parses a number from a string, allowing commas as thousands separators and periods as decimal points.
+ * Parses a number from a string.
+ * <p>
+ * Allows commas as thousands separators, periods as decimal points, and abbreviations.
*/
public static Number parseNumber(String number) throws NumberFormatException {
try {
- return DOUBLE_NUMBERS.parse(number);
+ return SHORT_INTEGER_NUMBERS.parse(number.replace(",", ""));
} catch (ParseException e) {
throw new NumberFormatException("For input string: \"" + number + "\"");
}