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。
相关条目
- GuideAPIItems -
guideBook引用 - Book - 列表中的元素类型
- ItemGuideBook - 把 metadata 映射为书序号
- ItemLostPage - 用
getIndexOf定位书 - LootGenerator - 遍历
getBookList - BookCreator - 使用
bookBuilder