From d0402e7826c9e1f4cffd66f07f990d9e9877e007 Mon Sep 17 00:00:00 2001 From: KingSimon <19822231+KingOfSquares@users.noreply.github.com> Date: Mon, 13 Jun 2022 00:14:04 +0200 Subject: [PATCH] Add convenience methods for appending a newline/space to a component --- .../net/kyori/adventure/text/Component.java | 22 +++++++++++++++++++ .../adventure/text/ComponentBuilder.java | 20 +++++++++++++++++ .../adventure/text/TextComponentTest.java | 20 +++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/api/src/main/java/net/kyori/adventure/text/Component.java b/api/src/main/java/net/kyori/adventure/text/Component.java index 0fe68b69b..434f1bd97 100644 --- a/api/src/main/java/net/kyori/adventure/text/Component.java +++ b/api/src/main/java/net/kyori/adventure/text/Component.java @@ -1733,6 +1733,28 @@ default void detectCycle(final @NotNull Component that) { return this.append(builder.build()); } + /** + * Appends a newline to this component. + * + * @return a component with the newline added + * @since 4.12.0 + */ + @Contract(pure = true) + default @NotNull Component appendNewline() { + return this.append(newline()); + } + + /** + * Appends a space to this component. + * + * @return a component with the space added + * @since 4.12.0 + */ + @Contract(pure = true) + default @NotNull Component appendSpace() { + return this.append(space()); + } + /** * Apply a fallback style for this component and its children. * diff --git a/api/src/main/java/net/kyori/adventure/text/ComponentBuilder.java b/api/src/main/java/net/kyori/adventure/text/ComponentBuilder.java index e79bd8f69..e75493d75 100644 --- a/api/src/main/java/net/kyori/adventure/text/ComponentBuilder.java +++ b/api/src/main/java/net/kyori/adventure/text/ComponentBuilder.java @@ -115,6 +115,26 @@ public interface ComponentBuilder, B extends @Contract("_ -> this") @NotNull B append(final @NotNull Iterable components); + /** + * Appends a newline to this component. + * + * @return this builder + * @since 4.12.0 + */ + default @NotNull B appendNewline() { + return this.append(Component.newline()); + } + + /** + * Appends a space to this component. + * + * @return this builder + * @since 4.12.0 + */ + default @NotNull B appendSpace() { + return this.append(Component.space()); + } + /** * Applies an action to this builder. * diff --git a/api/src/test/java/net/kyori/adventure/text/TextComponentTest.java b/api/src/test/java/net/kyori/adventure/text/TextComponentTest.java index af2ca53ae..8cde0a152 100644 --- a/api/src/test/java/net/kyori/adventure/text/TextComponentTest.java +++ b/api/src/test/java/net/kyori/adventure/text/TextComponentTest.java @@ -166,4 +166,24 @@ void testWrapping() { assertEquals(wrappedItalic.compact(), Component.text("italic").decoration(TextDecoration.ITALIC, true)); assertEquals(wrappedNotItalic.compact(), Component.text("non-italic").decoration(TextDecoration.ITALIC, false)); } + + @Test + void testAppendNewline() { + final Component c0 = Component.text("tuba").appendNewline().append(Component.text("time")); + final Component c1 = Component.text().content("tuba").appendNewline().append(Component.text("time")).build(); + + final Component c0Compact = c0.compact(); + assertEquals(c0Compact, Component.text("tuba\ntime")); + assertEquals(c0Compact, c1.compact()); + } + + @Test + void testAppendSpace() { + final Component c0 = Component.text("tuba").appendSpace().append(Component.text("time")); + final Component c1 = Component.text().content("tuba").appendSpace().append(Component.text("time")).build(); + + final Component c0Compact = c0.compact(); + assertEquals(c0Compact, Component.text("tuba time")); + assertEquals(c0Compact, c1.compact()); + } }