diff options
author | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-05-08 10:23:56 +0300 |
---|---|---|
committer | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-05-10 12:21:40 +0300 |
commit | 7f36f53ebb632d6c1950bf2e9f9951f94a872ee1 (patch) | |
tree | b77c44c233aaa4b0eaf723e879a47b2f211cd8a2 /src/main/java/de/hysky | |
parent | 5167aacdb51bb3c441d66a01964b52219ac54240 (diff) | |
download | Skyblocker-7f36f53ebb632d6c1950bf2e9f9951f94a872ee1.tar.gz Skyblocker-7f36f53ebb632d6c1950bf2e9f9951f94a872ee1.tar.bz2 Skyblocker-7f36f53ebb632d6c1950bf2e9f9951f94a872ee1.zip |
Refactored logic from using JSON to directly modifying Text objects
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java b/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java index 82e3d7be..161ecf2e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java @@ -7,15 +7,19 @@ import com.google.gson.JsonParser; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes; +import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.nbt.NbtHelper; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import org.apache.commons.lang3.math.NumberUtils; import java.text.DecimalFormat; +import java.util.List; +import java.util.regex.Pattern; public class CompactDamage { - private CompactDamage() { } @@ -25,41 +29,41 @@ public class CompactDamage { if (!entity.isInvisible() || !entity.hasCustomName() || !entity.isCustomNameVisible() || entity.getFireTicks() != -1 || !entity.shouldHideBasePlate()) return; //Dmg armor stands have no base plate and have a fire time of -1 (just one of these isn't enough to determine if it's a dmg armor stand) //In fact, even this much checking might not be accurate. Needs testing, or just waiting until someone reports it as an issue - JsonObject json = JsonParser.parseString(Text.Serialization.toJsonString(entity.getCustomName(), entity.getRegistryManager())).getAsJsonObject(); - JsonElement extra = json.get("extra"); - if (extra == null || !extra.isJsonArray()) return; - JsonArray extraArray = extra.getAsJsonArray(); - if (extra.getAsJsonArray().isEmpty()) return; + Text customName = entity.getCustomName(); + List<Text> siblings = customName.getSiblings(); + if (siblings.isEmpty()) return; - if (extraArray.size() == 1) { //Non-crit damage, just formatting with no color changes - JsonElement first = extraArray.get(0); - if (!first.isJsonObject()) return; - JsonElement text = first.getAsJsonObject().get("text"); - if (text == null || !text.isJsonPrimitive()) return; - long damage = Long.parseLong(text.getAsString().replace(",", "")); - first.getAsJsonObject().addProperty("text", prettifyDamageNumber(damage)); - first.getAsJsonObject().addProperty("color", "#" + Integer.toHexString(SkyblockerConfigManager.get().general.compactDamage.normalDamageColor.getRGB() & 0x00FFFFFF)); + MutableText prettierCustomName; + if (siblings.size() == 1) { //Non-crit damage + Text text = siblings.getFirst(); + String dmg = text.getString().replace(",", ""); + if (!NumberUtils.isParsable(dmg)) return; //Sanity check + String prettifiedDmg = prettifyDamageNumber(Long.parseLong(dmg)); + prettierCustomName = Text.literal("").append(Text.literal(prettifiedDmg).withColor(SkyblockerConfigManager.get().general.compactDamage.normalDamageColor.getRGB() & 0x00FFFFFF)).setStyle(customName.getStyle()); } else { //Crit damage - //Already checked that the entity has a custom name above, ignore NPE warnings - String text = entity.getCustomName().getString().replace(",", "").replace("✧", ""); - String prettyText = "✧" + prettifyDamageNumber(Long.parseLong(text)) + "✧"; - extra.getAsJsonArray().asList().clear(); - int length = prettyText.length(); + String dmg = siblings.subList(1, siblings.size() - 1) //First and last sibling are the crit symbols + .stream() + .map(Text::getString) + .reduce("", String::concat) //Concatenate all the siblings to get the dmg number + .replace(",", ""); + + if (!NumberUtils.isParsable(dmg)) return; //Sanity check + String prettifiedDmg = "✧" + prettifyDamageNumber(Long.parseLong(dmg)) + "✧"; + prettierCustomName = Text.literal(""); + int length = prettifiedDmg.length(); for (int i = 0; i < length; i++) { - JsonObject obj = new JsonObject(); - obj.addProperty("text", prettyText.charAt(i)); - obj.addProperty("color", "#" + Integer.toHexString( + prettierCustomName.append(Text.literal(prettifiedDmg.substring(i, i + 1)).withColor( CustomArmorAnimatedDyes.interpolate( SkyblockerConfigManager.get().general.compactDamage.critDamageGradientStart.getRGB() & 0x00FFFFFF, SkyblockerConfigManager.get().general.compactDamage.critDamageGradientEnd.getRGB() & 0x00FFFFFF, i / (length - 1.0) ) )); - extraArray.add(obj); } + prettierCustomName.setStyle(customName.getStyle()); } - entity.setCustomName(Text.Serialization.fromJsonTree(json, entity.getRegistryManager())); + entity.setCustomName(prettierCustomName); } private static String prettifyDamageNumber(long damage) { |