From 23b1cbd54647fdda4a08d22c6bf5581038c3def7 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Mon, 10 Jun 2024 08:12:12 +0300 Subject: Fix CatacombsLevelAdder not working at max class levels --- .../item/slottext/adders/CatacombsLevelAdder.java | 25 ++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker/skyblock') 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+ ?(?:(?\\d+)|(?[IVXLCDM]+))?.*"); public Dungeoneering() { super("^Dungeoneering"); } @@ -26,12 +30,21 @@ public class CatacombsLevelAdder { public @NotNull List 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(); -- cgit