diff options
Diffstat (limited to 'src')
29 files changed, 209 insertions, 106 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index 1477d669..fa87be3d 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -211,6 +211,14 @@ public class GeneralCategory { .name(Text.translatable("skyblocker.config.general.itemInfoDisplay")) .collapsed(true) .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip"))) + .binding(defaults.general.itemInfoDisplay.slotText, + () -> config.general.itemInfoDisplay.slotText, + newValue -> config.general.itemInfoDisplay.slotText = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo")) .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo.@Tooltip"))) .binding(defaults.general.itemInfoDisplay.attributeShardInfo, diff --git a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java index 56e110b6..aa7566a0 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java @@ -141,6 +141,9 @@ public class GeneralConfig { public static class ItemInfoDisplay { @SerialEntry + public boolean slotText = true; + + @SerialEntry public boolean attributeShardInfo = true; @SerialEntry diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index 35b91639..1a97c471 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -1,6 +1,5 @@ package de.hysky.skyblocker.mixins; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.systems.RenderSystem; import de.hysky.skyblocker.SkyblockerMod; @@ -17,7 +16,6 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager; import de.hysky.skyblocker.skyblock.item.tooltip.BackpackPreview; import de.hysky.skyblocker.skyblock.item.tooltip.CompactorDeletorPreview; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipManager; import de.hysky.skyblocker.skyblock.quicknav.QuickNav; import de.hysky.skyblocker.skyblock.quicknav.QuickNavButton; import de.hysky.skyblocker.utils.ItemUtils; @@ -38,7 +36,10 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; @@ -189,12 +190,6 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen return skyblocker$experimentSolvers$getStack(focusedSlot, stack); } - @SuppressWarnings("deprecation") - @ModifyReturnValue(method = "getTooltipFromItem", at = @At("RETURN")) - private List<Text> skyblocker$tooltips$addToTooltip(List<Text> tooltip) { - return TooltipManager.addToTooltip(tooltip, focusedSlot); - } - @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 3), ordinal = 0) private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, DrawContext context, Slot slot) { return skyblocker$experimentSolvers$getStack(slot, stack); diff --git a/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java index b57ee32a..6797cb61 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java @@ -9,6 +9,7 @@ import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import it.unimi.dsi.fastutil.ints.IntIntPair; +import net.minecraft.component.ComponentHolder; import net.minecraft.component.type.ItemEnchantmentsComponent; import net.minecraft.item.ItemStack; import net.minecraft.item.TooltipAppender; @@ -28,7 +29,7 @@ import java.util.Locale; import java.util.Optional; @Mixin(ItemStack.class) -public abstract class ItemStackMixin implements SkyblockerStack { +public abstract class ItemStackMixin implements ComponentHolder, SkyblockerStack { @Shadow public abstract int getDamage(); @@ -51,7 +52,7 @@ public abstract class ItemStackMixin implements SkyblockerStack { @ModifyReturnValue(method = "getName", at = @At("RETURN")) private Text skyblocker$customItemNames(Text original) { if (Utils.isOnSkyblock()) { - return SkyblockerConfigManager.get().general.customItemNames.getOrDefault(ItemUtils.getItemUuid((ItemStack) (Object) this), original); + return SkyblockerConfigManager.get().general.customItemNames.getOrDefault(ItemUtils.getItemUuid(this), original); } return original; diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java index 41323a5e..9a2a8311 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java +++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java @@ -1,16 +1,11 @@ package de.hysky.skyblocker.mixins.accessors; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -import java.util.List; @Mixin(HandledScreen.class) public interface HandledScreenAccessor { @@ -32,7 +27,4 @@ public interface HandledScreenAccessor { @Accessor("focusedSlot") Slot getFocusedSlot(); - - @Invoker - List<Text> invokeGetTooltipFromItem(ItemStack stack); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java index d33a83e9..02e0e8af 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java @@ -18,6 +18,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.jetbrains.annotations.Nullable; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -255,8 +256,8 @@ public class ChocolateFactorySolver extends ContainerSolver { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper) return; + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper || focusedSlot == null) return; int lineIndex = lines.size(); //This boolean is used to determine if we should add a smooth line to separate the added information from the rest of the tooltip. 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 18bf1dc1..6618cda1 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 @@ -1,9 +1,9 @@ package de.hysky.skyblocker.skyblock.item.slottext; -import de.hysky.skyblocker.skyblock.ChestValue; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.render.gui.AbstractContainerMatcher; import net.minecraft.screen.slot.Slot; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Pattern; @@ -11,21 +11,14 @@ import java.util.regex.Pattern; /** * Extend this class and add it to {@link SlotTextManager#adders} to add text to any arbitrary slot. */ -public abstract class SlotTextAdder { - /** - * The title of the screen must match this pattern for this adder to be applied. Null means it will be applied to all screens. - * @implNote Don't end your regex with a {@code $} as {@link ChestValue} appends text to the end of the title, - * so the regex will stop matching if the player uses it. - */ - public final @Nullable Pattern titlePattern; - +public abstract class SlotTextAdder extends AbstractContainerMatcher { /** * Utility constructor that will compile the given string into a pattern. * * @see #SlotTextAdder(Pattern) */ protected SlotTextAdder(@NotNull String titlePattern) { - this(Pattern.compile(titlePattern)); + super(titlePattern); } /** @@ -34,14 +27,14 @@ public abstract class SlotTextAdder { * @param titlePattern The pattern to match the screen title against. */ protected SlotTextAdder(@NotNull Pattern titlePattern) { - this.titlePattern = titlePattern; + super(titlePattern); } /** * Creates a SlotTextAdder that will be applied to all screens. */ protected SlotTextAdder() { - this.titlePattern = null; + super(); } /** @@ -59,6 +52,6 @@ public abstract class SlotTextAdder { * @implNote The slot text adders only work while in skyblock, so no need to check for that again. */ public boolean isEnabled() { - return true; + return SkyblockerConfigManager.get().general.itemInfoDisplay.slotText; } } 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 7b4b34cf..a4a83455 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 @@ -23,7 +23,9 @@ public class SlotTextManager { new CatacombsLevelAdder.ReadyUp(), new RancherBootsSpeedAdder(), new AttributeShardAdder(), - new PrehistoricEggAdder() + new PrehistoricEggAdder(), + new PotionLevelAdder(), + new CollectionAdder() }; private static final ArrayList<SlotTextAdder> currentScreenAdders = new ArrayList<>(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java new file mode 100644 index 00000000..e577f0d8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java @@ -0,0 +1,33 @@ +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; +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 CollectionAdder extends SlotTextAdder { + private static final Pattern COLLECTION = Pattern.compile("^[\\w ]+ (?<level>[IVXLCDM]+)$"); + + public CollectionAdder() { + super("^\\w+ Collections"); + } + + @Override + public @NotNull List<SlotText> getText(Slot slot) { + final ItemStack stack = slot.getStack(); + Matcher matcher = COLLECTION.matcher(stack.getName().getString()); + if (matcher.matches()) { + int level = RomanNumerals.romanToDecimal(matcher.group("level")); + return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).formatted(Formatting.YELLOW))); + } + return List.of(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java new file mode 100644 index 00000000..457d2964 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java @@ -0,0 +1,27 @@ +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 net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +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 PotionLevelAdder extends SlotTextAdder { + @Override + public @NotNull List<SlotText> getText(Slot slot) { + final ItemStack stack = slot.getStack(); + NbtCompound customData = ItemUtils.getCustomData(stack); + if (customData.contains("potion_level", NbtElement.INT_TYPE)) { + int level = customData.getInt("potion_level"); + return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).formatted(Formatting.AQUA))); + } + return List.of(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java index 7c43957e..9bd63adc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java @@ -1,8 +1,10 @@ package de.hysky.skyblocker.skyblock.item.tooltip; -import de.hysky.skyblocker.skyblock.ChestValue; +import de.hysky.skyblocker.utils.render.gui.AbstractContainerMatcher; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.regex.Pattern; @@ -10,13 +12,7 @@ import java.util.regex.Pattern; /** * Extend this class and add it to {@link TooltipManager#adders} to add additional text to tooltips. */ -public abstract class TooltipAdder { - /** - * The title of the screen must match this pattern for this adder to be applied. Null means it will be applied to all screens. - * @implNote Don't end your regex with a {@code $} as {@link ChestValue} appends text to the end of the title, - * so the regex will stop matching if the player uses it. - */ - public final Pattern titlePattern; +public abstract class TooltipAdder extends AbstractContainerMatcher { /** * The priority of this adder. Lower priority means it will be applied first. * @apiNote Consider taking this value on your class' constructor and setting it from {@link TooltipManager#adders} to make it easy to read and maintain. @@ -24,11 +20,12 @@ public abstract class TooltipAdder { public final int priority; protected TooltipAdder(String titlePattern, int priority) { - this(Pattern.compile(titlePattern), priority); + super(titlePattern); + this.priority = priority; } protected TooltipAdder(Pattern titlePattern, int priority) { - this.titlePattern = titlePattern; + super(titlePattern); this.priority = priority; } @@ -36,7 +33,7 @@ public abstract class TooltipAdder { * Creates a TooltipAdder that will be applied to all screens. */ protected TooltipAdder(int priority) { - this.titlePattern = null; + super(); this.priority = priority; } @@ -44,5 +41,5 @@ public abstract class TooltipAdder { * @implNote The first element of the lines list holds the item's display name, * as it's a list of all lines that will be displayed in the tooltip. */ - public abstract void addToTooltip(List<Text> lines, Slot focusedSlot); + public abstract void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index 319df71a..e3a2ef04 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -1,12 +1,18 @@ package de.hysky.skyblocker.skyblock.item.tooltip; +import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver; import de.hysky.skyblocker.skyblock.item.tooltip.adders.*; import de.hysky.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Comparator; @@ -34,6 +40,13 @@ public class TooltipManager { } public static void init() { + ItemTooltipCallback.EVENT.register((stack, tooltipContext, tooltipType, lines) -> { + if (MinecraftClient.getInstance().currentScreen instanceof HandledScreen<?> handledScreen) { + addToTooltip(((HandledScreenAccessor) handledScreen).getFocusedSlot(), stack, lines); + } else { + addToTooltip(null, stack, lines); + } + }); ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { onScreenChange(screen); ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear()); @@ -42,6 +55,7 @@ public class TooltipManager { private static void onScreenChange(Screen screen) { final String title = screen.getTitle().getString(); + currentScreenAdders.clear(); for (TooltipAdder adder : adders) { if (adder.titlePattern == null || adder.titlePattern.matcher(title).find()) { currentScreenAdders.add(adder); @@ -56,16 +70,17 @@ public class TooltipManager { * * <p>If you want to add info to the tooltips of multiple items, consider using a switch statement with {@code focusedSlot.getIndex()}</p> * - * @param lines The tooltip lines of the focused item. This includes the display name, as it's a part of the tooltip (at index 0). * @param focusedSlot The slot that is currently focused by the cursor. + * @param stack The stack to render the tooltip for. + * @param lines The tooltip lines of the focused item. This includes the display name, as it's a part of the tooltip (at index 0). * @return The lines list itself after all adders have added their text. * @deprecated This method is public only for the sake of the mixin. Don't call directly, not that there is any point to it. */ @Deprecated - public static List<Text> addToTooltip(List<Text> lines, Slot focusedSlot) { + public static List<Text> addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { if (!Utils.isOnSkyblock()) return lines; for (TooltipAdder adder : currentScreenAdders) { - adder.addToTooltip(lines, focusedSlot); + adder.addToTooltip(focusedSlot, stack, lines); } return lines; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java index 3b150488..caed0e0e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java @@ -4,10 +4,12 @@ import de.hysky.skyblocker.skyblock.item.tooltip.AccessoriesHelper; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; import it.unimi.dsi.fastutil.Pair; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -17,8 +19,8 @@ public class AccessoryTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - final String internalID = focusedSlot.getStack().getSkyblockId(); + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + final String internalID = stack.getSkyblockId(); if (TooltipInfoType.ACCESSORIES.isTooltipEnabledAndHasOrNullWarning(internalID)) { Pair<AccessoriesHelper.AccessoryReport, String> report = AccessoriesHelper.calculateReport4Accessory(internalID); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java index a36f30e9..d7a56b95 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java @@ -9,6 +9,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -18,10 +19,9 @@ public class AvgBinTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - final ItemStack itemStack = focusedSlot.getStack(); - String neuName = itemStack.getNeuName(); - String internalID = itemStack.getSkyblockId(); + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + String neuName = stack.getNeuName(); + String internalID = stack.getSkyblockId(); if (neuName == null || internalID == null) return; if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) { @@ -42,7 +42,7 @@ public class AvgBinTooltip extends TooltipAdder { .formatted(Formatting.GOLD) .append(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName) == null ? Text.literal("No data").formatted(Formatting.RED) - : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), itemStack.getCount()) + : ItemTooltip.getCoinsMessage(TooltipInfoType.ONE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount()) ) ); } @@ -52,7 +52,7 @@ public class AvgBinTooltip extends TooltipAdder { .formatted(Formatting.GOLD) .append(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName) == null ? Text.literal("No data").formatted(Formatting.RED) - : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), itemStack.getCount()) + : ItemTooltip.getCoinsMessage(TooltipInfoType.THREE_DAY_AVERAGE.getData().get(neuName).getAsDouble(), stack.getCount()) ) ); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java index 0aab21c0..d2fa563b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java @@ -9,6 +9,7 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.apache.commons.lang3.math.NumberUtils; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -20,12 +21,11 @@ public class BazaarPriceTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { bazaarExist = false; - final ItemStack itemStack = focusedSlot.getStack(); - final String internalID = itemStack.getSkyblockId(); + final String internalID = stack.getSkyblockId(); if (internalID == null) return; - String name = itemStack.getSkyblockApiId(); + String name = stack.getSkyblockApiId(); if (name == null) return; if (name.startsWith("ISSHINY_")) name = "SHINY_" + internalID; @@ -36,9 +36,9 @@ public class BazaarPriceTooltip extends TooltipAdder { //The amount is in the 2nd sibling of the 3rd line of the lore. here V //Example line: empty[style={color=dark_purple,!italic}, siblings=[literal{Stored: }[style={color=gray}], literal{0}[style={color=dark_gray}], literal{/20k}[style={color=gray}]] String line = lines.get(3).getSiblings().get(1).getString().replace(",", ""); - amount = NumberUtils.isParsable(line) && !line.equals("0") ? Integer.parseInt(line) : itemStack.getCount(); + amount = NumberUtils.isParsable(line) && !line.equals("0") ? Integer.parseInt(line) : stack.getCount(); } else { - amount = itemStack.getCount(); + amount = stack.getCount(); } JsonObject getItem = TooltipInfoType.BAZAAR.getData().getAsJsonObject(name); lines.add(Text.literal(String.format("%-18s", "Bazaar buy Price:")) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java index 2b576be6..26a040ec 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java @@ -14,6 +14,7 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.StringIdentifiable; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,14 +28,13 @@ public class ColorTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - final ItemStack itemStack = focusedSlot.getStack(); - final String internalID = itemStack.getSkyblockId(); - if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID) && itemStack.contains(DataComponentTypes.DYED_COLOR)) { - String uuid = ItemUtils.getItemUuid(itemStack); + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + final String internalID = stack.getSkyblockId(); + if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID) && stack.contains(DataComponentTypes.DYED_COLOR)) { + String uuid = ItemUtils.getItemUuid(stack); boolean hasCustomDye = SkyblockerConfigManager.get().general.customDyeColors.containsKey(uuid) || SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(uuid); //DyedColorComponent#getColor returns ARGB so we mask out the alpha bits - int dyeColor = DyedColorComponent.getColor(itemStack, 0); + int dyeColor = DyedColorComponent.getColor(stack, 0); // dyeColor will have alpha = 255 if it's dyed, and alpha = 0 if it's not dyed, if (!hasCustomDye && dyeColor != 0) { @@ -48,13 +48,13 @@ public class ColorTooltip extends TooltipAdder { if (existingTooltip.startsWith("Color: ")) { correctLine = true; - addExoticTooltip(lines, internalID, ItemUtils.getCustomData(itemStack), colorHex, expectedHex, existingTooltip); + addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack), colorHex, expectedHex, existingTooltip); break; } } if (!correctLine) { - addExoticTooltip(lines, internalID, ItemUtils.getCustomData(itemStack), colorHex, expectedHex, ""); + addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack), colorHex, expectedHex, ""); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java index 05e9887c..0b1d993d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java @@ -3,10 +3,12 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; import de.hysky.skyblocker.utils.ItemUtils; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -16,9 +18,9 @@ public class DungeonQualityTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { if (!SkyblockerConfigManager.get().general.itemTooltip.dungeonQuality) return; - NbtCompound customData = ItemUtils.getCustomData(focusedSlot.getStack()); + NbtCompound customData = ItemUtils.getCustomData(stack); if (customData == null || !customData.contains("baseStatBoostPercentage")) return; int baseStatBoostPercentage = customData.getInt("baseStatBoostPercentage"); boolean maxQuality = baseStatBoostPercentage == 50; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java index 45cfe3e4..e6930c32 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -18,12 +19,11 @@ public class LBinTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { lbinExist = false; - final ItemStack itemStack = focusedSlot.getStack(); - final String internalID = itemStack.getSkyblockId(); + final String internalID = stack.getSkyblockId(); if (internalID == null) return; - String name = itemStack.getSkyblockApiId(); + String name = stack.getSkyblockApiId(); if (name == null) return; if (name.startsWith("ISSHINY_")) name = "SHINY_" + internalID; @@ -33,7 +33,7 @@ public class LBinTooltip extends TooltipAdder { if (TooltipInfoType.LOWEST_BINS.isTooltipEnabledAndHasOrNullWarning(name) && !BazaarPriceTooltip.bazaarExist) { lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:")) .formatted(Formatting.GOLD) - .append(ItemTooltip.getCoinsMessage(TooltipInfoType.LOWEST_BINS.getData().get(name).getAsDouble(), itemStack.getCount()))); + .append(ItemTooltip.getCoinsMessage(TooltipInfoType.LOWEST_BINS.getData().get(name).getAsDouble(), stack.getCount()))); lbinExist = true; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java index e3ce12df..0e997834 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java @@ -1,9 +1,11 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -20,7 +22,7 @@ public class LineSmoothener extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { for (int i = 0; i < lines.size(); i++) { List<Text> lineSiblings = lines.get(i).getSiblings(); //Compare the first sibling rather than the whole object as the style of the root object can change while visually staying the same diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java index 64640b95..a0aa8d94 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java @@ -8,6 +8,7 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Locale; @@ -18,13 +19,12 @@ public class MotesTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - final ItemStack itemStack = focusedSlot.getStack(); - final String internalID = itemStack.getSkyblockId(); + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + final String internalID = stack.getSkyblockId(); if (internalID != null && TooltipInfoType.MOTES.isTooltipEnabledAndHasOrNullWarning(internalID)) { lines.add(Text.literal(String.format("%-20s", "Motes Price:")) .formatted(Formatting.LIGHT_PURPLE) - .append(getMotesMessage(TooltipInfoType.MOTES.getData().get(internalID).getAsInt(), itemStack.getCount()))); + .append(getMotesMessage(TooltipInfoType.MOTES.getData().get(internalID).getAsInt(), stack.getCount()))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java index 1c64760a..5c21d2df 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java @@ -9,6 +9,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -18,9 +19,8 @@ public class MuseumTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - final ItemStack itemStack = focusedSlot.getStack(); - final String internalID = itemStack.getSkyblockId(); + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + final String internalID = stack.getSkyblockId(); if (TooltipInfoType.MUSEUM.isTooltipEnabledAndHasOrNullWarning(internalID)) { String itemCategory = TooltipInfoType.MUSEUM.getData().get(internalID).getAsString(); String format = switch (itemCategory) { @@ -34,7 +34,7 @@ public class MuseumTooltip extends TooltipAdder { lines.add(Text.literal(String.format(format, "Museum: (" + itemCategory + ")")) .formatted(Formatting.LIGHT_PURPLE)); } else { - NbtCompound customData = ItemUtils.getCustomData(itemStack); + NbtCompound customData = ItemUtils.getCustomData(stack); boolean isInMuseum = (customData.contains("donated_museum") && customData.getBoolean("donated_museum")) || MuseumItemCache.hasItemInMuseum(internalID); Formatting donatedIndicatorFormatting = isInMuseum ? Formatting.GREEN : Formatting.RED; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java index 3ac7d298..672201d5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -16,8 +17,7 @@ public class NpcPriceTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - final ItemStack stack = focusedSlot.getStack(); + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { final String internalID = stack.getSkyblockId(); if (internalID != null && TooltipInfoType.NPC.isTooltipEnabledAndHasOrNullWarning(internalID)) { lines.add(Text.literal(String.format("%-21s", "NPC Sell Price:")) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java index 9cc03b4d..9f405c58 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java @@ -9,6 +9,7 @@ import net.minecraft.nbt.NbtElement; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.Nullable; import java.time.Instant; import java.time.ZoneId; @@ -26,9 +27,9 @@ public class ObtainedDateTooltip extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { if (TooltipInfoType.OBTAINED.isTooltipEnabled()) { - String timestamp = getTimestamp(focusedSlot.getStack()); + String timestamp = getTimestamp(stack); if (!timestamp.isEmpty()) { lines.add(Text.empty() diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java index 8a8f198c..47d2bd48 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java @@ -2,10 +2,12 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; import de.hysky.skyblocker.utils.ItemUtils; +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.Nullable; import java.util.List; import java.util.regex.Pattern; @@ -19,8 +21,8 @@ public class SupercraftReminder extends TooltipAdder { } @Override - public void addToTooltip(List<Text> lines, Slot focusedSlot) { - if (focusedSlot.id != SUPERCRAFT_SLOT || !focusedSlot.getStack().isOf(Items.GOLDEN_PICKAXE)) return; + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + if (focusedSlot == null || focusedSlot.id != SUPERCRAFT_SLOT || !stack.isOf(Items.GOLDEN_PICKAXE)) return; String uuid = ItemUtils.getItemUuid(focusedSlot.inventory.getStack(RECIPE_RESULT_SLOT)); if (!uuid.isEmpty()) return; //Items with UUID can't be stacked, and therefore the shift-click feature doesn't matter int index = lines.size() - 1; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java index 9e2ec0b3..6af03f31 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java @@ -1,10 +1,8 @@ package de.hysky.skyblocker.skyblock.itemlist; -import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.item.ItemStack; @@ -44,7 +42,7 @@ public class ResultButtonWidget extends ClickableWidget { public void renderTooltip(DrawContext context, int mouseX, int mouseY) { MinecraftClient client = MinecraftClient.getInstance(); if (client.currentScreen == null) return; - List<Text> tooltip = client.currentScreen instanceof HandledScreen<?> handledScreen ? ((HandledScreenAccessor) handledScreen).invokeGetTooltipFromItem(this.itemStack) : Screen.getTooltipFromItem(client, this.itemStack); + List<Text> tooltip = Screen.getTooltipFromItem(client, this.itemStack); client.currentScreen.setTooltip(tooltip.stream().map(Text::asOrderedText).toList()); } diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index b1708404..46950fc4 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -18,6 +18,7 @@ import it.unimi.dsi.fastutil.ints.IntIntPair; import it.unimi.dsi.fastutil.longs.LongBooleanPair; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.component.ComponentChanges; +import net.minecraft.component.ComponentHolder; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.LoreComponent; import net.minecraft.component.type.NbtComponent; @@ -62,7 +63,7 @@ public class ItemUtils { } @SuppressWarnings("deprecation") - public static NbtCompound getCustomData(@NotNull ItemStack stack) { + public static NbtCompound getCustomData(@NotNull ComponentHolder stack) { return stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).getNbt(); } @@ -104,7 +105,7 @@ public class ItemUtils { * @param stack the item stack to get the UUID from * @return the UUID of the item stack, or an empty string if the item stack is null or does not have a UUID */ - public static String getItemUuid(@NotNull ItemStack stack) { + public static String getItemUuid(@NotNull ComponentHolder stack) { return getCustomData(stack).getString(UUID); } 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 new file mode 100644 index 00000000..38864ec4 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java @@ -0,0 +1,28 @@ +package de.hysky.skyblocker.utils.render.gui; + +import de.hysky.skyblocker.skyblock.ChestValue; +import org.jetbrains.annotations.Nullable; + +import java.util.regex.Pattern; + +public abstract class AbstractContainerMatcher { + /** + * The title of the screen must match this pattern for this to be applied. Null means it will be applied to all screens. + * @implNote Don't end your regex with a {@code $} as {@link ChestValue} appends text to the end of the title, + * so the regex will stop matching if the player uses chest value. + */ + @Nullable + public final Pattern titlePattern; + + public AbstractContainerMatcher() { + this((Pattern) null); + } + + public AbstractContainerMatcher(String titlePattern) { + this(Pattern.compile(titlePattern)); + } + + protected AbstractContainerMatcher(@Nullable Pattern titlePattern) { + this.titlePattern = titlePattern; + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java index 0417dc3c..81c9ebec 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java @@ -11,17 +11,15 @@ import java.util.regex.Pattern; /** * Abstract class for gui solvers. Extend this class to add a new gui solver, like terminal solvers or experiment solvers. */ -public abstract class ContainerSolver { - private final Pattern containerName; - - protected ContainerSolver(String containerName) { - this.containerName = Pattern.compile(containerName); +public abstract class ContainerSolver extends AbstractContainerMatcher { + protected ContainerSolver(String titlePattern) { + super(titlePattern); } protected abstract boolean isEnabled(); public final Pattern getName() { - return containerName; + return titlePattern; } protected void start(GenericContainerScreen screen) { diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 9361c941..cab0ec4b 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -210,6 +210,8 @@ "skyblocker.config.general.itemInfoDisplay.itemRarityBackgrounds": "Item Rarity Backgrounds", "skyblocker.config.general.itemInfoDisplay.itemRarityBackgrounds.@Tooltip": "Displays a colored background behind an item, the color represents the item's rarity.", "skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundsOpacity": "Item Rarity Backgrounds Opacity", + "skyblocker.config.general.itemInfoDisplay.slotText": "Slot Text", + "skyblocker.config.general.itemInfoDisplay.slotText.@Tooltip": "Displays information such as enchantment book level, minion level, pet level, potion level, prehistoric egg blocks walked, rancher's boots speed cap, and skill level", "skyblocker.config.general.itemList": "Item List", "skyblocker.config.general.itemList.enableItemList": "Enable Item List", |