手冊: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]