创建文本

带格式的文本可以使用本节所述的 Component 工厂,强大的文本 API 可用于多种方式组合样式、着色和动作。

无格式文本

通常,您需要的都是无格式文本,无格式文本是最容易创建的文本形式。

示例:

import net.kyori.adventure.text.Component;

Component unformattedText = Component.text("Hey! This is unformatted text!");

上面所示的代码将返回没有颜色,未格式化的文本,其中也没有 text actions

带格式文本

组件接口使用“构件”风格创建带格式文本。 Adventure 中的组件像生成器一样,可以使用颜色、装饰等修改任何组件。 组件是不可变的,因此使用这些像生成器一样的方法将每次都会创建一个副本。 不需要在末尾调用 .build() ,与 Sponge 在 API 7 及以下的文本 API 不同

小訣竅

请参阅这篇 维基百科文章 以帮助理解软件设计中生成器模式的目的。

颜色

文本 API 的一个用途是将颜色添加到文本,如下所示。

示例︰ 彩色的文本

import net.kyori.adventure.text.format.NamedTextColor;

Component coloredText = Component.text("Woot! Golden text is golden.", NamedTextColor.GOLD);

在对文本进行着色时,可以使用 NamedTextColor 类中指定的任何 Minecraft 颜色,或通过 TextColor 使用 RGB 颜色。通过附加不同的文本,可以在文本中使用多种颜色:

示例︰ 多种颜色的文本

import net.kyori.adventure.text.format.TextColor;

Component multiColoredText = Component.text("Sponges are ", NamedTextColor.YELLOW).append(
        Component.text("invincible!", TextColor.color(0x5fb0ff)));

样式

API 也可以用来设置文本样式,包括下划线、斜体等。这在 Adventure 库中被称为“装饰”。

示例︰ 添加了样式的文本

import net.kyori.adventure.text.format.TextDecoration;

Component styledText = Component.text("Yay! Styled text!").decorate(TextDecoration.ITALIC);
Component shortcutText = Component.text("Shortcut for both!", NamedTextColor.GRAY, TextDecoration.UNDERLINE);

与颜色一样,可以通过将单独的样式文本链接在一起来使用多种样式。

示例︰ 多种样式的文本

Component multiStyledText = Component.text("I'm italicized! ").decorate(TextDecoration.ITALIC)
        .append(Component.text("I'm bold!").decorate(TextDecoration.BOLD));

文本事件

组件还提供了创建文本动作的功能,HoverEventClickEvent 中的任一动作都可以用于为文本创建文本动作。下面是一个小例子用于说明文本动作可以做什么。

示例:拥有事件的文本

import net.kyori.adventure.text.event.ClickEvent;

Component clickableText = Component.text("Click here!")
    .clickEvent(ClickEvent.runCommand("tell Spongesquad I'm ready!"));

Component callbackText = Component.text("Click here too!")
    .clickEvent(SpongeComponents.executeCallback(
        cause -> cause.audience().sendMessage(Component.text("You clicked!"))));

在上面的示例中,玩家可以通过点击“Click here!”文本以运行指定的命令。

備註

部分文本动作,例如 ClickEvent#changePage(int) 只能用于书本中。

小訣竅

和颜色一样,可以将多个文本行为附加到文本。文本生成器甚至允许你将文本行为与颜色一起使用。

选择器

目标选择器用于定位满足特定条件的玩家或实体。目标选择器不仅特别适用于创建小游戏插件,而且还适用于其他广阔的应用范围。

小訣竅

Read this Minecraft wiki article for help understanding what target selectors are in Minecraft, and how to use them.

要在文本中使用选择器,有一个用于选择器的组件工厂,这在下面的示例中进行了说明。

示例︰根据选择器生成的文本

Component adventurers = Component.text("These players are in adventure mode: ")
        .append(Component.selector("@a[m=2]"));

在此示例中,目标选择器 @a[m=2] 针对处于探险模式的每个在线玩家。 当方法被调用时, 将返回一个包含处于探险模式的所有在线玩家的用户名选择器的组件。 若要将此选择器发送给玩家,则必须使用 SpongeComponents#resolve 将选择器扩展为真正的用户名。

文本生成器

所有类型的 Component 都有可变的生成器类, 如果您需要可变的表示形式,则可以使用这些方法,并且在整个库中的一些便捷的方法中也可以使用这些方法来暴露现有组件的各个部分以进行编辑。

示例:文本组件生成器

Component weBuiltThisText = Component.text()
        .content("with Sponge and Flard")
        .color(NamedTextColor.YELLOW)
        .decorate(TextDecoration.ITALIC, TextDecoration.BOLD)
        .build()

示例:使用 StyleBuilder 编辑文本

Component limitedEdition = weBuiltThisText.style(
        styleBuilder -> styleBuilder.decorate(TextDecoration.UNDERLINE));