aboutsummaryrefslogtreecommitdiffhomepage
path: root/Paper-MojangAPI
diff options
context:
space:
mode:
authorJason <[email protected]>2021-04-24 15:16:41 -0700
committerGitHub <[email protected]>2021-04-24 18:16:41 -0400
commitdb464b099e4bce384fdf7cb36994b3f555c7690a (patch)
treebf0552bd47bad3c2ecf8118ba90851e38b4b97ff /Paper-MojangAPI
parent4047cffca8780231b7a38f285480e3f2875863f3 (diff)
downloadPaper-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.java42
-rw-r--r--Paper-MojangAPI/src/main/java/io/papermc/paper/brigadier/PaperBrigadierProvider.java30
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);
+}