From 9daaf56ad0052b2f1525b10b5300d6c25ee2bf0b Mon Sep 17 00:00:00 2001 From: Aya <31237389+tal5@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:46:14 +0100 Subject: [PATCH] Allow reading style values from builders --- .../text/AbstractComponentBuilder.java | 49 ++++++++++++ .../adventure/text/ComponentBuilder.java | 79 ++++++++++++++++++- .../kyori/adventure/text/format/Style.java | 77 +++++++++++++++++- .../adventure/text/format/StyleImpl.java | 46 +++++++++++ 4 files changed, 249 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/net/kyori/adventure/text/AbstractComponentBuilder.java b/api/src/main/java/net/kyori/adventure/text/AbstractComponentBuilder.java index 300ab50e65..09d185fc8b 100644 --- a/api/src/main/java/net/kyori/adventure/text/AbstractComponentBuilder.java +++ b/api/src/main/java/net/kyori/adventure/text/AbstractComponentBuilder.java @@ -27,18 +27,22 @@ import java.util.Collections; import java.util.List; import java.util.ListIterator; +import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.event.HoverEventSource; +import net.kyori.adventure.text.format.ShadowColor; import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.util.ARGBLike; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import static java.util.Objects.requireNonNull; @@ -216,6 +220,11 @@ private void prepareChildren() { return (B) this; } + @Override + public @Nullable Key font() { + return this.styleBuilder().font(); + } + @Override @SuppressWarnings("unchecked") public @NotNull B font(final @Nullable Key font) { @@ -223,6 +232,11 @@ private void prepareChildren() { return (B) this; } + @Override + public @Nullable TextColor color() { + return this.styleBuilder().color(); + } + @Override @SuppressWarnings("unchecked") public @NotNull B color(final @Nullable TextColor color) { @@ -237,6 +251,11 @@ private void prepareChildren() { return (B) this; } + @Override + public @Nullable ShadowColor shadowColor() { + return this.styleBuilder().shadowColor(); + } + @Override @SuppressWarnings("unchecked") public @NotNull B shadowColor(final @Nullable ARGBLike argb) { @@ -251,6 +270,21 @@ private void prepareChildren() { return (B) this; } + @Override + public TextDecoration.@NotNull State decoration(final @NotNull TextDecoration decoration) { + return this.styleBuilder().decoration(decoration); + } + + @Override + public @Unmodifiable @NotNull Map decorations() { + return this.styleBuilder().decorations(); + } + + @Override + public boolean hasDecoration(final @NotNull TextDecoration decoration) { + return this.styleBuilder().hasDecoration(decoration); + } + @Override @SuppressWarnings("unchecked") public @NotNull B decoration(final @NotNull TextDecoration decoration, final TextDecoration.@NotNull State state) { @@ -265,6 +299,11 @@ private void prepareChildren() { return (B) this; } + @Override + public @Nullable ClickEvent clickEvent() { + return this.styleBuilder().clickEvent(); + } + @Override @SuppressWarnings("unchecked") public @NotNull B clickEvent(final @Nullable ClickEvent event) { @@ -272,6 +311,11 @@ private void prepareChildren() { return (B) this; } + @Override + public @Nullable HoverEvent hoverEvent() { + return this.styleBuilder().hoverEvent(); + } + @Override @SuppressWarnings("unchecked") public @NotNull B hoverEvent(final @Nullable HoverEventSource source) { @@ -279,6 +323,11 @@ private void prepareChildren() { return (B) this; } + @Override + public @Nullable String insertion() { + return this.styleBuilder().insertion(); + } + @Override @SuppressWarnings("unchecked") public @NotNull B insertion(final @Nullable String insertion) { 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 85b0848ea7..3fa20485c8 100644 --- a/api/src/main/java/net/kyori/adventure/text/ComponentBuilder.java +++ b/api/src/main/java/net/kyori/adventure/text/ComponentBuilder.java @@ -31,9 +31,12 @@ import net.kyori.adventure.builder.AbstractBuilder; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.event.HoverEventSource; import net.kyori.adventure.text.format.MutableStyleSetter; +import net.kyori.adventure.text.format.ShadowColor; import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.StyleGetter; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.util.Buildable; @@ -41,6 +44,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; /** * A component builder. @@ -50,7 +54,7 @@ * @since 4.0.0 */ @ApiStatus.NonExtendable -public interface ComponentBuilder, B extends ComponentBuilder> extends AbstractBuilder, Buildable.Builder, ComponentBuilderApplicable, ComponentLike, MutableStyleSetter { +public interface ComponentBuilder, B extends ComponentBuilder> extends AbstractBuilder, Buildable.Builder, ComponentBuilderApplicable, ComponentLike, MutableStyleSetter, StyleGetter { /** * Appends a component to this component. * @@ -209,6 +213,15 @@ public interface ComponentBuilder, B extends @Contract("_ -> this") @NotNull B style(final @NotNull Consumer consumer); + /** + * {@inheritDoc} + * + * @since 4.25.0 + * @sinceMinecraft 1.16 + */ + @Override + @Nullable Key font(); + /** * Sets the font of this component. * @@ -220,6 +233,14 @@ public interface ComponentBuilder, B extends @Override @NotNull B font(final @Nullable Key font); + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + @Nullable TextColor color(); + /** * Sets the color of this component. * @@ -242,6 +263,38 @@ public interface ComponentBuilder, B extends @Override @NotNull B colorIfAbsent(final @Nullable TextColor color); + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + @Nullable ShadowColor shadowColor(); + + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + boolean hasDecoration(final @NotNull TextDecoration decoration); + + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + TextDecoration.@NotNull State decoration(final @NotNull TextDecoration decoration); + + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + @Unmodifiable @NotNull Map decorations(); + /** * Sets the state of a set of decorations to {@code flag} on this component. * @@ -341,6 +394,14 @@ public interface ComponentBuilder, B extends @Override @NotNull B decorationIfAbsent(final @NotNull TextDecoration decoration, final TextDecoration.@NotNull State state); + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + @Nullable ClickEvent clickEvent(); + /** * Sets the click event of this component. * @@ -352,6 +413,14 @@ public interface ComponentBuilder, B extends @Override @NotNull B clickEvent(final @Nullable ClickEvent event); + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + @Nullable HoverEvent hoverEvent(); + /** * Sets the hover event of this component. * @@ -363,6 +432,14 @@ public interface ComponentBuilder, B extends @Override @NotNull B hoverEvent(final @Nullable HoverEventSource source); + /** + * {@inheritDoc} + * + * @since 4.25.0 + */ + @Override + @Nullable String insertion(); + /** * Sets the string to be inserted when this component is shift-clicked. * diff --git a/api/src/main/java/net/kyori/adventure/text/format/Style.java b/api/src/main/java/net/kyori/adventure/text/format/Style.java index 51550f806c..3bc9960182 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/Style.java +++ b/api/src/main/java/net/kyori/adventure/text/format/Style.java @@ -682,7 +682,16 @@ public enum Strategy { * * @since 4.0.0 */ - interface Builder extends AbstractBuilder