Создание текста

Formatted text can be created using Component factories as described in this section. The robust text API can be used in a variety of ways to combine styling, coloring, and actions.

Неформатированный текст

Oftentimes, all you need is unformatted text. Unformatted text is the simplest form of text to create.

Пример:

import net.kyori.adventure.text.Component;

Component unformattedText = Component.text("Hey! This is unformatted text!");

Вышеприведенный код вернет неокрашенный, неформатированный текст без действий.

Formatted Text

The Component interface allows for the creation of formatted text in a «building-block» style. Components in Adventure act like builders where any Component can be amended with colors, decorations, etc. Components are immutable, so using these builder-like methods will create a copy each time. There is no need to call .build() at the end, unlike with Sponge’s previous Text API from API 7 and below.

Совет

Прочтите эту вики-статью для справки, и понимания работы шаблонного проектирования в разработке программного обеспечения.

Цвета

Одним из способов применения текстового API является окрашивание текста, как показано ниже.

Пример: Цветной текст

import net.kyori.adventure.text.format.NamedTextColor;

Component coloredText = Component.text("Woot! Golden text is golden.", NamedTextColor.GOLD);

Любой из цветов Minecraft, указанный в классах NamedTextColor и TextColor, пригоден для окрашивания текста в строго-заданные и RGB-цвета соответственно. К уже существующему тексту можно добавлять дополнительное содержание, каждое окрашенное по-своему.

Пример: Разноцветный текст

import net.kyori.adventure.text.format.TextColor;

Component multiColoredText = Component.text("Sponges are ", NamedTextColor.YELLOW).append(
        Component.text("invincible!", TextColor.color(0x5fb0ff)));

Стилизация

Данное API также может использоваться для стилизации текста, включая подчёркивание, выделение курсивом, и т. д. В библиотеке Adventure это называется «декорированием».

Пример: Стилизованный текст

import net.kyori.adventure.text.format.TextDecoration;

Component styledText = Component.text("Yay! Styled text!").decorate(TextDecoration.ITALIC);
Component shortcutText = Component.text("Shortcut for both!", NamedTextColor.GRAY, TextDecoration.UNDERLINE);

Так же, как и с цветами, можно использовать несколько стилей, путем объединения отдельно стилизованные тексты.

Пример: Много-стилизованный текст

Component multiStyledText = Component.text("I'm italicized! ").decorate(TextDecoration.ITALIC)
        .append(Component.text("I'm bold!").decorate(TextDecoration.BOLD));

Текстовые события

Components also offer the ability to create actions for text. Any action within the HoverEvent or ClickEvent classes can be used when creating text actions for text. Sponge provides additional actions in SpongeComponents. The method below is a small example of what text actions can do.

Example: Text with an Event

import net.kyori.adventure.text.event.ClickEvent;

Component clickableText = Component.text("Click here!")
    .clickEvent(ClickEvent.runCommand("tell Spongesquad I'm ready!"));

Component callbackText = Component.text("Click here too!")
    .clickEvent(SpongeComponents.executeCallback(
        cause -> cause.audience().sendMessage(Component.text("You clicked!"))));

В этом примере игроки могут нажать на текст «Click here!» для выполнения назначенной команды.

Примечание

Some text actions, such as ClickEvent#changePage(int), can only be used with book items.

Совет

Так же, как с цветом, в тексте можно добавить несколько действий. Действия могут быть использованы вместе с цветом.

Селекторы

Селекторы используются, чтобы указать сущностей (в том числе и игроков), которые отвечают определённым условиям. Селекторы особенно полезны при создании плагинов для мини-игр, но имеют широкий спектр применения.

Совет

Read this Minecraft wiki article for help understanding what target selectors are in Minecraft, and how to use them.

To use selectors in text, there is a component factory for Selectors. This is illustrated in the example below.

Пример: Текст с селектором

Component adventurers = Component.text("These players are in adventure mode: ")
        .append(Component.selector("@a[m=2]"));

In this example, the target selector @a[m=2] is targeting every online player who is in adventure mode. When the method is called, a Component will be returned with a selector of all the usernames of every online player who is in adventure mode. To send this selector to players, the selector will have to be expanded to the real usernames using SpongeComponents#resolve.

Text Builders

Mutable builder classes exist for every kind of Component. These are available should you need a mutable representation, and they are also used in a few convenience methods throughout the library to expose parts of an existing Component for editing.

Example: Text Component builder

Component weBuiltThisText = Component.text()
        .content("with Sponge and Flard")
        .color(NamedTextColor.YELLOW)
        .decorate(TextDecoration.ITALIC, TextDecoration.BOLD)
        .build()

Example: Editing text with a StyleBuilder

Component limitedEdition = weBuiltThisText.style(
        styleBuilder -> styleBuilder.decorate(TextDecoration.UNDERLINE));