创建文本

Text API 用于创建格式化的文本,可以在聊天消息中发送给玩家,也可以在书籍和告示牌等地方使用。

无格式文本

通常,您需要的是不进行格式化的文本。 无格式文本不需要使用文本生成器(Text Builder),是可以创建的最简单的文本形式。

示例:

import org.spongepowered.api.text.Text;

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

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

文本生成器

文本生成器界面允许以“积木风格”创建格式化文本。

小技巧

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

颜色

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

示例︰ 彩色的文本

import org.spongepowered.api.text.format.TextColors;

Text coloredText = Text.builder("Woot! Golden text is golden.").color(TextColors.GOLD).build();

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

示例︰ 多种颜色的文本

Text multiColoredText = Text.builder("Sponges are ").color(TextColors.YELLOW).append(
        Text.builder("invincible!").color(TextColors.RED).build()).build();

样式

文本生成器还可用于设置文本样式,包括下划线,斜体等。

示例︰ 添加了样式的文本

import org.spongepowered.api.text.format.TextStyles;

Text styledText = Text.builder("Yay! Styled text!").style(TextStyles.ITALIC).build();

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

示例︰ 多种样式的文本

Text multiStyledText = Text.builder("I'm italicized! ").style(TextStyles.ITALIC)
        .append(Text.builder("I'm bold!").style(TextStyles.BOLD).build()).build();

更简便的方式

Text#of(Object…) 方法提供了一种更简洁的方式为你的文本添加颜色和样式。

示例:更简便的方式

Text colorAndStyleText = Text.of(TextColors.RED, TextStyles.ITALIC, "Shortcuts for the win!");

文本行为

文本生成器还提供了创建文本行为的功能。在为文本创建文本行为时,可以使用 TextActions 类中指定的任何操作。下面是一个小例子用于说明文本行为可以做什么。

示例:含有文本行为的文本

import org.spongepowered.api.text.action.TextActions;

Text clickableText = Text.builder("Click here!").onClick(TextActions.runCommand("tell Spongesquad I'm ready!")).build();

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

注解

一些诸如 TextActions#changePage(int) 等文本行为只能用于书本中。

小技巧

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

选择器

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

小技巧

阅读这篇 Minecraft Wiki 文章 以帮助了解 Minecraft 中的目标选择器,以及它们的使用方法。

如果你想要在文本中使用选择器,你必须使用 Selector.Builder 接口。下面的例子将说明这一点。

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

import org.spongepowered.api.text.selector.Selector;

Text adventurers = Text.builder("These players are in adventure mode: ").append(
        Text.of(Selector.parse("@a[m=2]"))
).build();

在这一示例中,目标选择器 @a[m=2] 的目标是每个处于冒险模式的在线玩家。当调用该方法时,方法将返回包含处于冒险模式的每个在线玩家的用户名的文本。