mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-22 22:45:31 +01:00
52a05907c7
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 97c59261 PR-1073: Make Biome an interface a38581aa Fix further javadoc errors 8271c490 Fix javadoc error 8a9ecf29 PR-1072: Fix bad naming for Vault State methods 6dd58108 PR-1071: Make Fluid an interface and add missing entry ed2cdfc3 PR-1070: Make Attribute an interface and align names with the new minecraft ones 63472efb PR-1069: Add missing winter drop experimental annotation to pale boats CraftBukkit Changes: 7235ad7b0 PR-1501: Make Biome an interface 602904003 PR-1500: Rename implementation for Vault State methods 75f26f79f PR-1499: Make Fluid an interface and add missing entry 4cfd87adc PR-1498: Make Attribute an interface and align names with the new minecraft ones 6bb0db5cb SPIGOT-7928: ExactChoice acts as MaterialChoice 3eaf3a13c SPIGOT-7929: Error when setting EquippableComponent abbf57bac SPIGOT-7930: Fix spawning entities with SummonEntityEffect 92d6ab6cf PR-1497: Move boat field rename entries to below key renaming, so that keys are also renamed abfe292aa PR-1496: Use correct Fluid class on Tags type check c7aab7fa7 SPIGOT-7923: Fix Dispenser logic to avoid firing empty projectiles
148 lines
5.7 KiB
Diff
148 lines
5.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Yannick Lamprecht <yannicklamprecht@live.de>
|
|
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 a0b02efdb3beed93cb1656e840f24cb98f5fd555..b503b5e13c51580367d53939ad4c19a7718c22ce 100644
|
|
--- a/src/main/java/org/bukkit/UnsafeValues.java
|
|
+++ b/src/main/java/org/bukkit/UnsafeValues.java
|
|
@@ -279,4 +279,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
|
|
}
|