diff options
author | Jason <[email protected]> | 2021-04-24 15:16:41 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2021-04-24 18:16:41 -0400 |
commit | db464b099e4bce384fdf7cb36994b3f555c7690a (patch) | |
tree | bf0552bd47bad3c2ecf8118ba90851e38b4b97ff /Paper-MojangAPI | |
parent | 4047cffca8780231b7a38f285480e3f2875863f3 (diff) | |
download | Paper-db464b099e4bce384fdf7cb36994b3f555c7690a.tar.gz Paper-db464b099e4bce384fdf7cb36994b3f555c7690a.zip |
Implement methods to convert between Component and Brigadier's Message (#5542)
Diffstat (limited to 'Paper-MojangAPI')
-rw-r--r-- | Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadier.java | 42 | ||||
-rw-r--r-- | Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadierProvider.java | 30 |
2 files changed, 72 insertions, 0 deletions
diff --git a/Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadier.java b/Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadier.java new file mode 100644 index 0000000000..1ed5a6d271 --- /dev/null +++ b/Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadier.java @@ -0,0 +1,42 @@ +package io.papermc.paper.brigadier; + +import com.mojang.brigadier.Message; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentLike; +import net.kyori.adventure.text.TextComponent; +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * Helper methods to bridge the gaps between Brigadier and Paper-MojangAPI. + */ +public final class PaperBrigadier { + private PaperBrigadier() { + throw new RuntimeException("PaperBrigadier is not to be instantiated!"); + } + + /** + * Create a new Brigadier {@link Message} from a {@link ComponentLike}. + * + * <p>Mostly useful for creating rich suggestion tooltips in combination with other Paper-MojangAPI APIs.</p> + * + * @param componentLike The {@link ComponentLike} to use for the {@link Message} contents + * @return A new Brigadier {@link Message} + */ + public static @NonNull Message message(final @NonNull ComponentLike componentLike) { + return PaperBrigadierProvider.instance().message(componentLike); + } + + /** + * Create a new {@link Component} from a Brigadier {@link Message}. + * + * <p>If the {@link Message} was created from a {@link Component}, it will simply be + * converted back, otherwise a new {@link TextComponent} will be created with the + * content of {@link Message#getString()}</p> + * + * @param message The {@link Message} to create a {@link Component} from + * @return The created {@link Component} + */ + public static @NonNull Component componentFromMessage(final @NonNull Message message) { + return PaperBrigadierProvider.instance().componentFromMessage(message); + } +} diff --git a/Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadierProvider.java b/Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadierProvider.java new file mode 100644 index 0000000000..7f24806384 --- /dev/null +++ b/Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadierProvider.java @@ -0,0 +1,30 @@ +package io.papermc.paper.brigadier; + +import com.mojang.brigadier.Message; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentLike; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.NonNull; + +import static java.util.Objects.requireNonNull; + +interface PaperBrigadierProvider { + final class Holder { + private static @MonotonicNonNull PaperBrigadierProvider INSTANCE; + } + + static @NonNull PaperBrigadierProvider instance() { + return requireNonNull(Holder.INSTANCE, "PaperBrigadierProvider has not yet been initialized!"); + } + + static void initialize(final @NonNull PaperBrigadierProvider instance) { + if (Holder.INSTANCE != null) { + throw new IllegalStateException("PaperBrigadierProvider has already been initialized!"); + } + Holder.INSTANCE = instance; + } + + @NonNull Message message(@NonNull ComponentLike componentLike); + + @NonNull Component componentFromMessage(@NonNull Message message); +} |