格式化与原生字符串
文本可以通过使用一个特殊字符表示某种类型的格式,紧随该特殊字符后的文字将应用对应的特殊格式。在 SpongeAPI 中,分别有两种默认支持的表示特殊格式的字符:& 和 § 。
可以在 Minecraft Wiki 中找到这两种字符对应的特殊格式。有一点需要注意, Minecraft Wiki 只描述了 § 字符的使用,这和使用 & 字符表示的特殊格式实际上完全一样。
警告
如果你使用这种方式格式化文本字符串,那么你只能利用 Text 的文本样式等十分有限的特性。你无法使用这种形式保留鼠标点击和鼠标悬停等特性。如有需要(如在聊天界面中),我们建议使用 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 用于自定义特殊字符使用什么,虽然我们不建议你使用这一方法。