ZipLoader
基本信息
| 属性 | 值 |
|---|---|
| 类名 | mantle.books.external.ZipLoader |
| 类型 | class,3 个 public 方法 |
| 入口 | loadZip(File) → BookData |
| 触发点 | CoreConfig.loadBookLocations() 扫 config/SlimeKnights/*.zip |
| 启用版本 | 1.7.10 |
功能
外部书籍机制:运行时扫描配置目录下的 zip,把打包好的书页解析成 BookData
并注册进 BookDataStore。这样 mod 作者不用重新打包 jar 就能更新书本内容。
实现要点
loadZip是唯一的实质方法(229 行),解析 zip 内的 xml / json 页面描述。isImage(String ext)判断文件扩展名是否为图片——图片页从 zip 里抽出交给MantleClientRegistry.imageCache。getISArray(JsonArray a)把 json 数组转成ItemStack[]。- ⚠️ 缺陷:
CoreConfig.loadBookLocations直接configFolder.listFiles()未判空,若配置目录不可读会 NPE。 - 本 mod 自带的示例书籍在
src/main/resources/assets/mantle/manuals/test.xml,但loadBookLocations只扫config/SlimeKnights/下的 zip,不会加载 resources 里的这个 xml——它由BookDataStore.addBook那条测试书路径间接体现。
相关条目
- CoreConfig - 调用方
- BookData -
loadZip的返回类型 - BookDataStore - 注册落点
- BookLoad - 解析中间产物
- MantleClientRegistry - 图片缓存