数据类型转换

在 JSON UI 绑定、变量进行操作或运算时,数字、字符串、布尔值(以下简称数据类型,不包括数组等其他类型)不能直接带入条件式。(例如在 label 中,数字类型不能直接作为 #text 的绑定属性)
此时,我们需要把数据类型进行转换再带入条件式。

下方是数据类型转换的方法:

数据类型转字符串

通过数据类型(这里用数字举例)转字符串,我们可以将一个数字显示在文本控件。下方是一个使用绑定演示数字转字符串的例子: "test": { "type": "label", "text": "#text", "bindings": [ { "binding_type": "view", "source_property_name": "('§_' + #test)", "target_property_name": "#text" } ] } 在示例中,假如 #test 为 64,这个文本控件就会显示 64。

我们可以通过一个新的字符串再加上数字类型的数据进行转换。一个新的字符串可以不包含 § 字符,此处 § 的作用是转换后只显示数字字符串,不会包含多余的字符。

你也不必担心 § 字符会改变字体颜色,§ 后面的文字让 Minecraft 不能识别为样式代码就行了。

你也可以不用到 § 字符,只要使用蒙版剪辑(clips_children 属性)把多余的文字剪去即可。

如果绑定属性为小数,则会忽略小数点后方的所有数字。在部分绑定属性中,不能直接转字符串(数字不会显示)。

数据类型转数字

通过数据类型(这里用字符串举例)转数字,我们可以使用数字字符串进行比较、计算。下方是一个使用绑定演示字符串转数字的例子: "test": { "type": "label", "text": "hello world", "bindings": [ { "binding_type": "global", "binding_name": "#hud_title_text_string" }, { "binding_type": "view", "source_property_name": "((#hud_title_text_string * 1) < 100)", "target_property_name": "#visible" } ] } 在示例中,title的数字字符串小于 100 才会显示这个文本控件。

我们可以将数字字符串乘于一转换为数字。前提是这个字符串仅包含数字,没有多余的文字(如果有多余的文字请减去多余的文字)。

你也可以在字符串中减去多余的文字仅保留数字字符串,这样会直接解析为数字。

进行任何四则运算都可以将数据类型转为数字,这里推荐使用 * 1 转数字。

数据类型转布尔值

通过数据类型(这里用数字举例)转布尔值,我们可以使用布尔值进行条件运算。下方是一个使用绑定演示数字转字符串的例子: "test": { "type": "label", "text": "hello world", "bindings": [ { "binding_type": "global", "binding_name": "#hud_title_text_string" }, { "binding_type": "view", "source_property_name": "(not (not (#hud_title_text_string * 1)))", "target_property_name": "#visible" } ] } 在示例中,title的数字字符串不等于 0 才会显示这个文本控件。

字符串提取纯数字字符串

有些时候,我们可能需要提取字符串中的数字字符串。 "test": { "type": "label", "text": "#text", "bindings": [ { "binding_type": "global", "binding_name": "#hud_title_text_string" }, { "binding_type": "view", "source_property_name": "('§_' + (#hud_title_text_string - 'test_'))", "target_property_name": "#text" } ] } 当我们/title @s title test_123时,文本控件只会显示123。

在示例中,首先通过 (#hud_title_text_string - 'test_') 去除文字中的 test_。此时,数据的类型已由字符串转为的数字,之后我们还需要将数字重新转化为字符串。