分页

小技巧

为了保证你已对服务(Service)这一概念有了基本的了解,请先保证你已了解 服务 中的内容。

PaginationService 用于把一段文本拆成离散的页面内容。这一服务提供了一个 PaginationList.Builder 用于指定页面的标题、内容、页眉、填充等属性。这是一项 Sponge 特有特性,

分页生成器

首先我们先获取到一个 PaginationList.Builder 的实例:

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

PaginationList.Builder builder = PaginationList.builder();

有两种方式指定分页列表的内容:

  • 使用 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 ,那么这一分页支持双向导航,否则只支持单向导航。

  • 使用 Component 数组

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

备注

除了内容,分页列表中的所有组件都是可选的。但是,标题是强烈建议添加的。

最后,要将分页列表发送给玩家或另一个 :javadoc:`Audience' 类对象,请使用 :javadoc:`PaginationList.Builder#sendTo(Audience)`

就是这样! 回顾一下,可以使用以下代码生成功能完整的分页列表并发送到之前定义的 msgReceiver

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