diff options
6 files changed, 93 insertions, 14 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java index 6618cda1..71d9aa30 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.item.slottext; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.render.gui.AbstractContainerMatcher; import net.minecraft.screen.slot.Slot; +import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -17,7 +18,7 @@ public abstract class SlotTextAdder extends AbstractContainerMatcher { * * @see #SlotTextAdder(Pattern) */ - protected SlotTextAdder(@NotNull String titlePattern) { + protected SlotTextAdder(@NotNull @Language("RegExp") String titlePattern) { super(titlePattern); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index a4a83455..18131527 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -25,7 +25,8 @@ public class SlotTextManager { new AttributeShardAdder(), new PrehistoricEggAdder(), new PotionLevelAdder(), - new CollectionAdder() + new CollectionAdder(), + new CommunityShopAdder() }; private static final ArrayList<SlotTextAdder> currentScreenAdders = new ArrayList<>(); 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..da12e867 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(".*?(?:(?<arabic>\\d+)|(?<roman>\\S+))? ?✯?"); 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(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java new file mode 100644 index 00000000..c7ea17dc --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java @@ -0,0 +1,60 @@ +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.ItemUtils; +import de.hysky.skyblocker.utils.RomanNumerals; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class CommunityShopAdder extends SlotTextAdder { + private static final byte CATEGORIES_START = 10; + private static final byte CATEGORIES_END = 14; //Inclusive + + public CommunityShopAdder() { + super("^Community Shop"); + } + + @Override + public @NotNull List<SlotText> getText(Slot slot) { + for (byte i = CATEGORIES_START; i <= CATEGORIES_END; i++) { + if (slot.inventory.getStack(i).isOf(Items.LIME_STAINED_GLASS_PANE)) { //Only the selected category has a lime stained glass pane, the others have a gray one. + return switch (i) { //This is a switch to allow adding more categories easily in the future, if we ever add more. + case 11 -> getTextForUpgradesScreen(slot); + default -> List.of(); + }; + } + } + return List.of(); + } + + private static List<SlotText> getTextForUpgradesScreen(Slot slot) { + final ItemStack stack = slot.getStack(); + switch (slot.id) { + case 30, 31, 32, 33, 34, 38, 39, 40, 41, 42, 43, 44 -> { + String name = stack.getName().getString(); + int lastIndex = name.lastIndexOf(' '); + String roman = name.substring(lastIndex + 1); // + 1 as we don't want the space + if (!RomanNumerals.isValidRomanNumeral(roman)) return List.of(); + + List<Text> lore = ItemUtils.getLore(stack); + if (lore.isEmpty()) return List.of(); + String lastLine = lore.getLast().getString(); + return List.of(SlotText.bottomLeft(switch (lastLine) { + case "Maxed out!" -> Text.literal("Max").withColor(0xfab387); + case "Currently upgrading!" -> Text.literal("⏰").withColor(0xf9e2af).formatted(Formatting.BOLD); + case "Click to claim!" -> Text.literal("✅").withColor(0xa6e3a1).formatted(Formatting.BOLD); + default -> Text.literal(String.valueOf(RomanNumerals.romanToDecimal(roman))).withColor(0xcba6f7); + })); + + } + } + return List.of(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java index b54b6a89..b9fe130f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java @@ -11,8 +11,11 @@ import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class MinionLevelAdder extends SlotTextAdder { + private static final Pattern MINION_PATTERN = Pattern.compile(".* Minion ([IVXLCDM]+)"); public MinionLevelAdder() { super(); } @@ -21,11 +24,11 @@ public class MinionLevelAdder extends SlotTextAdder { public @NotNull List<SlotText> getText(Slot slot) { ItemStack itemStack = slot.getStack(); if (!itemStack.isOf(Items.PLAYER_HEAD)) return List.of(); - String name = itemStack.getName().getString(); - if (!name.contains("Minion")) return List.of(); - String romanNumeral = name.substring(name.lastIndexOf(' ') + 1); //+1 because we don't need the space itself + Matcher matcher = MINION_PATTERN.matcher(itemStack.getName().getString()); + if (!matcher.matches()) return List.of(); + String romanNumeral = matcher.group(1); + if (!RomanNumerals.isValidRomanNumeral(romanNumeral)) return List.of(); int level = RomanNumerals.romanToDecimal(romanNumeral); - if (level == 0) return List.of(); return List.of(SlotText.topRight(Text.literal(String.valueOf(level)).formatted(Formatting.AQUA))); } } diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java index 38864ec4..bf255218 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.utils.render.gui; import de.hysky.skyblocker.skyblock.ChestValue; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.regex.Pattern; @@ -14,11 +15,11 @@ public abstract class AbstractContainerMatcher { @Nullable public final Pattern titlePattern; - public AbstractContainerMatcher() { + protected AbstractContainerMatcher() { this((Pattern) null); } - public AbstractContainerMatcher(String titlePattern) { + protected AbstractContainerMatcher(@NotNull String titlePattern) { this(Pattern.compile(titlePattern)); } |