手册:JSON UI

来自Minecraft基岩版开发Wiki

本页面列出了所有的JSON UI接口。

文件[编辑]

JSON UI有两个硬编码文件路径,分别用于控制JSON UI的定义文件和全局变量。资源包目录下的<rp>/ui/_ui_defs.json用于存储在资源包加载时需要解析的所有JSON UI定义文件的路径,<rp>/ui/_global_variables.json用于存储所有JSON UI定义文件中共享的全局变量,其中<rp>代表资源包的路径。

其他的JSON UI文件皆为UI定义文件,负责定义每一个场景屏幕。需要注意的是,只有在_ui_defs.json中列出的UI定义文件才会在资源包加载时被解析和渲染,_ui_defs.json中没有列出的UI定义文件不会被解析。UI定义文件未必必须出现在资源包的ui文件夹内,无论其出现在资源包的任何位置,只要在_ui_defs.json中将其列出即可使其被解析并正常发挥功能。

JSON UI中涉及的所有同名文件都会在包加载时进行合并,后加载的文件会合并进入先前加载的同名文件,而非直接覆盖。

结构[编辑]

_ui_defs.json的文件结构如下:

  •  _ui_defs.json:UI定义列表文件。
    • *ui_defs:UI定义文件的列表。
      • :一个UI定义文件相对于资源包根目录的相对路径。例如<rp>/ui/<ui_file_name>.json需要填写为ui/<ui_file_name>.json

_global_variables.json的文件结构如下:

  •  _global_variables.json:全局变量文件。
    •  $<variable_name>:一个变量定义,其中<variable_name>代表任意一个变量名。

每个UI定义文件的文件结构如下:

  •  <ui_file_name>.json:一个JSON UI文件。
    • *namespace:该文件的命名空间。
    •  <control_name>[@<inherited_control_namespace>.<inherited_control_name>]:一个控件,其中<control_name>为该控件的名称,<inherited_control_namespace>为该控件所继承的父控件的命名空间,<inherited_control_name>为该控件所继承的父控件的名称,继承是可选的,即@及其之后的内容可以不存在,这代表着该控件不继承任何控件。例如control_1@wiki.control_0代表着该控件名称为control_1,继承了wiki命名空间下的名称为control_0的控件。
    •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>]:一个动画,键名中与控件的继承格式相同。

控件[编辑]

每个控件都由一组初始化字段、一组根据控件类型不同而不同的组件字段、一个控件树字段和一组后创建字段构成。初始化字段包含定义该控件的类型、该控件是否在初始化时被忽略以及初始化该控件内所有变量的字段;组件字段包括一组控件共同字段和各种组件字段;控件树字段即controls字段,用于定义该控件的所有子控件;后创建字段里包含各种杂项字段。每个控件的结构如下:

  •  <control_name>[@<inherited_control_namespace>.<inherited_control_name>]:一个控件。
    • *type:该控件的类型,可以填写一个UI定义类型字符串。当该控件不是一个继承自其他控件的控件时,该字段是必须字段。
    •  ignored:该控件是否在解析定义时被忽略,默认为false。可以是一个最终计算结果为布尔值的字符串表达式。
    •  $<variable_name>[|default]:添加一个自定义变量,其中<variable_name>代表任意一个变量名,如果键名末尾带有可选的|default代表着该值为该变量的默认值。例如,$some_variable|default意味着定义了一个名为some_variable的变量,且该变量在该处定义的值为整个控件树和继承树中出现该变量时选取的默认值。
    •  variables[①]:添加一组自定义变量。
      •  requires:该组变量定义的条件,需要该字段非空、非零或字符串表达式的计算结果非空、非零。否则,该组内的各变量不会得到定义。
      •  $<variable_name>[|default]:在该组中添加一个自定义变量。
    •  variables[②]:添加多组自定义变量。
      • :添加某一组自定义变量。
        •  requires:该组变量定义的条件,需要该字段非空、非零或字符串表达式的计算结果非空、非零。否则,该组内的各变量不会得到定义。
        •  $<variable_name>[|default]:在该组中添加一个自定义变量。
    • 当类型为button(按钮控件)时的额外字段 参见Manual:JSON_UI/Button
    • 当类型为custom(自定义控件)时的额外字段 参见Manual:JSON UI/Custom
    • 当类型为dropdown(下拉菜单控件)时的额外字段 参见Manual:JSON UI/Dropdown
    • 当类型为edit_box(编辑框控件)时的额外字段 参见Manual:JSON UI/EditBox
    • 当类型为factory(工厂控件)时的额外字段 参见Manual:JSON UI/Factory
    • 当类型为grid(网格控件)时的额外字段 参见Manual:JSON UI/Grid
    • 当类型为image(图像控件)时的额外字段 参见Manual:JSON UI/Image
    • 当类型为input_panel(输入面板控件)时的额外字段 参见Manual:JSON UI/InputPanel
    • 当类型为label(标签控件)时的额外字段 参见Manual:JSON UI/Label
    • 当类型为panel(面板控件)时的额外字段 参见Manual:JSON UI/Panel
    • 当类型为screen(屏幕控件)时的额外字段 参见Manual:JSON UI/Screen
    • 当类型为scrollbar_box(滚动栏框控件)时的额外字段 参见Manual:JSON UI/ScrollbarBox
    • 当类型为scroll_track(滚动跟踪控件)时的额外字段 参见Manual:JSON UI/ScrollTrack
    • 当类型为scroll_view(滚动视图控件)时的额外字段 参见Manual:JSON UI/ScrollView
    • 当类型为selection_wheel(选轮控件)时的额外字段 参见Manual:JSON UI/SelectionWheel
    • 当类型为slider(滑块控件)时的额外字段 参见Manual:JSON UI/Slider
    • 当类型为slider_box(滑块框控件)时的额外字段 参见Manual:JSON UI/SliderBox
    • 当类型为stack_panel(栈面板控件)时的额外字段 参见Manual:JSON UI/StackPanel
    • 当类型为toggle(开关控件)时的额外字段 参见Manual:JSON UI/Toggle
    •  controls:该控件的子控件。
      •  <control_name>[@<inherited_control_namespace>.<inherited_control_name>]:一个子控件。
    • 控件的后创建字段 参见Manual:JSON_UI/PostCreate

控件可以在控件名处使用@运算符继承一个其他控件,继承的控件可以来自于当前命名空间,也可以来自于其他命名空间,这被称作一个控件引用。当继承的控件来自于当前命名空间时,命名空间部分可以省略,形如<control_name>@<inherited_control_name>,否则命名空间必须要写在@之后,继承的控件的控件名之前,并与控件名通过.隔开,形如<control_name>@<inherited_control_namespace>.<inherited_control_name>。引擎接受一个空控件名的仅继承其他控件的控件,形如@<inherited_control_name>@<inherited_control_namespace>.<inherited_control_name>,但这是事实上是一种不推荐的写法,因为这会造成控件树中出现一个空节点,不利于之后在其他包的同名JSON UI文件中修改或者逻辑代码部分执行逻辑时在控件树中定位到正确的控件,因此在一个可以触发断言的Minecraft构建中,这种控件引用会引发断言失败。但是,在工厂控件等一些特殊的位置中,仅继承而不带有控件名的控件引用是可以正常接受的。@的前后两部分皆接受使用一个变量来相对动态地修改组件名和继承的组件名,引擎会在控件树中解析到该控件时首先对控件名做变量替换,然后再将其加入控件树并解析其剩余部分。

解析不同的控件类型的控件时使用的组件皆不相同。下面分别列出了每一种控件类型在解析时会用到的所有组件。

按钮[编辑]

自定义[编辑]

下拉菜单[编辑]

编辑框[编辑]

工厂[编辑]

网格[编辑]

图像[编辑]

输入面板[编辑]

标签[编辑]

面板[编辑]

屏幕[编辑]

滚动条框[编辑]

滚动跟踪[编辑]

滚动视图[编辑]

选轮[编辑]

滑块[编辑]

滑块框[编辑]

栈面板[编辑]

开关[编辑]

动画[编辑]

透明度[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个透明度动画。

裁剪[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个裁剪动画。

颜色[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个颜色动画。

翻书[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个翻书动画。

Aseprite翻书[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个Aseprite翻书动画。

偏移量[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个偏移量动画。

尺寸[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个尺寸动画。

UV[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个UV动画。

等待[编辑]

  •  <animation_name>[@<inherited_animation_namespace>.<inherited_animation_name>:一个等待动画。

变量[编辑]

此处变量指能应用全局ui-json文件的带有$的一系列字段。此类字段既可在_global_variables.json文件中被申明,也可单独使用,以及配置在一定条件下的应用。 作为JSON-UI为数不多可被灵活运用的一大变量,全局变量因极高的自由度被广大编辑者青睐,尽管此处的变量无法参与复杂的运算以及与函数发生作用,但在一定的范围内,它的出现提供了无限的可能性。下面列举几个常用的全局变量的使用情况。

编码特定批量属性变量[编辑]

对于一些控件组来说,往往有大量的重复变量,使用全局变量来编码这些重复变量能够大幅度减少代码量。例如,对于一个自定义的按钮组控件,具有defaulthoverpressed三种状态的子控件(locked_control变量空),可以引用相同的全局变量如$demo_buttons_panel,在typebutton的主控件下申明一个值为特定按钮面板的全局变量$demo_buttons_panel,最后在该按钮面板设定一系列类似的全局变量来完善此按钮组控件。

参与简单整数运算[编辑]

全局变量所属变量类型遵循其设定变量的类型,因此当设定变量可以进行整数(浮点)运算时全局变量也能够进行运算。比较常见的,是对alpha变量做加减运算,通常是在动画中实现幻灯片效果亦或动态图片,同时在grid控件中的运用也能极大减少代码量与减少手工修订的工作量。不过,对于后者,并不推荐对collection_index变量使用全局变量来简化运算,因为通常以硬编码形式存在的grid组件往往会随版本更新产生很大的差异,同时也就造成了对应指数的改变,因此要因地制宜地选择是否使用全局变量来简化运算。

配合variables变量实现简易条件判定[编辑]

对于全局变量来说,它能够定义一系列独立于各控件的全类型参数,因此可以在各个子控件变量中引入私有全局变量来控制其属性,在上层节点中利用variables来决定特定控件的显示与内容的差异性,由此产生的条件判定能产生极大的便利。

利用bindings枚举呈现自定义界面[编辑]

绑定[编辑]

表达式[编辑]

布局轴值表达式[编辑]

UI表达式[编辑]

枚举[编辑]

UI定义类型[编辑]

控件类型由每个控件的type字段的取值决定。以下列出了所有的控件类型。

UI定义类型
键名 接口字符串 可用性 描述
国际版 中国版
Button 0 button 可用 可用 按钮
Custom 1 custom 可用 可用 自定义,可以配合renderer字段呈现硬编码的JSON UI元素,例如当renderer值为gradient_renderer时使用color1字段与color2字段来渲染渐变纯色色块
Dropdown 2 dropdown 可用 可用 下拉菜单,本质上是下拉菜单的顶层体现,默认引用toggle的纹理设置(未做定制化处理时使用需配合input_panel且必须挂接在统一面板内,否则会导致当前Minecraft实例冻结)
EditBox 3 edit_box 可用 可用 编辑框
Factory 4 factory 可用 可用 工厂,满足给定条件后由硬编码决定的JSON UI元素渲染,配合control_name字段或control_ids字段使用,例如当control_name值为selected_item_details时,处于触控等条件下选中inventory等处的特定网格后渲染item_text_label(注:工厂控件是根据控件名和控件节点的路径来硬编码的,即此处示例selected_item_details@common.selected_item_details并不重要,且能修改来自定义工厂控件)
Grid 5 grid 可用 可用 网格
Image 6 image 可用 可用 图像
InputPanel 7 input_panel 可用 可用 输入面板,通常情况下需配合特定对象使用,如下拉菜单、网格、屏幕、滚动相关控件等
Label 8 label 可用 可用 标签,文本对象
Panel 9 panel 可用 可用 面板,没有额外功能的普通面板
Screen 10 screen 可用 可用 屏幕,为最终显示在场景栈中的控件,其他所有控件需挂接在该控件的控件树下
ScrollbarBox 11 scrollbar_box 可用 可用 滚动条框,一个支持垂直滚动控件
ScrollTrack 12 scroll_track 可用 可用 滚动跟踪
ScrollView 13 scroll_track 可用 可用 滚动视图
SelectionWheel 14 selection_wheel 可用 可用 选轮,原版中用于支持动作表情系统,出现在在命名空间persona
Slider 15 slider 可用 可用 滑块
SliderBox 16 slider_box 可用 可用 滑块框
StackPanel 17 stack_panel 可用 可用 栈面板,当横向大小设为100%canchor_fromanchor_to变量生效
Toggle 18 toggle 可用 可用 开关,当toggle_default_state字段为真且被具有toggle_nametoggle_group_forced_indextoggle_group_default_selectedtoggle_grid_collection_name字段后可作为标签页使用
Combox 19 combox 不可用 可用 组合框
Layout 20 layout 不可用 可用 布局
StackGrid 21 stack_grid 不可用 可用 栈网格
Joystick 22 joystick 不可用 可用 摇杆
RichText 23 rich_text 不可用 可用 富文本
SixteenNineLayout 24 sixteen_nine_layout 不可用 可用 16-9布局
MulLinesEdit 25 mul_lines 不可用 可用 多行编辑框
AminProcessBar[原文如此] 26 anim_porecess_bar[原文如此] 不可用 可用 动画处理条

绑定类型[编辑]

绑定类型由每个绑定的binding_type字段的取值决定。以下列出了所有的绑定类型。

绑定类型枚举
键名 接口字符串 描述
None 0 none
Global 1 global 全局绑定
Collection 2 collection 合集绑定
CollectionDetails 3 collection_details 合集详情绑定
View 4 view 查看绑定

绑定条件[编辑]

绑定条件由每个绑定的binding_condition字段的取值决定。以下列出了所有的绑定条件。

绑定条件枚举
键名 接口字符串 描述
None 0 none
Once 1 once 单次触发
Always 2 always 总是触发
AlwaysWhenVisible 3 always_when_visible 在可见状态时总是触发
Visible 4 visible 当可见时触发
VisibilityChanged 5 visibility_changed 当可见性发生变更时触发

按钮映射类型[编辑]

映射类型由每个按钮映射的mapping_type字段的取值决定。以下列出了所有的映射类型。

按钮映射类型枚举
键名 接口字符串 描述
Global 0 global 全局映射
DoublePressed 1 double_pressed 双击/两次按下时映射
Pressed 2 pressed 单击/单次按下时映射
Focused 3 focused 焦点在该控件上时映射

屏幕事件作用域[编辑]

作用域由每个按钮映射的scope字段的取值决定。以下列出了所有的作用域。

屏幕事件作用域枚举
键名 接口字符串 描述
Controller 0 controller 控制器作用域
View 1 view 视图作用域

按钮映射输入模式条件[编辑]

输入模式条件由每个按钮映射的input_mode_condition字段的取值决定。以下列出了所有的输入模式条件。

按钮映射输入模式条件枚举
键名 接口字符串 描述
None 0 any
NotGaze 1 not_gaze
GamepadAndNotGaze 1 gamepad_and_not_gaze

锚点[编辑]

锚点位置由每个按控件的anchor_fromanchor_to字段的取值决定。以下列出了所有的锚点位置。

锚点枚举
键名 接口字符串 描述
TopLeft 0 top_left 左上
TopMiddle 1 top_middle 中上
TopRight 2 top_right 右上
LeftMiddle 3 left_middle 左中
Center 4 center 中央
RightMiddle 5 right_middle 右中
BottomLeft 6 bottom_left 左下
BottomMiddle 7 bottom_middle 中下
BottomRight 8 bottom_right 右下

可拖动性[编辑]

可拖动性由每个按钮控件的draggable字段的取值决定。以下列出了所有的可拖动性。

可拖动性枚举
键名 接口字符串 描述
NotDraggable 0 not_draggable 不可拖动
Horizontal 1 horizontal 竖直拖动
Vertical 2 vertical 水平拖动
Both 3 both 两个方向皆可拖动

布局轴值类型[编辑]

布局轴值类型枚举
键名 接口字符串 描述
Absolute 0 空字符串 仅使用一个数字表示绝对像素值,不使用相对值
ParentRelativeX 1 % 仅在X坐标处可用,相对于父控件X值的百分比相对值
ParentRelativeY 2 % 仅在Y坐标处可用,相对于父控件Y值的百分比相对值
SelfRelativeX 3 %x 仅在Y坐标处可用,且仅在该控件的X坐标为绝对值时有效,相对于该控件X值的百分比相对值
SelfRelativeY 4 %y 仅在X坐标处可用,且仅在该控件的Y坐标为绝对值时有效,相对于该控件Y值的百分比相对值
SizeOfChildrenX 5 %c 仅在X坐标处可用,相对于子控件X总值的百分比相对值
SizeOfChildrenY 6 %c 仅在Y坐标处可用,相对于子控件Y总值的百分比相对值
SizeOfLargestChildX 7 %cm 仅在X坐标处可用,相对于X值最大的子控件X值的百分比相对值
SizeOfLargestChildY 8 %cm 仅在Y坐标处可用,相对于Y值最大的子控件Y值的百分比相对值
SizeOfMaxSiblingWidth 9 %sm 仅在X坐标处可用,相对于X值最大的兄弟控件X值的百分比相对值
SizeOfMaxSiblingHeight 10 %sm 仅在Y坐标处可用,相对于Y值最大的兄弟控件Y值的百分比相对值

布局轴值偏移量容器类型[编辑]

布局轴值偏移量容器类型枚举
键名 接口字符串 描述
Default 0 default 默认,默认偏移量
Specified 1 布局轴值表达式 指定,即直接使用一个布局轴值表达式来计算出一个指定的像素数
Fill 2 fill 充满,填充满父控件

布局轴值运算符[编辑]

布局轴值运算符枚举
键名 接口字符串 描述
Add 0 +
Subtract 1 -

渲染器[编辑]

自定义渲染器由每个自定义控件的renderer字段的取值决定。以下列出了所有的自定义渲染器。

渲染器列表
接口字符串 国际版 中国版 描述
inventory_item_renderer 可用 可用 物品栏物品渲染器
background_renderer 可用 可用 背景渲染器
trial_time_renderer 可用 可用 试玩时间渲染器
live_horse_renderer 可用 可用 实时马渲染器
hud_player_renderer 可用 可用 HUD玩家渲染器
live_player_renderer 可用 可用 实时玩家渲染器
name_tag_renderer 可用 可用 命名标签渲染器
paper_doll_renderer 可用 可用 纸娃娃渲染器
netease_paper_doll_renderer 不可用 可用 网易纸娃娃渲染器
netease_mini_map_renderer 不可用 可用 网易小地图渲染器
splash_text_renderer 可用 可用 闪烁标语文本渲染器
debug_screen_renderer 可用 可用 调试屏幕渲染器
ui_holo_cursor 可用 可用 UI HoloLens光标
holographic_postrenderer 可用 可用 全息图后渲染器
progress_bar_renderer 可用 可用 进度条渲染器
hover_text_renderer 可用 可用 悬停文本渲染器
enchanting_book_renderer 可用 可用 附魔书渲染器
hotbar_renderer 可用 可用 快捷栏渲染器
hotbar_cooldown_renderer 可用 可用 快捷栏冷却渲染器
flying_item_renderer 可用 可用 飞行物品渲染器
heart_renderer 可用 可用 红心渲染器
horse_heart_renderer 可用 可用 马红心渲染器
armor_renderer 可用 可用 护甲渲染器
horse_jump_renderer 可用 可用 马跳跃渲染器
hunger_renderer 可用 可用 饥饿渲染器
bubbles_renderer 可用 可用 气泡渲染器
vignette_renderer 可用 可用 渐晕渲染器
cursor_renderer 可用 可用 光标渲染器
progress_indicator_renderer 可用 可用 进度指示器渲染器
mob_effects_renderer 可用 可用 生物效果渲染器
camera_renderer 可用 可用 相机渲染器
gradient_renderer 可用 可用 渐变渲染器
panorama_renderer 可用 可用 全景图渲染器
3d_structure_renderer 可用 可用 3D结构渲染器
bohr_model_renderer 可用 可用 Bohr模型渲染器
web_view_renderer 可用 可用 网络视图渲染器
actor_portrait_renderer 可用 可用 活动对象肖像渲染器
banner_pattern_renderer 可用 可用 旗帜图案渲染器
credits_renderer 可用 可用 鸣谢渲染器

颜色[编辑]

颜色列表
键名 接口字符串 颜色 描述
WHITE white
 #FFFFFFFF
白色
GREY grey
gray

 #7F7F7FFF[注 1]
灰色
BLACK black
 #000000FF
黑色
RED red
 #FF0000FF
红色
GREEN green
 #00FF00FF
绿色
BLUE blue
 #0000FFFF
蓝色
YELLOW yellow
 #FFFF00FF
黄色
ORANGE orange
 #D87F33FF[注 2]
橙色
PURPLE purple
 #FF00FFFF
紫色
CYAN cyan
 #00FFFFFF
青色
PINK
 #F38BAAFF
粉色
NIL nil
 #00000000
无色
SHADE_DOWN
 #7F7F7FFF[注 3]
下阴影
SHADE_UP
 #FFFFFFFF
上阴影
SHADE_NORTH_SOUTH
 #CCCCCCFF
南北阴影
SHADE_WEST_EAST
 #999999FF
东西阴影
MINECOIN_GOLD
 #DDD605FF[注 4]
Minecoin金

纸娃娃渲染器旋转样式[编辑]

纸娃娃渲染器渲染样式枚举
键名 接口字符串 描述
None 0 none
Automatic 1 auto 自动旋转
GestureX 2 gesture_x 手势旋转X
CustomY 3 custom_y 自定义旋转Y
Lerping 4 线性插值旋转

网易纸娃娃渲染器旋转样式[编辑]

网易纸娃娃渲染器渲染样式枚举
键名 接口字符串 描述
None 0 none
Automatic 1 auto 自动旋转
GestureX 2 gesture_x 手势旋转X
CustomY 3 custom_y 自定义旋转Y

渐变渲染器渐变方向[编辑]

渐变渲染器渐变方向枚举
键名 接口字符串 描述
Vertical 0 vertical 垂直
Horizontal 1 horizontal 水平

全景图渲染器旋转样式[编辑]

全景图渲染器渲染样式枚举
键名 接口字符串 描述
None 0 none
Automatic 1 auto 自动旋转
GestureX 2 gesture_x 手势旋转X

文本类型[编辑]

文本类型枚举
键名 接口字符串 描述
ExtendedASCII 0 ExtendedASCII 扩展的ASCII
IdentifierChars 1 IdentifierChars 标识符字符
NumberChars 2 NumberChars 数字字符

定向类型[编辑]

定向类型枚举
键名 接口字符串 描述
Horizontal 0 horizontal 水平
Vertical 1 vertical 垂直
None 2 none

资源文件系统[编辑]

资源文件系统枚举
键名 接口字符串 描述
UserPackage 0 InUserPackage 用户包,即附加包根目录
AppPackage 1 InAppPackage APP包,即应用程序根目录
Raw 2 RawPath 原始路径,即绝对路径
RawPersistent 3 RawPersistent
SettingsDir 4 InSettingDir 设置目录,即com.mojang/minecraftpecom.netease/minecraftpe
ExternalDir 5 InExternalDir
ServerPackage 6 InServerPackage
DataDir 7 InDataDir
UserDir 8 InUserDir
ScreenshotsDir 9 InWorldDir 截图目录,即世界存档根目录
StoreCache 10 StoreCache 商店缓存

平铺方向[编辑]

平铺方向枚举
键名 接口字符串 描述
None 0 不平铺
X 1 x 水平平铺
Y 2 y 垂直平铺
Both 3 xy
yx
双向平铺

裁剪方向[编辑]

裁剪方向枚举
键名 接口字符串 描述
None 0 无裁剪
Left 1 left 左侧裁剪
Right 2 right 右侧裁剪
Up 3 up 上侧裁剪
Down 4 down 下侧裁剪
Center 5 center 中央裁剪

字号[编辑]

字号枚举
键名 接口字符串 描述
Small 0 small 小号
Normal 1 normal 中号
Large 2 large 大号
ExtraLarge 3 extra_large 超大号

文本对齐方式[编辑]

文本对齐方式枚举
键名 接口字符串 描述
Left 0 left 左对齐
Right 1 right 右对齐
Center 2 center 居中对齐

调试颜色[编辑]

调试颜色列表
接口字符串 颜色 描述
black
 #000000
黑色
white
 #FFFFFF
白色
gray
 #7F7F7F[注 5]
灰色
red
 #FF0000
红色
blue
 #0000FF
蓝色
green
 #00FF00
绿色
yellow
 #FFFF00
黄色
purple
 #7F007F[注 6]
紫色

子级插入位置[编辑]

子级插入位置枚举
键名 接口字符串 描述
Front 0 front 之前
Back 1 back 之后

开关组管理器行为[编辑]

开关组管理器行为枚举
键名 接口字符串 描述
ClearAll 0 clear 组中所有开关默认全部关闭
SelectAll 1 select 组中所有开关默认全部开启
GatherAll 2 gather
DefaultAll 2 default 组中所有开关默认全部处于各自的默认状态

滑块组管理器行为[编辑]

滑块组管理器行为枚举
键名 接口字符串 描述
GatherAll 0 gather

焦点导航模式[编辑]

焦点导航模式枚举
键名 接口字符串 描述
None 0 none
Contained 1 contained
Stop 2 stop
Custom 3 custom 自定义

开发版本中的应用[编辑]

实时编辑策略[编辑]

通用调试快捷操作
键值 国际版 中国版 描述
Ctrl + - 可用 可用 JSON-UI 输入控件焦点
Ctrl + + 可用 可用 JSON-UI 界面元素
Ctrl + R 可用 可用 刷新全局 JSON-UI
Ctrl + ` 可用 可用 唤出开发控制台
Ctrl + Shift + F11 可用 不可用 切换触控/键鼠操作模式
Shift + F11 可用 不可用 切换触控/键鼠操作模式
F11 不可用 可用 切换触控/键鼠操作模式
Ctrl + P 可用 可用 切换Pocket/经典 UI
Ctrl + K 可用 可用 切换至生存模式并打开死亡界面
G 可用 可用 切换创造/生存/冒险模式
Ctrl + H 可用 可用 打开内容日志
J 可用 可用 暂停玩家动作
I 可用 可用 丢弃物品栏内除快捷栏的全部物品
ctrl + Pageup/Pagedown 可用 可用 更改当前 Minecraft 实例分辨率
shift + Pageup/Pagedown 可用 可用 调整变速
ctrl + shift + del 可用 可用 重启当前 Minecraft Dev 实例

部分断言报错解决方案[编辑]

Minecraft 基岩引擎下的 JSON-UI 在开发环境下遵循严格的代码规范,尽管这一切在零售版本几乎不会有任何可视化的显现,但是在特定的情况下构建相关代码集群,最优解还是尽可能避免任何能被纠错程序检测出的问题,如果你位于开发环境下且想要跳过相关报错,请前往设置-调试界面关闭断点显示日志调试器中的断点测试开关,或者在开发控制台中输入命令/option set dev_assertions_debug_break false/option set dev_assertions_show_dialog false并执行,特别需要注意的是调试器中的断点测试的设置优先级应高于断点显示日志,这是由于标准Minecraft Dev是能在不链接到调试器的情况下运行的,这也符合绝大多数情况(待定),因此此时并无控制台程序用于输出调试信息,断言错误将直接导致当前Minecraft实例终止。

常见的 JSON-UI 断言错误及可能的解决方案[编辑]

断言错误核心内容 是否为恶性递归错误 解决方案
Type not specified (or @-base not found) for control: assertion_failure 检查代码字段中assertion_failure@$abc123,通常情况下全局变量$abc123不存在或无法识别会造成此问题。另一种特殊情况是组的子节点需要写到controls变量内,而不能被引用,可能在stack_panelinput_panel组件下出现。
Invalid rectangle area Condition is false: (x0 <= x1 && y0 <= y1) (checkForValidity == false) 检查是否有将原stack_panel控件下的对象放入该父对象下panel控件内的情况,此时线性布局出现了错乱,尝试恢复原stack_panel下对象的排列方式。
UIControlFactory failed to create child control, did you add a new type? Did you add it to the string-to-type function?Condition is false: childControl 检查是否存在某一对象设定的type变量不合规情况,此类问题解决一般需要一定的经验,建议从能够确认无问题的最上层节点往下逐一排查。
Could not find tab to select 硬编码决定了部分界面必须具备toggle_namenavigation_tab的特定开关,随意增删处于同一开关组的开关名容易出现此类问题。如$toggle_group_forced_index变量值为$accessibility_index$construction_index$nature_index$items_index$equipment_index的相关控件。此类错误无关紧要。
childBatchClippingState.mBottomRightClip should always be >= mTopLeftClip. FYI mClipsChildren == trueCondition is false: childBatchClippingState.mBottomRightClip.x >= childBatchClippingState.mTopLeftClip.x && childBatchClippingState.mBottomRightClip.y >= childBatchClippingState.mTopLeftClip 此类问题一般出现在scroll_panel控件嵌套scroll_panel的情况下,当子控件的大小与父控件大小相差悬殊或不符合特定情境下硬性要求时,此类报错会在拖动滚轮(键鼠)或滑动窗体(触控)时不间断出现,但在滚动鼠标滑轮与上下实体键映射时不会出现相应报错。该报错延展到零售版本的直观体现为滑动操作中途Minecraft实例卡顿明显至无响应,暂无完美解决方案。
Invalid rectangle area Condition is false: (x0 <= x1 && y0 <= y1) (checkForValidity == false) 此类问题一般也出现在scroll_panel控件嵌套scroll_panel的情况下,且与上条断言错误同时发生。当子控件的大小与父控件大小相差悬殊或不符合特定情境下硬性要求时,此类报错会在拖动滚轮(键鼠)或滑动窗体(触控)时不间断出现,但在滚动鼠标滑轮与上下实体键映射时不会出现相应报错。该报错延展到零售版本的直观体现为滑动操作中途Minecraft实例卡顿明显至无响应,暂无完美解决方案。
We have invalid names in the vanilla files.Make sure all your control children have unique names that aren't empty! 同一节点下对象名应该不同。
This control needs a layout component!Condition is false: mLayoutComponent 待观察。
Unsolvable layout rule set.Condition is false: false 同一stack_panel控件下不能同时嵌套两个或多个scrolling_panel控件。stack_panel控件下的节点不能含有高度为100%的控件。
UI control reference not found: 'dock_exit_animation_push_offset' 除该控件确实不存在的情况外,一般也出现在动画变量中,尽可能保持动画变量继承控件带命名空间的完整性。
Data bindings must have at least one property to bind! bindings变量内容不完整。
Invalid Index was received. Most likely due to controls not being removed when the respective grid resized. collection_index变量值超出对应grid控件应有值。
Should not be trying to push the start menu to a ClientInstance scenestack! 在游戏内(hud推入后)打开安全区更改界面。
UIControlFactory - failed to create root control.Condition is false: subTreeControl != nullptr grid组件grid_item_template变量值指向一个不存在的控件。
gridItemTemplate control tree could not be created! Condition is false: gridItemTemplate != nullptr grid组件grid_item_template变量值指向一个不存在的控件。(伴随上一断言失败出现)
Invalid Index was received. Most likely due to controls not being removed when the respective grid resized. 待观察。

参考与注释[编辑]

参考[编辑]

注释[编辑]

  1. 精确数值为浮点数组[0.5, 0.5, 0.5, 1.0]
  2. 精确数值为浮点数组[0.85, 0.5, 0.2, 1.0]
  3. 精确数值为浮点数组[0.5, 0.5, 0.5, 1.0]
  4. 精确数值为浮点数组[0.87, 0.84, 0.02, 1.0]
  5. 精确数值为浮点数组[0.5, 0.5, 0.5]
  6. 精确数值为浮点数组[0.5, 0.0, 0.5]