aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0455-ItemStack-Tooltip-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0455-ItemStack-Tooltip-API.patch')
-rw-r--r--patches/api/0455-ItemStack-Tooltip-API.patch146
1 files changed, 146 insertions, 0 deletions
diff --git a/patches/api/0455-ItemStack-Tooltip-API.patch b/patches/api/0455-ItemStack-Tooltip-API.patch
new file mode 100644
index 0000000000..f3bddbb6d0
--- /dev/null
+++ b/patches/api/0455-ItemStack-Tooltip-API.patch
@@ -0,0 +1,146 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Yannick Lamprecht <[email protected]>
+Date: Mon, 22 Jan 2024 13:27:18 +0100
+Subject: [PATCH] ItemStack Tooltip API
+
+
+diff --git a/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContext.java b/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContext.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..39ac768b3c5148544cb1aaf2c817e661f6856f64
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContext.java
+@@ -0,0 +1,75 @@
++package io.papermc.paper.inventory.tooltip;
++
++import org.bukkit.entity.Player;
++import org.jetbrains.annotations.Contract;
++import org.jetbrains.annotations.NotNull;
++
++/**
++ * Context for computing itemstack tooltips via
++ * {@link org.bukkit.inventory.ItemStack#computeTooltipLines(TooltipContext, Player)}
++ */
++public interface TooltipContext {
++
++ /**
++ * Creates a new context with the given advanced and creative
++ * mode settings.
++ *
++ * @param advanced whether the context is for advanced tooltips
++ * @param creative whether the context is for the creative inventory
++ * @return a new context
++ */
++ @Contract("_, _ -> new")
++ static @NotNull TooltipContext create(final boolean advanced, final boolean creative) {
++ return new TooltipContextImpl(advanced, creative);
++ }
++
++ /**
++ * Creates a new context that is neither advanced nor creative.
++ *
++ * @return a new context
++ */
++ @Contract("-> new")
++ static @NotNull TooltipContext create() {
++ return new TooltipContextImpl(false, false);
++ }
++
++ /**
++ * Returns whether the context is for advanced
++ * tooltips.
++ * <p>
++ * Advanced tooltips are shown by default
++ * when a player has {@code F3+H} enabled.
++ *
++ * @return true if for advanced tooltips
++ */
++ boolean isAdvanced();
++
++ /**
++ * Returns whether the context is for the creative
++ * mode inventory.
++ * <p>
++ * Creative tooltips are shown by default when a player is
++ * in the creative inventory.
++ *
++ * @return true if for creative mode inventory
++ */
++ boolean isCreative();
++
++ /**
++ * Returns a new context with {@link #isAdvanced()}
++ * set to true.
++ *
++ * @return a new context
++ */
++ @Contract("-> new")
++ @NotNull TooltipContext asAdvanced();
++
++ /**
++ * Returns a new context with {@link #isCreative()}
++ * set to true.
++ *
++ * @return a new context
++ */
++ @Contract("-> new")
++ @NotNull TooltipContext asCreative();
++}
+diff --git a/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContextImpl.java b/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContextImpl.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..1d9bed6691f581529c53b577b26f1d0f902ccb0d
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContextImpl.java
+@@ -0,0 +1,16 @@
++package io.papermc.paper.inventory.tooltip;
++
++import org.jetbrains.annotations.NotNull;
++
++record TooltipContextImpl(boolean isCreative, boolean isAdvanced) implements TooltipContext {
++
++ @Override
++ public @NotNull TooltipContext asCreative() {
++ return new TooltipContextImpl(true, this.isAdvanced);
++ }
++
++ @Override
++ public @NotNull TooltipContext asAdvanced() {
++ return new TooltipContextImpl(this.isCreative, true);
++ }
++}
+diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
+index 563798fda1236e2df39d8908f386c91b3f190d58..521b9e1e5614597ae0220934a96bd6c51bda050b 100644
+--- a/src/main/java/org/bukkit/UnsafeValues.java
++++ b/src/main/java/org/bukkit/UnsafeValues.java
+@@ -272,4 +272,6 @@ public interface UnsafeValues {
+ @org.jetbrains.annotations.ApiStatus.Internal
+ io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager<org.bukkit.plugin.Plugin> createPluginLifecycleEventManager(final org.bukkit.plugin.java.JavaPlugin plugin, final java.util.function.BooleanSupplier registrationCheck);
+ // Paper end - lifecycle event API
++
++ @NotNull java.util.List<net.kyori.adventure.text.Component> computeTooltipLines(@NotNull ItemStack itemStack, @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, @Nullable org.bukkit.entity.Player player); // Paper - expose itemstack tooltip lines
+ }
+diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
+index a1d0e479b9f28378f858f86ba8b0e9b7ddf71446..b669df4bd1ff0ecba575d42415973e81bccddbbe 100644
+--- a/src/main/java/org/bukkit/inventory/ItemStack.java
++++ b/src/main/java/org/bukkit/inventory/ItemStack.java
+@@ -1021,4 +1021,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+ return type.isAir() || amount <= 0;
+ }
+ // Paper end
++ // Paper start - expose itemstack tooltip lines
++ /**
++ * Computes the tooltip lines for this stack.
++ * <p>
++ * <b>Disclaimer:</b>
++ * Tooltip contents are not guaranteed to be consistent across different
++ * Minecraft versions.
++ *
++ * @param tooltipContext the tooltip context
++ * @param player a player for player-specific tooltip lines
++ * @return an immutable list of components (can be empty)
++ */
++ @SuppressWarnings("deprecation") // abusing unsafe as a bridge
++ public @NotNull @org.jetbrains.annotations.Unmodifiable List<net.kyori.adventure.text.Component> computeTooltipLines(final @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, final @Nullable org.bukkit.entity.Player player) {
++ return Bukkit.getUnsafe().computeTooltipLines(this, tooltipContext, player);
++ }
++ // Paper end - expose itemstack tooltip lines
+ }