自定义书本
书本作为一种物品,主要供玩家浏览信息。通过自定义书本系统,开发者可以提供书本界面供玩家以翻书的方式获取知识、查看攻略或教程。自定义书本支持 JSON 数据驱动的基础书本,也支持通过脚本拓展书本的样式和交互功能。
Demo
参考官方示例 CustomBookMod 了解自定义书本的完整实现,包含基础书本、脚本书本、自定义页面与组件。
概述
自定义书本系统采用三级层级结构:书本 → 目录 → 章节。章节包含实际的内容页面,目录包含多个章节,书本包含多个目录。
主要特性:
- 通过 JSON 配置书本结构(书本、目录、章节)
- 内置多种页面类型(文本页、图片页、实体展示页、合成表页等)
- 支持通过脚本自定义页面类型和组件
- 支持页面间跳转(含章节内、跨章节、跨目录跳转)
- 支持章节锁定与解锁机制
待补充:书本系统与自定义物品的关联说明。
基础书本配置
目录结构
behavior_pack/
└── customBooks/
└── myBook/ # 书本文件夹(名称即为书本 identifier)
├── book.json # 书本基础信息
├── category/ # 目录 JSON 文件
└── entry/ # 章节 JSON 文件book.json
book.json 描述书本的基础信息,包括关联物品和首页排版:
{
"item": "mymod:my_book_item",
"title1": "书本主标题",
"title2": "副标题",
"content": "首页内容描述文本",
"titleArea": {
"offset": [-10, 0],
"textSize1": 9,
"textSize2": 8,
"padding": 1
}
}| 字段 | 说明 |
|---|---|
item | 关联的自定义物品 identifier |
title1 | 首页主标题 |
title2 | 首页副标题 |
content | 首页内容文本 |
titleArea | 标题区域排版属性 |
前置条件
使用自定义书本前,需要先在 netease_items_res/ 中注册对应的自定义物品。
待补充:目录 JSON 与章节 JSON 的完整格式说明。
脚本书本
书本界面本质上是一个 ScreenNode 控件,可以通过 ModSDK 接口获取并操作:
import mod.client.extraClientApi as clientApi
node = clientApi.GetUI("BookMod", "book_screen.main")通过脚本可以实现:
- 自定义页面类型(继承
BasePage) - 自定义组件(继承
BaseComp) - 动态修改页面内容
- 响应用户交互事件
待补充:自定义页面注册流程与数据流向说明。
书本组件 API
所有书本组件继承自 BaseComp 基类,将数据和 UI 控件对象封装在一起。
核心方法
| 方法 | 说明 |
|---|---|
__init__ | 初始化组件,注册组件名称和 UI 根节点 |
Show | 显示组件 |
Hide | 隐藏组件 |
Reset | 重置组件状态(可回收模式下必须重写) |
SetData | 设置组件显示数据 |
组件回收
开启组件可回收(recycled=True)可提高 UI 渲染性能,但需要重写 Reset 方法处理属性重置。
待补充:内置组件(TextComp、ImageComp 等)的详细 API。
翻页 API
所有书本页面继承自 BasePage 基类,负责排版页内的组件。
核心方法
| 方法 | 说明 |
|---|---|
__init__ | 初始化页面(可设置 size 和 position) |
Show | 显示页面,依次调用页内组件的 Show 方法 |
AddComps | 将组件添加至页面 |
待补充:内置页面类型(TextPage、ImagePage、EntityPage 等)的详细说明。
通用脚本对象
书本系统提供 Book、Category、Entry 三种页面组对象(均继承自 PageGroup),用于管理页面的层级关系和跳转。
页面跳转
支持通过绝对路径和相对路径进行页面跳转:
- 绝对路径:以
/开头,如/Book1/Category1/Entry1/2 - 相对路径:不以
/开头,基于当前页面组拼接,如2
跳转范围
支持同章节内、跨章节、同目录内、跨目录的页面跳转,但不支持不同书本之间的跳转。
待补充:To、Back 等跳转方法的 API 说明。
完整示例
待补充:一个包含基础书本配置和脚本自定义页面的完整示例。
