aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-05-08 10:23:56 +0300
committerRime <81419447+Emirlol@users.noreply.github.com>2024-05-10 12:21:40 +0300
commit7f36f53ebb632d6c1950bf2e9f9951f94a872ee1 (patch)
treeb77c44c233aaa4b0eaf723e879a47b2f211cd8a2 /src/main
parent5167aacdb51bb3c441d66a01964b52219ac54240 (diff)
downloadSkyblocker-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')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java52
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) {