aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-05-28 19:05:25 +0300
committerRime <81419447+Emirlol@users.noreply.github.com>2024-06-08 04:13:47 +0300
commit7769de8c37ca43da2fed332effddbe284f601b32 (patch)
tree65dd3eaaf3576a4a79b6bcc5b0e6ee1b1a830800 /src/main/java/de/hysky/skyblocker/utils
parent4bde27dc8c1e89d38f76477c5cd8d30a411c8bb6 (diff)
downloadSkyblocker-7769de8c37ca43da2fed332effddbe284f601b32.tar.gz
Skyblocker-7769de8c37ca43da2fed332effddbe284f601b32.tar.bz2
Skyblocker-7769de8c37ca43da2fed332effddbe284f601b32.zip
Tooltip manager initial commit
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipAdder.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java56
2 files changed, 91 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipAdder.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipAdder.java
new file mode 100644
index 00000000..1e628e99
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipAdder.java
@@ -0,0 +1,35 @@
+package de.hysky.skyblocker.utils.tooltip;
+
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.Text;
+
+import java.util.List;
+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 {
+ public final Pattern titlePattern;
+ //Lower priority means it will be applied first
+ public final int priority;
+
+ protected TooltipAdder(String titlePattern, int priority) {
+ this(Pattern.compile(titlePattern), priority);
+ }
+
+ protected TooltipAdder(Pattern titlePattern, int priority) {
+ this.titlePattern = titlePattern;
+ this.priority = priority;
+ }
+
+ /**
+ * Creates a TooltipAdder that will be applied to all screens.
+ */
+ protected TooltipAdder(int priority) {
+ this.titlePattern = null;
+ this.priority = priority;
+ }
+
+ public abstract void addToTooltip(List<Text> lore, Slot focusedSlot);
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
new file mode 100644
index 00000000..6a744283
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
@@ -0,0 +1,56 @@
+package de.hysky.skyblocker.utils.tooltip;
+
+import de.hysky.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.Text;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+public class TooltipManager {
+ private static final TooltipAdder[] adders = new TooltipAdder[]{};
+ private static final ArrayList<TooltipAdder> currentScreenAdders = new ArrayList<>();
+
+ private TooltipManager() {
+ }
+
+ public static void init() {
+ ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> {
+ onScreenChange(screen);
+ ScreenEvents.remove(screen).register(ignored -> currentScreenAdders.clear());
+ });
+ }
+
+ private static void onScreenChange(Screen screen) {
+ final String title = screen.getTitle().getString();
+ for (TooltipAdder adder : adders) {
+ if (adder.titlePattern == null || adder.titlePattern.matcher(title).matches()) {
+ currentScreenAdders.add(adder);
+ }
+ }
+ currentScreenAdders.sort(Comparator.comparingInt(adder -> adder.priority));
+ }
+
+ /**
+ * <p>Adds additional text from all adders that are applicable to the current screen.
+ * This method is run on each tooltip render, so don't do any heavy calculations here.</p>
+ *
+ * <p>If you want to add info to the tooltips of multiple items, consider using a switch statement with {@code focusedSlot.getIndex()}</p>
+ *
+ * @param lore The lore of the focused item.
+ * @param focusedSlot The slot that is currently focused by the cursor.
+ * @return The lore 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> lore, Slot focusedSlot) {
+ if (!Utils.isOnSkyblock()) return lore;
+ for (TooltipAdder adder : currentScreenAdders) {
+ adder.addToTooltip(lore, focusedSlot);
+ }
+ return lore;
+ }
+}