检索和解析占位符
获取一个占位符解析器
PlaceholderParsers 存储在 Sponge 的注册表,这意味着它可以通过与其他 CatalogType: 一样的方式获取。
Sponge.getRegistry().getType(PlaceholderParser.class, id);
小技巧
请记住 PlaceholderParser
ID 的格式为 pluginid:placeholderid
,例如 sponge:name
.
通过占位符创建文本
一个 PlaceholderParser
需要 :javadoc:`PlaceholderContext`来生成合适的 :javadoc:`Text`对象。``PlaceholderContexts`` 可以使用由 PlaceholderContext#builder() 方法获得的 PlaceholderContext.Builder 创建。
这个 Builder 允许提供以下可选上下文:
一个相关对象,用于占位符调整它的输出(通常是 Player 或其它 MessageReceiver)
一个可以被
PlaceholderParser
解析的参数字符串
生成的 PlaceholderContext
可以通过 Placeholder Parser#parse(PlaceholderContext) 提供给 PlaceholderParser
。
例如,如果你想通过 sponge:name
解析器包含玩家的名字,你可以这样做:
Player player = ...;
// We know this exists
PlaceholderParser parser = Sponge.getRegistry().getType(PlaceholderParser.class, "sponge:name").get();
PlaceholderContext context = PlaceholderContext.builder()
.setAssociatedObject(player)
.build();
Text text = parser.parse(context);
如果玩家的名字是“SpongePlayer”,返回的文本将是 SpongePlayer
在文本中包含占位符
占位符也可以在 Text.of(...)
和 Text.Builder 对象中使用,无需先解析它们。Sponge 提供了一个 PlaceholderText 对象,将一对 PlaceholderParser
和 PlaceholderContext
捆绑在一起作为 :javadoc:`TextPresentable` 。
要创建一个 PlaceholderText
,请使用 PlaceholderText#builder() 并酌情添加 PlaceholderParser
和 PlaceholderContext
对象。然后你可以在 Text
对象中使用内置的 PlaceholderText
。
如果你想使用前一个示例的 Text.of()
中的解析器和上下文,你可以像下面这样写:
PlaceholderText placeholderText = PlaceholderText.builder().setContext(context).setParser(parser).build();
Text result = Text.of("Hello! Your name is ", placeholderText, "!");
文本将是“Hello! Your name is SpongePlayer!”
注解
一个 PlaceholderText
将会在它所处的 Text
被生成、被放入 Text.of(...)
、被添加到 Text.Builder 并且 Text.Builder#build() 被调用之后被解析。