From d98c370fb5101c6e61d7a62e8430d2f7bf8c5f01 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Thu, 24 Nov 2022 23:05:48 -0800 Subject: [PATCH] Add displayName methods for advancements (#8584) --- .../api/0331-Add-more-advancement-API.patch | 41 +++++++++++---- .../0694-Add-more-advancement-API.patch | 52 +++++++++++++++++-- 2 files changed, 80 insertions(+), 13 deletions(-) diff --git a/patches/api/0331-Add-more-advancement-API.patch b/patches/api/0331-Add-more-advancement-API.patch index 05d89d6770..1dcfad9c82 100644 --- a/patches/api/0331-Add-more-advancement-API.patch +++ b/patches/api/0331-Add-more-advancement-API.patch @@ -3,13 +3,14 @@ From: syldium Date: Fri, 9 Jul 2021 18:49:40 +0200 Subject: [PATCH] Add more advancement API +Co-authored-by: Jake Potrebic diff --git a/src/main/java/io/papermc/paper/advancement/AdvancementDisplay.java b/src/main/java/io/papermc/paper/advancement/AdvancementDisplay.java new file mode 100644 -index 0000000000000000000000000000000000000000..67341bb70762a2326030abd2548372b92474f544 +index 0000000000000000000000000000000000000000..19202e17f362fdffca472178b102d1336349590c --- /dev/null +++ b/src/main/java/io/papermc/paper/advancement/AdvancementDisplay.java -@@ -0,0 +1,156 @@ +@@ -0,0 +1,166 @@ +package io.papermc.paper.advancement; + +import net.kyori.adventure.text.Component; @@ -107,6 +108,16 @@ index 0000000000000000000000000000000000000000..67341bb70762a2326030abd2548372b9 + NamespacedKey backgroundPath(); + + /** ++ * Gets the formatted display name for this display. This ++ * is a part of the component that would be shown in chat when a player ++ * completes the advancement. ++ * ++ * @return the display name ++ * @see org.bukkit.advancement.Advancement#displayName() ++ */ ++ @NotNull Component displayName(); ++ ++ /** + * Defines how the {@link #icon()} appears in the advancements screen and + * the color used with the {@link #title() advancement name}. + */ @@ -167,10 +178,10 @@ index 0000000000000000000000000000000000000000..67341bb70762a2326030abd2548372b9 + } +} diff --git a/src/main/java/org/bukkit/advancement/Advancement.java b/src/main/java/org/bukkit/advancement/Advancement.java -index 17527c2f7bd5b8a5528388a53f2472bc1869c7f3..792d5ab90e9252b4f660434f72f004fade14a84c 100644 +index 17527c2f7bd5b8a5528388a53f2472bc1869c7f3..3f6b9e59c2ea38031ca74962e02d710fde61fb1f 100644 --- a/src/main/java/org/bukkit/advancement/Advancement.java +++ b/src/main/java/org/bukkit/advancement/Advancement.java -@@ -19,13 +19,41 @@ public interface Advancement extends Keyed { +@@ -19,13 +19,53 @@ public interface Advancement extends Keyed { @NotNull Collection getCriteria(); @@ -189,6 +200,21 @@ index 17527c2f7bd5b8a5528388a53f2472bc1869c7f3..792d5ab90e9252b4f660434f72f004fa + io.papermc.paper.advancement.AdvancementDisplay getDisplay(); + + /** ++ * Gets the formatted display name for this display. This ++ * is part of the component that would be shown in chat when a player ++ * completes the advancement. Will return the same as ++ * {@link io.papermc.paper.advancement.AdvancementDisplay#displayName()} when an ++ * {@link io.papermc.paper.advancement.AdvancementDisplay} is present. + * +- * @return a AdvancementDisplay object, or null if not set. ++ * @return the display name ++ * @see io.papermc.paper.advancement.AdvancementDisplay#displayName() + */ +- @Nullable +- AdvancementDisplay getDisplay(); ++ @NotNull net.kyori.adventure.text.Component displayName(); ++ ++ /** + * Gets the parent advancement, if any. + * + * @return the parent advancement @@ -198,12 +224,9 @@ index 17527c2f7bd5b8a5528388a53f2472bc1869c7f3..792d5ab90e9252b4f660434f72f004fa + + /** + * Gets all the direct children advancements. - * -- * @return a AdvancementDisplay object, or null if not set. ++ * + * @return the children advancements - */ -- @Nullable -- AdvancementDisplay getDisplay(); ++ */ + @NotNull + @org.jetbrains.annotations.Unmodifiable + Collection getChildren(); diff --git a/patches/server/0694-Add-more-advancement-API.patch b/patches/server/0694-Add-more-advancement-API.patch index e4a0358c01..ea8714f80d 100644 --- a/patches/server/0694-Add-more-advancement-API.patch +++ b/patches/server/0694-Add-more-advancement-API.patch @@ -3,17 +3,19 @@ From: syldium Date: Fri, 9 Jul 2021 18:50:40 +0200 Subject: [PATCH] Add more advancement API +Co-authored-by: Jake Potrebic diff --git a/src/main/java/io/papermc/paper/advancement/PaperAdvancementDisplay.java b/src/main/java/io/papermc/paper/advancement/PaperAdvancementDisplay.java new file mode 100644 -index 0000000000000000000000000000000000000000..0567e500c40d3d424ddc19062c4f6da902e8586e +index 0000000000000000000000000000000000000000..b9c24b8d83b96d8c66cdf879650027f40eafb274 --- /dev/null +++ b/src/main/java/io/papermc/paper/advancement/PaperAdvancementDisplay.java -@@ -0,0 +1,63 @@ +@@ -0,0 +1,69 @@ +package io.papermc.paper.advancement; + +import io.papermc.paper.adventure.PaperAdventure; +import net.kyori.adventure.text.Component; ++import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.DisplayInfo; +import net.minecraft.advancements.FrameType; +import org.bukkit.NamespacedKey; @@ -65,6 +67,11 @@ index 0000000000000000000000000000000000000000..0567e500c40d3d424ddc19062c4f6da9 + return this.handle.getBackground() == null ? null : CraftNamespacedKey.fromMinecraft(this.handle.getBackground()); + } + ++ @Override ++ public @NotNull Component displayName() { ++ return PaperAdventure.asAdventure(Advancement.constructDisplayComponent(null, this.handle)); ++ } ++ + public static @NotNull Frame asPaperFrame(@NotNull FrameType frameType) { + return switch (frameType) { + case TASK -> Frame.TASK; @@ -73,6 +80,38 @@ index 0000000000000000000000000000000000000000..0567e500c40d3d424ddc19062c4f6da9 + }; + } +} +diff --git a/src/main/java/net/minecraft/advancements/Advancement.java b/src/main/java/net/minecraft/advancements/Advancement.java +index 2c01231dcfbb992c9d2f034fcfd4af52fe8ac265..dd4409790524293be07483f00df05d8a8743e3d9 100644 +--- a/src/main/java/net/minecraft/advancements/Advancement.java ++++ b/src/main/java/net/minecraft/advancements/Advancement.java +@@ -53,8 +53,16 @@ public class Advancement { + parent.addChild(this); + } + +- if (display == null) { +- this.chatComponent = Component.literal(id.toString()); ++ // Paper start - moved to static method ++ this.chatComponent = constructDisplayComponent(this.id, this.display); ++ } ++ ++ public static Component constructDisplayComponent(final @Nullable ResourceLocation id, final @Nullable DisplayInfo display) { ++ if (id == null && display == null) { ++ throw new IllegalArgumentException("can't both be null"); ++ } else if (display == null) { ++ return Component.literal(id.toString()); ++ // Paper end + } else { + Component ichatbasecomponent = display.getTitle(); + ChatFormatting enumchatformat = display.getFrame().getChatColor(); +@@ -63,7 +71,7 @@ public class Advancement { + return chatmodifier.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, ichatmutablecomponent)); + }); + +- this.chatComponent = ComponentUtils.wrapInSquareBrackets(ichatmutablecomponent1).withStyle(enumchatformat); ++ return ComponentUtils.wrapInSquareBrackets(ichatmutablecomponent1).withStyle(enumchatformat); // Paper + } + + } diff --git a/src/main/java/net/minecraft/advancements/DisplayInfo.java b/src/main/java/net/minecraft/advancements/DisplayInfo.java index db939a754e9308ad68f1b09a970f7a1b00a673bf..538f19f15b553d14ad95f09b1c81359f4c68b17f 100644 --- a/src/main/java/net/minecraft/advancements/DisplayInfo.java @@ -86,10 +125,10 @@ index db939a754e9308ad68f1b09a970f7a1b00a673bf..538f19f15b553d14ad95f09b1c81359f public DisplayInfo(ItemStack icon, Component title, Component description, @Nullable ResourceLocation background, FrameType frame, boolean showToast, boolean announceToChat, boolean hidden) { this.title = title; diff --git a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java -index c47cae84f3b6970247d78382f48ae8ddbc202b59..77fe2fbec4902317b9d2a959ff8cfd00fe18b60b 100644 +index c47cae84f3b6970247d78382f48ae8ddbc202b59..1435251a4fb721b800e6a1f07b50c5f743e04081 100644 --- a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java +++ b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java -@@ -29,12 +29,38 @@ public class CraftAdvancement implements org.bukkit.advancement.Advancement { +@@ -29,12 +29,43 @@ public class CraftAdvancement implements org.bukkit.advancement.Advancement { return Collections.unmodifiableCollection(this.handle.getCriteria().keySet()); } @@ -108,6 +147,11 @@ index c47cae84f3b6970247d78382f48ae8ddbc202b59..77fe2fbec4902317b9d2a959ff8cfd00 + } + + @Override ++ public net.kyori.adventure.text.Component displayName() { ++ return io.papermc.paper.adventure.PaperAdventure.asAdventure(Advancement.constructDisplayComponent(this.handle.getId(), this.handle.getDisplay())); ++ } ++ ++ @Override + public org.bukkit.advancement.Advancement getParent() { + return this.handle.getParent() == null ? null : this.handle.getParent().bukkit; + }