GuideRegistry

基本信息

属性 值
类名 amerifrance.guideapi.api.GuideRegistry
类型 class,全静态
持有数据 List<Book> bookList(private static)
启用版本 Minecraft 1.7.10

功能

全局的书注册表。第三方 mod 在 preInit 调 registerBook 登记自己的书, 之后全 mod 共用一份有序列表;书的序号即 ItemGuideBook 的 metadata。

方法 说明
registerBook(Book) 追加一本到 bookList
getBook(int index) 按序号取书
getIndexOf(Book) 反查书的序号(List.indexOf)
getSize() 已注册书的数量
isEmpty() 是否一本都没注册
isValidBook(ItemStack) 校验物品栈是否指向一本已注册的书
getItemStackForBook(Book) 生成指向该书的 ItemStack 副本
getBookList() 返回 bookList 的防御性拷贝
bookBuilder public static GsonBuilder,供 BookCreator 使用

实现要点

  • bookList 声明为 private static final(源码写 private static List<Book> bookList = new ArrayList<Book>()), 外部只能经上述方法访问。
  • getBookList() 返回 new ArrayList<Book>(bookList),是快照; 在 postInit 遍历时对列表的修改不会反映到返回值上。
  • isValidBook(stack) 的判据是 stack.getItem() == GuideAPIItems.guideBook && !isEmpty() && stack.getItemDamage() < getSize()。 注意它只判上界不判下界:getItemDamage() 对负值不会通过本方法之外的路径到达, 但源码未做 >= 0 校验。
  • isValidBook 依赖 GuideAPIItems.guideBook 已非 null, 故必须在 ItemsRegistry 之后调用。
  • getBook(int) 不判越界,越界时抛 IndexOutOfBoundsException。

相关条目