成书

BookView 用于表示客户端中的一本成书的 GUI 界面。 BookView 并不和一个实际的 ItemStack 相关联,而是只用于以一本成书的方式向玩家展示预先准备好的 Text 。注意到 BookView 是只读的,因为还没有什么办法只通过服务端的方式向客户端打开一本可以编辑的书。

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

import org.spongepowered.api.effect.Viewer;
import org.spongepowered.api.text.BookView;
import org.spongepowered.api.text.Text;

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

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

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

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