書本閱覽

BookView 用于表示客户端中的一本成书的 GUI 界面。 BookView 并不和一个实际的 ItemStack 相关联,而是只用于以一本成书的方式向玩家展示预先准备好的 Component 。需要注意 BookView 是只读的,因为不可能告诉客户端打开一本未签名的书。

要创建一个 BookView ,我们只需要通过 BookView#builder() 方法获取一个 BookView.Builder 。然后我们可以指定标题,作者和 BookView 的每一页。接着我们必须将其发送至 Viewer 。具体代码如下所示:

import net.kyori.adventure.text.Component;
import org.spongepowered.api.effect.Viewer;
import org.spongepowered.api.text.BookView;

BookView bookView = BookView.builder()
        .title(Component.text("Story Mode"))
        .author(Component.text("Notch"))
        .addPage(Component.text("There once was a Steve..."))
        .build();
viewer.sendBookView(bookView);

这将在客户端显示一本包含有一页通过 BookView.Builder#addPage(Component) 方法指定的文本的书。当然,你其实并不需要为每一页调用 addPage(Component) 方法。 BookView.Builder 类实现了 BookView.Builder#addPages(Collection<Component>) 方法用于添加多个 Component

BookView.Builder 类还提供了 BookView.Builder#insertPage(int, Component) 和相应的 BookView.Builder#insertPages(int, Collection<Component>) 两个方法,用于在任何给定的索引处插入一页或几页。

你还可以通过指定从页面提供的 Component 或指定要删除的页面的索引来删除 BookView 的页面。你只需要使用对应的 BookView.Builder#removePage(Component)BookView.Builder#removePage(int) 、或者 BookView.Builder#removePages(Collection<Component>) 方法。