diff --git a/api/src/main/java/net/kyori/adventure/text/VirtualComponentRenderer.java b/api/src/main/java/net/kyori/adventure/text/VirtualComponentRenderer.java index 4c8b135f1..35b0c2bc8 100644 --- a/api/src/main/java/net/kyori/adventure/text/VirtualComponentRenderer.java +++ b/api/src/main/java/net/kyori/adventure/text/VirtualComponentRenderer.java @@ -52,4 +52,15 @@ public interface VirtualComponentRenderer { default String fallbackString() { return ""; } + + /** + * Checks if a {@link VirtualComponent} should be skipped when being rendered through a {@link net.kyori.adventure.text.renderer.TranslatableComponentRenderer} when used as an argument. + * + * @param component the component + * @return {@code true} to skip rendering, or {@code false} to render + * @since 5.2.1 + */ + default boolean skipRenderingWhenUsedAsTranslationArgument(final VirtualComponent component) { + return false; + } } diff --git a/api/src/main/java/net/kyori/adventure/text/renderer/TranslatableComponentRenderer.java b/api/src/main/java/net/kyori/adventure/text/renderer/TranslatableComponentRenderer.java index 053b57860..c5c9119e8 100644 --- a/api/src/main/java/net/kyori/adventure/text/renderer/TranslatableComponentRenderer.java +++ b/api/src/main/java/net/kyori/adventure/text/renderer/TranslatableComponentRenderer.java @@ -209,7 +209,7 @@ protected Component renderTranslatable(TranslatableComponent component, final C final List translatedArguments = new ArrayList<>(arguments); for (int i = 0; i < translatedArguments.size(); i++) { final TranslationArgument arg = translatedArguments.get(i); - if (arg.value() instanceof Component && !(arg.value() instanceof VirtualComponent)) { + if (arg.value() instanceof Component && !(arg.value() instanceof final VirtualComponent virtual && virtual.renderer().skipRenderingWhenUsedAsTranslationArgument(virtual))) { translatedArguments.set(i, TranslationArgument.component(this.render((Component) arg.value(), context))); } } diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorArgument.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorArgument.java index 553b0f5e2..dd56e20fd 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorArgument.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorArgument.java @@ -25,6 +25,7 @@ import java.util.Objects; import net.kyori.adventure.text.ComponentLike; +import net.kyori.adventure.text.VirtualComponent; import net.kyori.adventure.text.VirtualComponentRenderer; import net.kyori.adventure.text.minimessage.internal.TagInternals; import net.kyori.adventure.text.minimessage.tag.TagPattern; @@ -48,4 +49,9 @@ record MiniMessageTranslatorArgument(String name, T data) implements VirtualC return null; } } + + @Override + public boolean skipRenderingWhenUsedAsTranslationArgument(final VirtualComponent component) { + return true; + } } diff --git a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorTarget.java b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorTarget.java index e8019d978..662b86d38 100644 --- a/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorTarget.java +++ b/text-minimessage/src/main/java/net/kyori/adventure/text/minimessage/translation/MiniMessageTranslatorTarget.java @@ -25,6 +25,7 @@ import net.kyori.adventure.pointer.Pointered; import net.kyori.adventure.text.ComponentLike; +import net.kyori.adventure.text.VirtualComponent; import net.kyori.adventure.text.VirtualComponentRenderer; import org.jetbrains.annotations.UnknownNullability; @@ -34,4 +35,9 @@ record MiniMessageTranslatorTarget(Pointered pointered) implements VirtualCompon public @UnknownNullability ComponentLike apply(final Void context) { return null; } + + @Override + public boolean skipRenderingWhenUsedAsTranslationArgument(final VirtualComponent component) { + return true; + } }