Der Pagination-Service

Tipp

Zum grundsätzlichen Verstehen von Services lies bitte zuerst Dienste.

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.

Pagination List Builder

First obtain an instance of a PaginationList.Builder:

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

PaginationList.Builder builder = PaginationList.builder();

Es gibt zwei verschiedene Wege zum Festlegen der Inhalte einer Pagination:

  • 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);

Bemerkung

If the Iterable is a List, then bidirectional navigation is supported. Otherwise, only forwards navigation is supported.

  • With an array of Components

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

You can also specify various other components of a paginated list, such as a title, header, footer, and padding. The diagram below shows which component is displayed in each part of the paginated list. In the following diagram, the padding string is shown as the letter p.

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

To achieve the preceding output, we might use the following builder pattern:

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"));

Bemerkung

Mit Ausnahme der Inhalte sind alle Komponenten der nummerierten Liste optional. Ein Titel wird jedoch dringend empfohlen.

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);