格式化与原生字符串

文本可以通过使用一个特殊字符表示 某种类型的 格式,紧随该特殊字符后的文字将应用对应的特殊格式。在 SpongeAPI 中,分别有两种默认支持的表示特殊格式的字符: & 和 § 。

可以在 Minecraft Wiki 中找到这两种字符对应的特殊格式是怎样的。需要注意的一点是, Minecraft Wiki 只描述了 § 字符的使用,实际上使用 & 字符表示的特殊格式是完全一样的。

警告

通过这种方式进行格式化的文本字符串只能附加 Text 的部分功能,也就是样式。它不能用于嵌入任何的点击或者鼠标悬停操作。如有需要(如在聊天界面中),我们建议使用 XML 格式 或者 JSON 格式

使用 & 符号格式化

默认情况下, Sponge 支持使用 & 符号格式化。使用 & 符号可以允许用户更容易地输入格式化的文本,因为在一些诸如 Minecraft 游戏控制台等情况下,有必要提供简洁的方式输入格式化的文本。

如果想要得到以这种方式格式化的字符串,你可以通过获取相应的 TextSerializer ,也就是 TextSerializers#FORMATTING_CODE ,并分别通过调用其名为 serialize 或者 deserialize 方法来实现格式化的字符串和 Text 的转换。

import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColors;
import org.spongepowered.api.text.format.TextStyles;
import org.spongepowered.api.text.serializer.TextSerializers;

Text text = Text.of(TextColors.RED, TextStyles.UNDERLINE, "Hello World!");
String ampersandFormattedText = TextSerializers.FORMATTING_CODE.serialize(text);

作为示例,文本 「Hello World!」 被附加上了红色和下划线的格式,那么将有如下形式的格式化字符串代表它: &c&nHello World!

原生字符串

原生字符串是广泛用于旧版本的 Minecraft 中的格式化字符串表现形式,其对应的特殊字符是 §仅仅是为了向前兼容 , Sponge 提供了对原生字符串的序列化和反序列化方式,换句话说,不到万不得已就不应使用它。相反,我们强烈建议使用上面提到的 & 字符。和使用 & 字符的字符串不同,原生字符串有着一些限制,最明显的限制就是用户不能在聊天命令行中输入 § 这一字符。

如果想要得到以这种方式格式化的字符串,你可以通过获取相应的 TextSerializer ,也就是 TextSerializers#LEGACY_FORMATTING_CODE ,并分别通过调用其名为 serialize 或者 deserialize 方法来实现原生字符串和 Text 的转换。

Text text = Text.of(TextColors.RED, TextStyles.UNDERLINE, "Hello World!");
String legacyText = TextSerializers.LEGACY_FORMATTING_CODE.serialize(text);

作为示例,文本 「Hello World!」 被附加上了红色和下划线的格式,那么将有如下形式的原生字符串代表它: §c§nHello World!

小訣竅

你可以通过调用 TextSerializers#formattingCode(char) 方法,传入一个字符以获取一个 FormattingCodeTextSerializer 用于自定义特殊字符使用什么,虽然我们不建议你使用这一方法。