mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-26 19:07:40 +01:00
Add more advancement API
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
This commit is contained in:
parent
4bfca492a5
commit
9ae3b87be7
@ -0,0 +1,160 @@
|
||||
package io.papermc.paper.advancement;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.translation.Translatable;
|
||||
import net.kyori.adventure.util.Index;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Describes the display of an advancement.
|
||||
* <p>
|
||||
* The display is used in the chat, in the toast messages and the advancements
|
||||
* screen.
|
||||
*/
|
||||
@NullMarked
|
||||
public interface AdvancementDisplay {
|
||||
|
||||
/**
|
||||
* Gets the {@link Frame}.
|
||||
* <p>
|
||||
* This defines the appearance of the tile in the advancements screen and
|
||||
* the text when it's completed.
|
||||
*
|
||||
* @return the frame type
|
||||
*/
|
||||
Frame frame();
|
||||
|
||||
/**
|
||||
* Gets the advancement title.
|
||||
*
|
||||
* @return the title
|
||||
*/
|
||||
Component title();
|
||||
|
||||
/**
|
||||
* Gets the description.
|
||||
*
|
||||
* @return the description
|
||||
*/
|
||||
Component description();
|
||||
|
||||
/**
|
||||
* Gets the icon shown in the frame in the advancements screen.
|
||||
*
|
||||
* @return a copy of the icon
|
||||
*/
|
||||
ItemStack icon();
|
||||
|
||||
/**
|
||||
* Gets whether a toast should be displayed.
|
||||
* <p>
|
||||
* A toast is a notification that will be displayed in the top right corner
|
||||
* of the screen.
|
||||
*
|
||||
* @return {@code true} if a toast should be shown
|
||||
*/
|
||||
boolean doesShowToast();
|
||||
|
||||
/**
|
||||
* Gets whether a message should be sent in the chat.
|
||||
*
|
||||
* @return {@code true} if a message should be sent
|
||||
* @see org.bukkit.event.player.PlayerAdvancementDoneEvent#message() to edit
|
||||
* the message
|
||||
*/
|
||||
boolean doesAnnounceToChat();
|
||||
|
||||
/**
|
||||
* Gets whether this advancement is hidden.
|
||||
* <p>
|
||||
* Hidden advancements cannot be viewed by the player until they have been
|
||||
* unlocked.
|
||||
*
|
||||
* @return {@code true} if hidden
|
||||
*/
|
||||
boolean isHidden();
|
||||
|
||||
/**
|
||||
* Gets the texture displayed behind the advancement tree when selected.
|
||||
* <p>
|
||||
* This only affects root advancements without any parent. If the background
|
||||
* is not specified or doesn't exist, the tab background will be the missing
|
||||
* texture.
|
||||
*
|
||||
* @return the background texture path
|
||||
*/
|
||||
@Nullable 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()
|
||||
*/
|
||||
Component displayName();
|
||||
|
||||
/**
|
||||
* Defines how the {@link #icon()} appears in the advancements screen and
|
||||
* the color used with the {@link #title() advancement name}.
|
||||
*/
|
||||
enum Frame implements Translatable {
|
||||
|
||||
/**
|
||||
* "Challenge complete" advancement.
|
||||
* <p>
|
||||
* The client will play the {@code ui.toast.challenge_complete} sound
|
||||
* when the challenge is completed and the toast is shown.
|
||||
*/
|
||||
CHALLENGE("challenge", NamedTextColor.DARK_PURPLE),
|
||||
|
||||
/**
|
||||
* "Goal reached" advancement.
|
||||
*/
|
||||
GOAL("goal", NamedTextColor.GREEN),
|
||||
|
||||
/**
|
||||
* "Advancement made" advancement.
|
||||
*/
|
||||
TASK("task", NamedTextColor.GREEN);
|
||||
|
||||
/**
|
||||
* The name map.
|
||||
*/
|
||||
public static final Index<String, Frame> NAMES = Index.create(Frame.class, frame -> frame.name);
|
||||
private final String name;
|
||||
private final TextColor color;
|
||||
|
||||
Frame(final String name, final TextColor color) {
|
||||
this.name = name;
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link TextColor} used for the advancement name.
|
||||
*
|
||||
* @return the text color
|
||||
*/
|
||||
public TextColor color() {
|
||||
return this.color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the translation key used when an advancement is completed.
|
||||
* <p>
|
||||
* This is the first line of the toast displayed by the client.
|
||||
*
|
||||
* @return the toast message key
|
||||
*/
|
||||
@Override
|
||||
public String translationKey() {
|
||||
return "advancements.toast." + this.name;
|
||||
}
|
||||
}
|
||||
}
|
@ -27,13 +27,53 @@ public interface Advancement extends Keyed {
|
||||
@NotNull
|
||||
AdvancementRequirements getRequirements();
|
||||
|
||||
// Paper start
|
||||
/**
|
||||
* Returns the display information for this advancement.
|
||||
* Get the display info of this advancement.
|
||||
* <p>
|
||||
* Will be {@code null} when totally hidden, for example with crafting
|
||||
* recipes.
|
||||
*
|
||||
* This includes it's name, description and other visible tags.
|
||||
*
|
||||
* @return a AdvancementDisplay object, or null if not set.
|
||||
* @return the display info
|
||||
*/
|
||||
@Nullable
|
||||
AdvancementDisplay getDisplay();
|
||||
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 the display name
|
||||
* @see io.papermc.paper.advancement.AdvancementDisplay#displayName()
|
||||
*/
|
||||
@NotNull net.kyori.adventure.text.Component displayName();
|
||||
|
||||
/**
|
||||
* Gets the parent advancement, if any.
|
||||
*
|
||||
* @return the parent advancement
|
||||
*/
|
||||
@Nullable
|
||||
Advancement getParent();
|
||||
|
||||
/**
|
||||
* Gets all the direct children advancements.
|
||||
*
|
||||
* @return the children advancements
|
||||
*/
|
||||
@NotNull
|
||||
@org.jetbrains.annotations.Unmodifiable
|
||||
Collection<Advancement> getChildren();
|
||||
|
||||
/**
|
||||
* Gets the root advancement of the tree this is located in.
|
||||
*
|
||||
* @return the root advancement
|
||||
*/
|
||||
@NotNull
|
||||
Advancement getRoot();
|
||||
// Paper end
|
||||
}
|
||||
|
@ -5,7 +5,10 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Holds information about how the advancement is displayed by the game.
|
||||
*
|
||||
* @deprecated use {@link io.papermc.paper.advancement.AdvancementDisplay}
|
||||
*/
|
||||
@Deprecated(forRemoval = true) // Paper
|
||||
public interface AdvancementDisplay {
|
||||
|
||||
/**
|
||||
|
@ -8,7 +8,9 @@ import org.jetbrains.annotations.NotNull;
|
||||
*
|
||||
* This enum contains information about these types and how they are
|
||||
* represented.
|
||||
* @deprecated use {@link io.papermc.paper.advancement.AdvancementDisplay.Frame}
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public enum AdvancementDisplayType {
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user