From f5e129aa7b86063a08b742dc70cb37b353653461 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Tue, 24 Jun 2025 08:37:49 +0300 Subject: Add HOTF perk level slot text adder (#1391) * Refactored HotmPerkLevelAdder and added HotfPerkLevelAdder * Add HotfPerkLevelAdder to SlotTextManager --- .../skyblock/item/slottext/SlotTextManager.java | 1 + .../item/slottext/adders/HeartOfTheXAdder.java | 45 ++++++++++++++++++++++ .../item/slottext/adders/HotfPerkLevelAdder.java | 19 +++++++++ .../item/slottext/adders/HotmPerkLevelAdder.java | 34 ++-------------- 4 files changed, 69 insertions(+), 30 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HeartOfTheXAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotfPerkLevelAdder.java (limited to 'src/main/java') 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 e3226005..d68f6e27 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 @@ -39,6 +39,7 @@ public class SlotTextManager { new ChoosePetLevelAdder(), new SkyblockLevelAdder(), new HotmPerkLevelAdder(), + new HotfPerkLevelAdder(), new SkillLevelAdder(), new CatacombsLevelAdder.Dungeoneering(), new CatacombsLevelAdder.DungeonClasses(), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HeartOfTheXAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HeartOfTheXAdder.java new file mode 100644 index 00000000..f3092786 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HeartOfTheXAdder.java @@ -0,0 +1,45 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.utils.ItemUtils; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.intellij.lang.annotations.Language; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class HeartOfTheXAdder extends SimpleSlotTextAdder { + private static final Pattern LEVEL = Pattern.compile("Level (?\\d+)/?(?\\d+)?"); + + protected HeartOfTheXAdder(@NotNull @Language("RegExp") String titlePattern, @Nullable ConfigInformation configInformation) { + super(titlePattern, configInformation); + } + + protected abstract Item getNonLeveledItem(); + + @Override + @NotNull + public List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { + if (slotId < 0 || slotId > 44 || stack.isOf(getNonLeveledItem())) return List.of(); + + List lore = ItemUtils.getLore(stack); + if (lore.isEmpty()) return List.of(); + + String levelLine = lore.getFirst().getString(); + Matcher matcher = LEVEL.matcher(levelLine); + if (!matcher.matches()) return List.of(); + + String level = matcher.group("level"); + // The `/` part is removed when the level is max, so the group being null means it's maxed + boolean isMaxed = matcher.group("max") == null; + + return SlotText.bottomRightList(Text.literal(level).withColor(isMaxed ? SlotText.GOLD : SlotText.CREAM)); + } +} \ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotfPerkLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotfPerkLevelAdder.java new file mode 100644 index 00000000..3dd13f74 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotfPerkLevelAdder.java @@ -0,0 +1,19 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import net.minecraft.item.Item; +import net.minecraft.item.Items; + +public class HotfPerkLevelAdder extends HeartOfTheXAdder { + private static final ConfigInformation CONFIG_INFORMATION = new ConfigInformation( + "hotf_perk_level", + "skyblocker.config.uiAndVisuals.slotText.hotfPerkLevel"); + + public HotfPerkLevelAdder() { + super("^Heart of the Forest$", CONFIG_INFORMATION); + } + + @Override + protected Item getNonLeveledItem() { + return Items.PLAYER_HEAD; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotmPerkLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotmPerkLevelAdder.java index 4d5c6195..2c99c35f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotmPerkLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/HotmPerkLevelAdder.java @@ -1,45 +1,19 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; -import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; -import de.hysky.skyblocker.skyblock.item.slottext.SlotText; -import de.hysky.skyblocker.utils.ItemUtils; -import net.minecraft.item.ItemStack; +import net.minecraft.item.Item; import net.minecraft.item.Items; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class HotmPerkLevelAdder extends SimpleSlotTextAdder { +public class HotmPerkLevelAdder extends HeartOfTheXAdder { private static final ConfigInformation CONFIG_INFORMATION = new ConfigInformation( "hotm_perk_level", "skyblocker.config.uiAndVisuals.slotText.hotmPerkLevel"); - private static final Pattern LEVEL = Pattern.compile("Level (?\\d+)/?(?\\d+)?"); public HotmPerkLevelAdder() { super("^Heart of the Mountain$", CONFIG_INFORMATION); } @Override - @NotNull - public List getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) { - if (slotId < 0 || slotId > 44 || stack.isOf(Items.COAL)) return List.of(); - - List lore = ItemUtils.getLore(stack); - if (lore.isEmpty()) return List.of(); - - String levelLine = lore.getFirst().getString(); - Matcher matcher = LEVEL.matcher(levelLine); - if (!matcher.matches()) return List.of(); - - String level = matcher.group("level"); - // The `/` part is removed when the level is max, so the group being null means it's maxed - boolean isMaxed = matcher.group("max") == null; - - return SlotText.bottomRightList(Text.literal(level).withColor(isMaxed ? SlotText.GOLD : SlotText.CREAM)); + protected Item getNonLeveledItem() { + return Items.COAL; } } -- cgit