PageBase

基本信息

属性 值
类名 amerifrance.guideapi.api.base.PageBase
类型 class implements IPage
字段 protected boolean unicode
启用版本 Minecraft 1.7.10

功能

IPage 的全空默认实现。除 canSee 外的 6 个接口方法 全部是空方法体,因此子类只需覆写自己关心的部分。

唯一有实际逻辑的方法:canSee

return ((bookStack.hasTagCompound()
            && bookStack.stackTagCompound.getBoolean("CreativeBook"))
        || ItemLostPage.bookHasPage(bookStack,
               GuideRegistry.getIndexOf(book),
               book.categoryList.indexOf(category),
               category.entryList.indexOf(entry),
               guiEntry.pageNumber)
        || !book.isLostBook);

实现要点

  • canSee 的三个条件是或关系:
    1. 物品带 CreativeBook NBT 标记(创造模式给予的完整书);
    2. 玩家已持有对应页面坐标的残页(由 ItemLostPage 的 bookHasPage 判定);
    3. 该书根本不是残页书(!book.isLostBook)。 即:普通书全部可见;残页书需逐页解锁,或用创造模式的书绕过。
  • 三个条件都不判 hasTagCompound 为 null 的安全性: 条件 2 内部的 bookHasPage 会自行检查 hasTagCompound。
  • 另有 setUnicodeFlag(boolean)(@SideOnly(CLIENT))设置 unicode 字段, 该字段供 PageText 等子类决定字体。
  • equals 实现极简:只判 this == o、非 null、同类, 不比较任何字段——所有 PageBase 子类实例只要同类型就判相等。 这直接影响 pageList.indexOf(...) 的查找结果。
  • 本类没有实现 IRecipeRenderer,与 IRecipeRenderer 无关。

相关条目