aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextAdder.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipAdder.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AccessoryTooltip.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/DungeonQualityTooltip.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LineSmoothener.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MotesTooltip.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/MuseumTooltip.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/NpcPriceTooltip.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/SupercraftReminder.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractContainerMatcher.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java10
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json2
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",