aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0442-ItemStack-Tooltip-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0442-ItemStack-Tooltip-API.patch')
-rw-r--r--patches/api/0442-ItemStack-Tooltip-API.patch148
1 files changed, 148 insertions, 0 deletions
diff --git a/patches/api/0442-ItemStack-Tooltip-API.patch b/patches/api/0442-ItemStack-Tooltip-API.patch
new file mode 100644
index 0000000000..4af91c3ade
--- /dev/null
+++ b/patches/api/0442-ItemStack-Tooltip-API.patch
@@ -0,0 +1,148 @@
+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..7e16f2645e956cbac8d0fc75ba8209f67fd1835c
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContext.java
+@@ -0,0 +1,76 @@
++package io.papermc.paper.inventory.tooltip;
++
++import org.bukkit.entity.Player;
++import org.jetbrains.annotations.Contract;
++import org.jspecify.annotations.NullMarked;
++
++/**
++ * Context for computing itemstack tooltips via
++ * {@link org.bukkit.inventory.ItemStack#computeTooltipLines(TooltipContext, Player)}
++ */
++@NullMarked
++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 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 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")
++ TooltipContext asAdvanced();
++
++ /**
++ * Returns a new context with {@link #isCreative()}
++ * set to true.
++ *
++ * @return a new context
++ */
++ @Contract("-> new")
++ 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..a649b90dfac6000c01579a48234a11383c731439
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/inventory/tooltip/TooltipContextImpl.java
+@@ -0,0 +1,17 @@
++package io.papermc.paper.inventory.tooltip;
++
++import org.jspecify.annotations.NullMarked;
++
++@NullMarked
++record TooltipContextImpl(boolean isAdvanced, boolean isCreative) implements TooltipContext {
++
++ @Override
++ public TooltipContext asCreative() {
++ return new TooltipContextImpl(this.isAdvanced, true);
++ }
++
++ @Override
++ public TooltipContext asAdvanced() {
++ return new TooltipContextImpl(true, this.isCreative);
++ }
++}
+diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
+index 141d5a964cc299284aecd4d34d57008a32f94247..31217b38e769f97801fa1afefeb223d1c755cabd 100644
+--- a/src/main/java/org/bukkit/UnsafeValues.java
++++ b/src/main/java/org/bukkit/UnsafeValues.java
+@@ -281,4 +281,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 e6c69a54e0c1dc511fe5769f869dcecb13e04ed3..49390979cc0c68b8e719f2a2ce9e7d193c747959 100644
+--- a/src/main/java/org/bukkit/inventory/ItemStack.java
++++ b/src/main/java/org/bukkit/inventory/ItemStack.java
+@@ -1124,4 +1124,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 java.util.@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
+ }