diff options
| author | olim88 <bobq4582@gmail.com> | 2025-03-08 04:56:53 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-07 23:56:53 -0500 |
| commit | ea6944c47a4058fdbbc44cda63d5be323055b391 (patch) | |
| tree | d7253dffb663b39e8b217e0b78b2a1d77bd0b511 /src/main/java/de | |
| parent | fcb762a10e06ae9bb9b23cff0d2745b849ea972a (diff) | |
| download | Skyblocker-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')
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 + "\""); } |
