Разбиение на страницы

Совет

Для понимания основ, прочитайте сначала Сервисы.

The PaginationService acts as a way to split up content into discrete pages. The service provides a PaginationList.Builder with which you can specify attributes such as title, contents, header, and padding. This is a Sponge-specific feature.

Строитель разделителя страниц

Сначала получите экземпляр PaginationList.Builder:

import org.spongepowered.api.service.pagination.PaginationList;

PaginationList.Builder builder = PaginationList.builder();

Существует два разных способа указать содержимое нумерованного списка:

  • With an Iterable<Component>

import net.kyori.adventure.text.Component;

import java.util.ArrayList;
import java.util.List;

List<Component> contents = new ArrayList<>();
contents.add(Component.text("Item 1"));
contents.add(Component.text("Item 2"));
contents.add(Component.text("Item 3"));

builder.contents(contents);

Примечание

Если Iterable является List, то поддерживается двунаправленная навигация. В противном случае поддерживается только навигация вперед.

  • With an array of Components

builder.contents(Component.text("Item 1"), Component.text("Item 2"), Component.text("Item 3"));

Вы также можете указать различные другие компоненты разбитого на страницы списка, такие как название, заголовок, нижний колонтитул и отступы. На приведенном ниже примере показано, какой компонент отображается в каждой части разбитого списка. В данном примере строка заполняется буквой p.

pppppppppppppppppppppppp Title pppppppppppppppppppppppp
Header
Item 1
Item 2
Item 3
...
ppppppppppppppppppppppp < 2/3 > ppppppppppppppppppppppp
Footer

Для достижения предыдущего примера, вы можете использовать следующий шаблон билдера:

builder.title(Component.text("Title"))
    .contents(Component.text("Item 1"), Component.text("Item 2"), Component.text("Item 3"))
    .header(Component.text("Header"))
    .footer(Component.text("Footer"))
    .padding(Component.text("p"));

Примечание

Все компоненты разбитого списка, за исключением содержимого, являются необязательными. Тем не менее, название настоятельно рекомендуется.

Finally, to send the paginated list to a player or another Audience-like object, use PaginationList.Builder#sendTo(Audience).

And that’s it! To recap, a fully functional paginated list could be generated and sent to a previously defined msgReceiver using the following code:

PaginationList.builder()
    .title(Component.text("Title"))
    .contents(Component.text("Item 1"), Component.text("Item 2"), Component.text("Item 3"))
    .header(Component.text("Header"))
    .footer(Component.text("Footer"))
    .padding(Component.text("p"))
    .sendTo(msgReceiver);