aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java25
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CommunityShopAdder.java60
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java11
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java5
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));
}