自定义书本格式与接口¶
本页整理中国版模组SDK自定义书本的文件格式、预置页面、脚本扩展对象和常用接口。该系统属于中国版Python模组SDK和中国版UI体系,不属于国际版附加包、国际版JSON UI或@minecraft/server脚本API。
中国版专用接口
本页中的behavior_pack/customBooks、clientApi.GetBookManager()、BookManager、BasePage和BaseComp均为中国版模组SDK概念。国际版脚本API没有这些对象。
文件结构¶
一本书本对应behavior_pack/customBooks下的一个文件夹。文件夹名是书本标识符。
behavior_packcustomBooksbookNamebook.jsoncategorycategoryName.json
entryentryName.json
| 路径 | 固定性 | 说明 |
|---|---|---|
customBooks | 固定 | 保存全部自定义书本。 |
bookName | 自定义 | 单本书本目录;目录名即书本标识符。 |
book.json | 固定 | 书本首页与默认配置。 |
category | 固定 | 保存目录文件。 |
entry | 固定 | 保存章节文件。 |
book.json¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
item | string | 无 | 打开书本界面的物品标识符。 |
title1 | string | "" | 书本首页主标题。 |
title2 | string | "" | 书本首页副标题。 |
content | string | "" | 书本首页正文。 |
contentTextSize | int | BookConfig.TextSize.content | 首页正文文字大小,系统默认值为10。 |
titleArea | object | 子字段默认值 | 主标题与副标题的排版配置。 |
pageConfig | object | 无 | 页面配置默认值。 |
categoryConfig | object | 无 | 目录配置默认值。 |
entryConfig | object | 无 | 章节配置默认值。 |
titleArea字段:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
offset | array(float) | [-10,0] | 标题整体偏移。 |
textSize1 | int | 9 | 主标题文字大小。 |
textSize2 | int | 8 | 副标题文字大小。 |
padding | int | 1 | 两个标题之间的垂直间隔。 |
目录文件¶
目录文件位于category文件夹。文件名去除.json后即目录标识符。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
title | string | 无 | 目录首页标题。 |
content | string | "" | 目录首页正文。 |
contentTextSize | int | BookConfig.TextSize.content | 目录首页正文文字大小,系统默认值为10。 |
icon | string | BookConfig.Images.categoryDefaultIcon | 目录图标路径。 |
isLocked | bool | false | 是否锁定目录。 |
lockIcon | string | BookConfig.Images.lockBtn_dark | 锁定状态下显示的图标路径。 |
lockMsg | string | "" | 锁定状态下点击目录时显示的提示。为空时显示目录标题。 |
parent | string | 书本 | 父目录标识符。不写时为一级目录。 |
sortnum | int | 无 | 排列优先级,数值越小越靠前。 |
目录可以嵌套。一个目录下的子页组应保持同类;不应让同一目录同时作为子目录和章节的父级。
章节文件¶
章节文件位于entry文件夹。文件名去除.json后即章节标识符。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
title | string | 无 | 章节标题。 |
icon | string | BookConfig.Images.categoryDefaultIcon | 章节图标路径。 |
isLocked | bool | false | 是否锁定章节。 |
lockIcon | string | BookConfig.Images.lockBtn_dark | 锁定状态下显示的图标路径。 |
lockMsg | string | "" | 锁定状态下点击章节时显示的提示。为空时显示章节标题。 |
parent | string | 无 | 所属目录标识符。必须填写。 |
pages | array(object) | 无 | 章节下的页面数组。 |
sortnum | int | 无 | 排列优先级,数值越小越靠前。 |
页面通用字段¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
type | string | 无 | 页面类型。可为预置类型或脚本注册的自定义页面类型。 |
subtitle | string | 无 | 页面副标题。不写时页面内容通常直接置顶;章节首页通常使用章节标题。 |
title | string或object | 无 | TitlePage可使用的标题数据。对象形式可含icon和text。 |
书本界面使用以左上角为原点的UI坐标系,默认界面大小为(268,200)像素。脚本中部分提示或按钮位置使用全局坐标系,即屏幕坐标系。
预置页面类型¶
textPage¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
content | string | "" | 文本内容,支持格式化文本。 |
contentTextSize | int | BookConfig.TextSize.content | 文本字体大小。 |
imagePage¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
image | string | 无 | 图片路径,例如textures/ui/myCustomBook/testImage_1。 |
imageSize | array(float) | [80.0,80.0] | 图片显示大小。 |
info | string | 无 | 图片备注文本。 |
content | string | "" | 正文文本。 |
contentTextSize | int | BookConfig.TextSize.content | 正文文字大小。 |
highlightPage¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
itemData | array(object) | 无 | 轮播物品数据。 |
itemSize | array(float) | [30.0,30.0] | 物品显示大小。 |
info | string | 无 | 备注文本。 |
content | string | "" | 正文文本。 |
contentTextSize | int | BookConfig.TextSize.content | 正文文字大小。 |
itemData元素:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
item | string | 无 | 物品标识符。 |
data | int | 0 | 物品附加值。 |
tableRecipePage¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
recipeId | string | 无 | 合成配方ID,通常为输出物品标识符。仍需要配置。 |
recipeShapeId | string | 无 | 配方JSON的identifier字段。与recipeId同时存在时优先使用。 |
tag | string | crafting_table | 配方标签。支持工作台、自定义工作台、制图台和切石机配方。 |
recipeSize | array(float) | [90.0,48.0] | 合成表显示大小。 |
aux | int | 0 | 合成物品附加值。 |
info | string | 无 | 备注文本。 |
content | string | "" | 正文文本。 |
contentTextSize | int | BookConfig.TextSize.content | 正文文字大小。 |
entityPage¶
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
entity | object | 无 | 实体展示数据。 |
entitySize | array(float) | [100.0,100.0] | 实体显示大小。 |
info | string | 无 | 备注文本。 |
content | string | "" | 正文文本。 |
contentTextSize | int | BookConfig.TextSize.content | 正文文字大小。 |
entity字段:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name | string | 无 | 实体标识符。 |
offset | array(float) | 无 | 实体相对于外框的偏移。无偏移时填写[0,0]。 |
molang_dict | dict | {} | Molang表达式字典。 |
BookConfig¶
BookConfig是书本系统默认值的静态配置对象。官方资料要求不要在程序运行期间修改该对象属性。
获取方式:
import mod.client.extraClientApi as clientApi
bookManager = clientApi.GetBookManager()
bcf = bookManager.GetBookConfig()
| 属性 | 说明 | 常见成员 |
|---|---|---|
TextSize | 字体大小。 | infotext=6、footprint=8、content=10、smallTitle=12、middleTitle=14、title=16 |
Colors | 颜色。 | TextDefault、BookTitle、SubTitle |
TextAlign | 文本对齐方式。 | Left、Center、Right、Fit_Left、Fit_Center、Fit_Right |
ImageReszieRule | 图片缩放方式。 | Ninesliced、Fit |
Images | 预设图片路径。 | blank、categoryDefaultIcon、lockBtn_dark、sqrtPanel_light、progressBar_light、progressBar_dark |
官方字段拼写
官方图片缩放枚举名写作ImageReszieRule。编写脚本时应以实际接口名称为准,不要按英文习惯自行改为ImageResizeRule。
BookManager¶
BookManager管理全部书本对象、浏览历史、跳转地址、消息显示和页面注册。通过客户端API获取:
| 接口 | 参数 | 返回值 | 说明 |
|---|---|---|---|
GetBookConfig() | 无 | BookConfig | 获取书本配置常量。 |
GetBookInstance(bookName) | bookName:str | NormalBook或None | 根据书本名称获取书本管理对象。 |
GetOpeningBookInstance() | 无 | NormalBook或None | 获取当前打开的书本管理对象。 |
ShowMsg(position,msg) | position:tuple(int,int)、msg:str | 无 | 在全局坐标显示提示文本,默认约2秒后隐藏。 |
HideMsg() | 无 | 无 | 隐藏全局提示文本。 |
AddPageType(pageName,pageCls) | pageName:str、pageCls:classobj | 无 | 注册自定义页面类型。只能在客户端系统初始化时调用。 |
UpdateScreen() | 无 | 无 | 刷新书本界面。 |
To(addr) | addr:str | PageGroup | 按地址跳转到书本页面。 |
GetBaseCompCls() | 无 | type(BaseComp) | 获取组件基类。 |
GetButtonCompCls() | 无 | type(ButtonComp) | 获取按钮组件类。 |
GetEntityCompCls() | 无 | type(EntityComp) | 获取实体展示组件类。 |
GetHighlightCompCls() | 无 | type(HighlightComp) | 获取轮播物品组件类。 |
GetImageCompCls() | 无 | type(ImageComp) | 获取图片组件类。 |
GetTextCompCls() | 无 | type(TextComp) | 获取文本组件类。 |
GetProgressBarCompCls() | 无 | type(ProgressBarComp) | 获取进度条组件类。 |
GetBasePageCls() | 无 | type(BasePage) | 获取页面基类。 |
GetTitlePageCls() | 无 | type(TitlePage) | 获取带标题处理的页面类。 |
AddPageType的页面名称建议采用模组名:页面名称格式,避免与系统预置页面或其他模组页面重名。
页面地址¶
书本页面跳转地址分为绝对路径和相对路径。
| 类型 | 格式 | 说明 |
|---|---|---|
| 绝对路径 | /书本/目录/章节/页号 | 以/开头,从书本根级解析。 |
| 相对路径 | 页号或子页组/页号 | 不以/开头,从当前页组解析。 |
页号从0开始。如果路径中不写页号,默认跳转到目标页组的第0页。系统支持同章节、跨章节、同目录和跨目录跳转;不支持从当前书本跳转到另一本书。
NormalBook¶
NormalBook表示已经成功创建的书本管理对象。
| 接口 | 参数 | 返回值 | 说明 |
|---|---|---|---|
GetOriginJsonData() | 无 | dict | 获取从书本JSON文件读取的原始数据。 |
GetCurrentJsonData() | 无 | dict | 获取经过书本系统预处理后的当前数据。 |
GetBook() | 无 | Book | 获取书本首页所在的页组对象。 |
GetCategory(identifier) | identifier:str | Category | 根据目录标识符获取目录对象。 |
GetEntry(identifier) | identifier:str | Entry | 根据章节标识符获取章节对象。 |
LockCategory(identifier) | identifier:str | 无 | 锁定目录。 |
UnlockCategory(identifier) | identifier:str | 无 | 解锁目录。 |
LockEntry(identifier) | identifier:str | 无 | 锁定章节。 |
UnlockEntry(identifier) | identifier:str | 无 | 解锁章节。 |
页组对象¶
Book、Category和Entry均继承PageGroup。PageGroup管理一组页面,并提供公共接口。
| 接口 | 对象 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
GetAddr() | PageGroup | 无 | str | 获取该页组的绝对路径。 |
GetPages() | PageGroup | 无 | list(BasePage) | 获取该页组的全部页面对象。 |
GetPagesCount() | PageGroup | 无 | int | 获取该页组的页面数量。 |
GetSons() | Book | 无 | list(Category) | 获取书本的一级目录。 |
GetProgressValue() | Book、Category | 无 | float | 获取子页组解锁进度,范围为0至1。 |
GetSons() | Category | 无 | PageGroup列表 | 获取子目录或章节。 |
GetParent() | Category | 无 | PageGroup | 获取父页组。 |
isLocked() | Category、Entry | 无 | bool | True表示未解锁,False表示已解锁。 |
Lock() | Category、Entry | 无 | 无 | 锁定该目录或章节。 |
Unlock() | Category、Entry | 无 | 无 | 解锁该目录或章节。 |
GetParent() | Entry | 无 | Category | 获取所属目录。 |
BasePage¶
所有自定义页面都继承BasePage。页面负责保存数据、显示自身,并排版页内组件。
重写方法¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__(size=None,position=None) | size:tuple(int,int)、position:tuple(int,int) | BasePage | 初始化页面。自定义页面必须重写,并调用父类方法。 |
Show() | 无 | BasePage | 显示页面。自定义页面通常需要重写并调用父类方法。 |
Hide() | 无 | BasePage | 隐藏页面。可按需重写;重写时应主动调用父类方法。 |
排版与工具方法¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
GetPosition() | 无 | tuple(int,int) | 获取页面在书本坐标系中的位置。 |
GetSize() | 无 | tuple(int,int) | 获取页面大小。 |
Center() | 无 | tuple(int,int) | 获取页面中心坐标。 |
Left()、Right() | 无 | int | 获取页面左右边界的X值。 |
Top()、Bottom() | 无 | int | 获取页面上下边界的Y值。 |
ResetCompsPosition() | 无 | BasePage | 将所有组件位置重置为页面当前位置。 |
GetPageGroup() | 无 | PageGroup或None | 获取页面所在页组。 |
AddComps(*comps) | BaseComp可变参数 | BasePage | 向页面添加组件。 |
Call(callbackDict) | callbackDict:dict | object | 调用回调函数。 |
callbackDict通常包含func和可选的args。
TitlePage¶
TitlePage继承BasePage,提供标题处理。它会根据当前页面是否为章节首页,以及页面数据中的title或subtitle字段决定显示标题。
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
SetTitleData() | 无 | TitlePage | 向标题组件注入数据。 |
LayoutTitle() | 无 | int | 排版标题并返回标题下边界Y值。 |
title可以写作字符串,也可以写作对象:
BaseComp¶
所有书本组件均继承BaseComp。组件把数据和UI控件对象封装在一起,负责把页面传入的数据渲染到UI控件节点。
重写方法¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__(compName,jsonFile,compNodeName,recycled=False) | compName:str、jsonFile:str、compNodeName:str、recycled:bool | BaseComp | 初始化组件。自定义组件必须重写并调用父类方法。 |
Show() | 无 | BaseComp | 显示组件。重写时应调用父类方法。 |
Hide() | 无 | BaseComp | 隐藏组件。可按需重写;重写时应调用父类方法。 |
Reset() | 无 | BaseComp | 组件回收时重置UI控件节点属性。可回收组件建议重写。 |
开启组件回收后,隐藏组件时拷贝出的UI控件节点不会立即删除,而会进入空闲队列供后续同名组件复用。因此,Show中修改过的位置、大小、文本、颜色或层级需要被重置。
排版方法¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
GetPosition() | 无 | tuple(int,int) | 获取组件位置。 |
SetPosition(newPosition) | newPosition:tuple(int,int) | BaseComp | 设置组件位置。 |
GetSize() | 无 | tuple(int,int) | 获取组件大小。 |
SetSize(newSize) | newSize:tuple(int,int) | BaseComp | 设置组件大小。 |
Center() | 无 | tuple(int,int) | 获取组件中心坐标。 |
Left()、Right() | 无 | int | 获取左右边界X值。 |
Top()、Bottom() | 无 | int | 获取上下边界Y值。 |
MoveToX(x)、MoveToY(y) | int | BaseComp | 单独设置位置坐标中的X或Y。 |
MoveX(x)、MoveY(y) | int | BaseComp | 沿指定轴移动。 |
AlignCenterToX(x)、AlignCenterToY(y) | int | BaseComp | 将组件中心对齐到指定坐标。 |
AlignCenterToPosition(position) | position:tuple(int,int) | BaseComp | 将组件中心对齐到指定位置。 |
AlignLeftToX(x)、AlignRightToX(x) | int | BaseComp | 将左右边界对齐到指定X值。 |
AlignTopToY(y)、AlignBottomToY(y) | int | BaseComp | 将上下边界对齐到指定Y值。 |
调用对齐或移动方法前,通常应先调用SetSize,否则排版可能不符合预期。
UI控件节点方法¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
GetRootUINode() | 无 | BaseUIControl | 获取组件封装的UI控件根节点。仅组件可见时可用。 |
HasRootUINode() | 无 | bool | 判断组件是否拥有UI控件根节点。 |
SetNodeOffset(node,offset) | node:BaseUIControl、offset:tuple(int,int) | BaseComp | 偏移节点,并在隐藏时复原,适合解决回收复用问题。 |
SetNodeSize(node,newSize) | node:BaseUIControl、newSize:tuple(int,int) | BaseComp | 设置节点大小,并处理回收复用。 |
SetNodeText(node,text) | node:BaseUIControl、text:str | BaseComp | 设置文本控件文本并刷新界面。 |
SetNodeTextFontSize(node,originFontSize,newFontSize) | node:BaseUIControl、originFontSize:int、newFontSize:int | BaseComp | 设置文本控件字号。 |
GetNodeCenterGlobal(node) | node:BaseUIControl | tuple(int,int) | 获取指定UI控件节点中心的全局坐标。 |
SetLayer(layer) | layer:int | BaseComp | 设置组件根节点UI层级。 |
Call(callbackDict) | callbackDict:dict | object | 调用回调函数。 |
GetPage() | 无 | BasePage或None | 获取组件当前所在页面。 |
预置组件¶
TextComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__(textAlign=BookConfig.TextAlign.Left) | textAlign:int | TextComp | 初始化文本组件。 |
SetDataBeforeShow(text,textSize=BookConfig.TextSize.content) | text:str、textSize:int | TextComp | 设置显示前数据。 |
SetAlpha(alpha) | alpha:float | TextComp | 设置文本透明度。组件显示后可用。 |
SetColor(color) | color:tuple(float,float,float,float) | TextComp | 设置文本颜色。组件显示后可用。 |
Fit_前缀的文本对齐方式会使UI控件根节点自适应文本内容,此时SetSize无效。
ImageComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__(imageResizeRule=BookConfig.ImageReszieRule.Ninesliced) | imageResizeRule:int | ImageComp | 初始化图片组件。 |
SetDataBeforeShow(image) | image:str | ImageComp | 设置图片路径。 |
SetAlpha(alpha) | alpha:float | ImageComp | 设置图片透明度。 |
Ninesliced会改变图片长宽比以适应给定大小;Fit会保持图片长宽比。
HighlightComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__() | 无 | HighlightComp | 初始化轮播物品组件。 |
SetDataBeforeShow(itemData) | itemData:list(dict) | HighlightComp | 设置轮播物品数据。 |
itemData元素包含item和可选的data。
TableRecipeComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__() | 无 | TableRecipeComp | 初始化工作台合成表组件。 |
SetDataBeforeShow(recipeId,aux=0) | recipeId:str、aux:int | TableRecipeComp | 设置合成表数据。 |
EntityComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__() | 无 | EntityComp | 初始化实体展示组件。 |
SetDataBeforeShow(entityName,molang_dict={},entityOffset=(0,0),backgroundImage=BookConfig.Images.sqrtPanel_light) | entityName:str、molang_dict:dict、entityOffset:tuple(int,int)、backgroundImage:str | EntityComp | 设置展示实体数据。 |
ProgressBarComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__() | 无 | ProgressBarComp | 初始化进度条组件。 |
SetDataBeforeShow(value=1,emptyImage=BookConfig.Images.progressBar_dark,fillImage=BookConfig.Images.progressBar_light) | value:float、emptyImage:str、fillImage:str | ProgressBarComp | 设置进度条数据。value范围为0至1。 |
ButtonComp¶
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
__init__() | 无 | ButtonComp | 初始化按钮组件。 |
SetDataBeforeShow(defaultImage=BookConfig.Images.blank,pressCallBack=None,moveInCallBack=None,text="",pressImage=None,hoverImage=None) | 多参数 | ButtonComp | 设置按钮图片、回调和文本。 |
SetAlpha(alpha) | alpha:float | ButtonComp | 设置按钮图片透明度。 |
SetTextColor(color) | color:tuple(float,float,float,float) | ButtonComp | 设置按钮文字颜色。 |
SetTextSize(newSize) | newSize:int | ButtonComp | 设置按钮文字大小。 |
SetTextAlpha(alpha) | alpha:float | ButtonComp | 设置按钮文字透明度。 |
pressCallBack和moveInCallBack均为字典,通常包含func和可选的args。