aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0451-ItemStack-Tooltip-API.patch
diff options
context:
space:
mode:
authorNassim Jahnke <[email protected]>2024-06-14 14:11:52 +0200
committerNassim Jahnke <[email protected]>2024-06-14 14:11:52 +0200
commit0d3ce2d704f295b0e48795ea8145134bed9f4cb1 (patch)
treea2b93e2e167d2119feff6fe62007580ac662fd59 /patches/api/0451-ItemStack-Tooltip-API.patch
parent3c04f9f668c3a42cb294c5e55a846793894312e5 (diff)
downloadPaper-0d3ce2d704f295b0e48795ea8145134bed9f4cb1.tar.gz
Paper-0d3ce2d704f295b0e48795ea8145134bed9f4cb1.zip
Fix more compile issues
Diffstat (limited to 'patches/api/0451-ItemStack-Tooltip-API.patch')
-rw-r--r--patches/api/0451-ItemStack-Tooltip-API.patch146
1 files changed, 146 insertions, 0 deletions
diff --git a/patches/api/0451-ItemStack-Tooltip-API.patch b/patches/api/0451-ItemStack-Tooltip-API.patch
new file mode 100644
index 0000000000..7fa28ddc99
--- /dev/null
+++ b/patches/api/0451-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 3f1b48fd65df954e874e6dc6b9093cb12370e2c5..0e9ccfee7a03d341e7c4d271f53b4ed168b404ef 100644
+--- a/src/main/java/org/bukkit/UnsafeValues.java
++++ b/src/main/java/org/bukkit/UnsafeValues.java
+@@ -273,4 +273,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 c5e22bca27f3199eb2a466f41aa82047f5fd0e44..235d41b0078bb513470b17a0dad46fae3ac73a16 100644
+--- a/src/main/java/org/bukkit/inventory/ItemStack.java
++++ b/src/main/java/org/bukkit/inventory/ItemStack.java
+@@ -1037,4 +1037,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
+ }