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。
相关条目