aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java
index 31e0d110..cfdec2e9 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java
@@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders;
import de.hysky.skyblocker.skyblock.item.slottext.SlotText;
import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder;
+import de.hysky.skyblocker.utils.RomanNumerals;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.Text;
@@ -10,6 +11,8 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.jetbrains.annotations.NotNull;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
//This class is split into 3 inner classes as there are multiple screens for showing catacombs levels, each with different slot ids or different style of showing the level.
//It's still kept in 1 main class for organization purposes.
@@ -18,6 +21,7 @@ public class CatacombsLevelAdder {
}
public static class Dungeoneering extends SlotTextAdder {
+ private static final Pattern LEVEL_PATTERN = Pattern.compile("\\S+ ?(?:(?<arabic>\\d+)|(?<roman>[IVXLCDM]+))?.*");
public Dungeoneering() {
super("^Dungeoneering");
}
@@ -26,12 +30,21 @@ public class CatacombsLevelAdder {
public @NotNull List<SlotText> getText(Slot slot) {
switch (slot.id) {
case 12, 29, 30, 31, 32, 33 -> {
- String name = slot.getStack().getName().getString();
- int lastIndex = name.lastIndexOf(' ');
- if (lastIndex == -1) return List.of(SlotText.bottomLeft(Text.literal("0").formatted(Formatting.RED)));
- String level = name.substring(lastIndex + 1);
- if (!NumberUtils.isDigits(level)) return List.of(); //Sanity check, just in case.
- return List.of(SlotText.bottomRight(Text.literal(level).formatted(Formatting.RED)));
+ Matcher matcher = LEVEL_PATTERN.matcher(slot.getStack().getName().getString());
+ if (!matcher.matches()) return List.of();
+ String arabic = matcher.group("arabic");
+ String roman = matcher.group("roman");
+ if (arabic == null && roman == null) return List.of(SlotText.bottomLeft(Text.literal("0").formatted(Formatting.RED)));
+ String level;
+ if (arabic != null) {
+ if (!NumberUtils.isDigits(arabic)) return List.of(); //Sanity check
+ level = arabic;
+ } else { // roman != null
+ if (!RomanNumerals.isValidRomanNumeral(roman)) return List.of(); //Sanity check
+ level = String.valueOf(RomanNumerals.romanToDecimal(roman));
+ }
+
+ return List.of(SlotText.bottomLeft(Text.literal(level).formatted(Formatting.RED)));
}
default -> {
return List.of();