创建文本
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]
的目标是每个处于冒险模式的在线玩家。当调用该方法时,方法将返回包含处于冒险模式的每个在线玩家的用户名的文本。