mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-11 09:23:42 +01:00
e1c0033552
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: 2b4b6d14 PR-1023: Convert InventoryView to interface CraftBukkit Changes: 68603b1c1 Use expanded interaction ranges for traced interact events eae9f760c PR-1414: Convert InventoryView to interface ee9eafe67 Fix Implementation for DamageSource#isIndirect for internal custom causing entity
146 lines
5.7 KiB
Diff
146 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..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
|
|
}
|