Retrieving and Parsing Placeholders

Предупреждение

Эти документы были написаны для SpongeAPI 7 и, вероятно, устаревшие. Если вы чувствуете, что вы можете помочь обновить их, пожалуйста, отправьте PR!

Obtaining a PlaceholderParser

PlaceholderParsers are stored in the Sponge registry, meaning they can be obtained the same way as any other CatalogType:

Sponge.getRegistry().getType(PlaceholderParser.class, id);

Совет

Remember that the PlaceholderParser ID is of the form pluginid:placeholderid, for example sponge:name.

Creating Text from a PlaceholderParser

PlaceholderParser требует PlaceholderContext для создания соответствующего ему объекта Component. PlaceholderContexts можно создать с помощью :javadoc:«PlaceholderContext.Builder», полученного вызовом метода :javadoc:«PlaceholderContext#builder()».

The builder allows for the following optional context to be provided:

  • Дополнительный объект, позволяющий плейсхолдеру изменять результирующий текст (обычно это Player или иной объект Audience)

  • An argument string that a PlaceholderParser can parse

A built PlaceholderContext can then be supplied to the PlaceholderParser by using PlaceholderParser#parse(PlaceholderContext).

For example, if you wish to include a player’s name using the sponge:name parser, you could do the following:

Player player = ...;

// We know this exists
PlaceholderParser parser = PlaceholderParsers.NAME;
PlaceholderContext context = PlaceholderContext.builder()
    .associatedObject(player)
    .build();
Component text = parser.parse(context);

If the player name is «SpongePlayer», the returned text will say SpongePlayer

Including Placeholders in Text

Плейсхолдеры также могут быть использованы в объектах Component и ComponentBuilder до их парсинга. Sponge предоставляет :javadoc:объект PlaceholderComponent, который связывает PlaceholderParser и PlaceholderContext.

Чтобы создать PlaceholderComponent воспользуйтесь PlaceholderComponent#builder() и соответственно добавьте PlaceholderParser и PlaceholderContext. Вы можете использовать созданный PlaceholderComponent внутри``Component`` объектов.

Если вы хотите использовать парсер и контекст из предыдущего примера в Component, вы можете воспользоваться следующим кодом:

PlaceholderComponent placeholderText = PlaceholderComponent.builder().context(context).parser(parser).build();
Component result = Component.text("Hello! Your name is ")
    .append(placeholderText)
    .append(Component.text("!"));

The text will say «Hello! Your name is SpongePlayer!»

Примечание

PlaceholderComponent будет обработан, как только он будет добавлен в Component или ComponentBuilder, используя Component#append(Component).