- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
Molang
本条目仍需完善。 |
MoLang是一种简单的基于表达式的语言,为实时且快速地计算数值而设计。它的设计重点是在JavaScript无法大规模执行的需要更高性能的系统中启用类似脚本的功能。Mojang提供这些底层系统中的脚本功能来支持用户修改模组,自定义实体、渲染和动画。
语法结构
基本语法
MoLang的语法结构大多基于简单的C语言语法。脚本可以由一个简单数学计算表达式构成,当需要更复杂的代码的时候,它也可以由多个语句组成。
简单表达式
简单表达式指仅包含一个语句的完整表达式,例如:
math.sin(query.anim_time * 1.23)
复杂表达式
复杂表达式指包含两个及两以上语句的完整表达式,每个语句都按顺序求值。复杂表达式中每个语句句末必须使用“;
”结尾,最后一句句末也需要;
,例如:
temp.moo = math.sin(query.anim_time * 1.23);
temp.baa = math.cos(query.life_time + 2.0);
return temp.moo * temp.moo + temp.baa;
在复杂表达式中,也就是当有多个语句的句末皆以;
结尾时,若无“return”语句或其他语句求值,将直接返回0.0
。“return”语句将用来退出当前脚本作用域并计算其后表达式的值,类似C语言。
大小写区分
除字符串外,MoLang中的所有内容都是不用区分大小写的。
关键字
所有不在下表列出范围内的字符,将作保留以供将来使用。 |
关键字 | 描述 |
---|---|
1.23 | 数值常量。 |
!&&||<<=>=>==!= | 逻辑运算符。 |
*/+- | 基本数学运算符。 |
() | 用于控制运算表达式的先后顺序的圆括号。 |
{} | 用于控制执行作用域的花括号。 |
?? | 空值合并运算符,用于定义在变量丢失或活动对象不存在时的值。 |
geometry.texture_name | 用于对几何文件内命名的引用。 |
material.texture_name | 用于对材质文件内命名的引用。 |
math.function_name | 预设数学函数,用于进行各种数学运算。 |
query.function_name | 预设查询函数,用于对游戏内各项数据进行查询。 |
temp.variable_name | 可读写临时变量存储器。 |
texture.texture_name | 用于对纹理命名的引用。 |
variable.variable_name | 可读写变量存储器。 |
?: | 三元条件运算符。 |
? | 二元条件运算符。 |
this | 该脚本(在指定上下文的情况下)最终写入值的当前值。 |
return | 用于在复杂表达式中计算其后的语句并停止脚本的执行,然后返回计算出的值。 |
-> | 指针运算符,用于访问来自不同实体的数据。 |
context.variable_name | 只读变量存储器。 |
loop | 用于重复执行一段或多段语句“n”次。 |
for_each | 用于遍历迭代一个实体数组。 |
break | 用于提前退出“loop”或“for_each”的作用域。 |
continue | 用于跳过“loop”或“for_each”迭代语句的剩余部分,并进入到下一次迭代。 |
[] | 用于访问数组的方括号。 |
变量
一个变量的生命周期可以是以下三种之一:临时变量、实体变量和上下文变量:
- 临时变量(例如:
temp.moo = 1;
)是可读写的,并且依照C语言的规则,它们应在它们所定义的作用域中是有效的。出于性能原因,在当前的脚本执行中,临时变量的生存周期仍是全局的,并且可能在它们所定义的最外层作用域之外仍能返回一个有效值。故在复杂的表达式中需多加注意。Mojang将尽快为上述这种本应无效访问的情形添加内容日志错误。 - 实体变量(例如:
variable.moo = 1;
)是可读写的,并在实体的生命周期内将其值存储在实体上。请注意,当前这些变量都不会被保存,所以退出和重新加载世界将使它们重新初始化。同样,如果实体从世界中消失,实体上的任何变量都将丢失。 - 上下文变量(例如:
context.moo
)是只读的,并且只对运行它们的脚本有效。游戏内部定义了这些变量。
值
- 所有的数字值都是浮点数。
- 布尔值都会被转换并存储为浮点值(
0.0
或1.0
),分别表示false
和true
。 - 对于布尔检测,等于
0.0
的浮点值为假,不等于0.0
的值为真。 - 对于数组下标,浮点数将采用C语言形式的强制转换转换为整型,当出现负数时钳制为
0
,数字过大时顶封到与数组长度相同。 - 其他支持的类型有:
- 错误(如被零除、变量丢失、空引用等)通常返回
0.0
值。
查询函数
查询函数(例如:query.is_baby
或query.is_item_equipped('main_hand')
)允许脚本读取游戏数据。如果查询函数不含带参数,则括号()
可以不写。有关查询函数的完整列表,可参见下方的查询函数清单。
别名
为了减少打字负担并在阅读和编写MoLang时提高可读性,以下关键字的别名可以使开发者在编写过程中更轻松。下表左侧和右侧的功能相同。
别名映射
全名 | 别名 |
---|---|
context.moo | c.moo |
query.moo | q.moo |
temp.moo | t.moo |
variable.moo | v.moo |
下方是一个示例:
math.cos(query.anim_time * 38) * variable.rotation_scale + variable.x * variable.x * query.life_time;
该示例也可以也可以写成:
math.cos(q.anim_time * 38) * v.rotation_scale + v.x * v.x * q.life_time
这两种语法还可以根据需要来混合使用,例如:
math.cos(q.anim_time * 38) * variable.rotation_scale + v.x * variable.x * query.life_time
结构体
与C语言不同,数据结构是通过使用方法隐式定义的。它们的目的是更有效地传递数据,例如传递v.location
而非v.x
、v.y
和v.z
。例如:
v.location.x = 1;
v.location.y = 2;
v.location.z = 3;
v.another_mob_set_elsewhere->v.first_mobs_location = v.location;
下方给出的更多脚本示例中,每个都会返回1.23
:
v.cowcow.friend = v.pigpig; v.pigpig->v.test.a.b.c = 1.23; return v.cowcow.friend->v.test.a.b.c;
v.cowcow.friend = v.pigpig; v.pigpig->v.test.a.b.c = 1.23; v.moo = v.cowcow.friend->v.test; return v.moo.a.b.c;
v.cowcow.friend = v.pigpig; v.pigpig->v.test.a.b.c = 1.23; v.moo = v.cowcow.friend->v.test.a; return v.moo.b.c;
v.cowcow.friend = v.pigpig; v.pigpig->v.test.a.b.c = 1.23; v.moo = v.cowcow.friend->v.test.a.b; return v.moo.c;
v.cowcow.friend = v.pigpig; v.pigpig->v.test.a.b.c = 1.23; v.moo = v.cowcow.friend->v.test.a.b.c; return v.moo;
嵌套或递归的结构可以拥有任意深度。也就是说,尽量不要将一个完整的结构体复制到其他结构中,以免由于被复制的结构体层次过深导致游戏在遍历时出现内存溢满,也不要将结构体做得太深,因为每深一层游戏都会损失部分性能。
字符串
MoLang中的字符串用单引号引起来,例如:'minecraft:pig'
或'hello world!'
。空字符串定义为两个相对的单引号,此时对字符串的操作仅支持==
和!=
。[注 1]
运算表达
公共变量
通常,一个生物的变量被认为是该生物的私有变量,而另一个生物无法访问。要向其他生物开放此变量的只读访问权限,需要在所拥有实体的资源定义中对该变量设置"public"
。另外,建议默认初始化变量。
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
...
"scripts": {
"variables": {
"variable.oink": "public"
},
"initialize": [
"variable.oink = 0;"
],
...
},
...
}
}
}
{}花括号作用域定界符
通过用{
和}
符号限定,可以将一系列语句划分为一个组。这主要用于循环和条件语句中:
(v.moo > 0) ? {
v.x = math.sin(q.life_time * 45);
v.x = v.x * v.x + 17.3;
t.sin_x = math.sin(v.x);
v.x = t.sin_x * t.sin_x + v.x * v.x;
v.x = math.sqrt(v.x) * v.x * math.pi;
}
loop
“loop”函数用于多次执行表达式,其包含两个参数:loop(count,expression);
,第一个参数用于设置循环次数,第二个参数为需要循环执行的表达式。为了安全起见,Mojang对该函数设置了循环次数限制,其循环计数器最大次数为1024。另外,尽量不要将过多循环函数套用。
使用该函数可以编写出一些特别的功能,例如斐波那契数计算器:
v.x = 1;
v.y = 1;
loop(10, {
t.x = v.x + v.y;
v.x = v.y;
v.y = t.x;
});
for_each
为了遍历一个数组,需要使用“for_each”函数(例如query.get_nearby_entities
将返回一个包含实体的数组)。它需要三个参数:for_each(variable, array, expression);
,其中的第一个参数可以是任何的变量,包括temp.和variable.,使用temp.可以防止污染实体的变量空间;第二个参数是一个数组;第三个参数是为数组中的每个元素执行的任何MoLang表达式。
->指针运算符
查询函数的一些返回值,或者存储在临时/实体/上下文变量中的值可以是对另一个实体的调用。“->”运算符允许脚本访问变量或对该实体进行查询。例如,下面的示例将查询当前实体四米范围内的所有羊(如果该实体是羊,则包括其自身),如果每只羊正上方的方块带有stone标签,则增加变量v.x
:
"v.x = 0;
for_each(v.pig, query.get_nearby_entities(4, 'minecraft:sheep'), {
v.x = v.x + v.pig->query.relative_block_has_all_tags(0, 1, 0, 'stone');
});"
如果“->”运算符的左侧有错误(值为null
,该实体之前已被清除,或者存在其他问题),则表达式不会计算右边的值,并返回0
。
break
该运算符用于提前退出“loop”或“for_each”。例如:
v.x = 1;
v.y = 1;
loop(10, {t.x = v.x + v.y; v.x = v.y; v.y = t.x; (v.y > 20) ? break;});
根据C风格的语言规则,这将立即退出最内部的活动循环。
如果使用下方示例:
v.x = 0;
loop(10, {loop(10, {v.x = v.x + 1; (v.x > 5) ? break;});});
当v.x
>5时,“break”语句将终止内部循环,并继续处理外部循环的脚本。由于v.x
未在外部循环之间重置,因此第二次进入内部循环时,这将使v.x
再添加1,然后再次退出内部循环,从而导致v.x
的最终值为6+1+1+1+…+1=15。
continue
“continue”函数按照C风格的语言规则执行函数,当前仅在循环中受支持。使用该函数可跳到当前循环的下一个迭代。关于内部/外部循环的更多详细信息,请参见上方的“break”。
下方示例将导致v.x
变为6.0
,因为一旦达到该值,剩余增量将被跳过。[注 2]
v.x = 0;
loop(10, {
(v.x > 5) ? continue;
v.x = v.x + 1;
});
??空值合并运算符
与C#中的空值合并运算符的工作方式类似,使用空值合并运算符可以引用可能存在或可能不存在的变量,而不会看到内容错误。以前,如果变量不存在,则会出现内容错误。这是为了确保变量始终正确初始化,以避免未初始化的变量错误,但这需要初始化脚本,或者在某些情况下需要一些复杂的解决方案来确保变量被初始化。现在,如果提前知道某个变量不会在脚本的第一次运行中初始化,则可以使用该运算符:
variable.x = (variable.x ?? 1.2) + 0.3;
上述示例中,如果有效,则使用variable.x
的值;如果variable.x
无效,则会使用1.2
。
下方列出了变量无效的情况:
- 尚未初始化
- 对已删除实体的引用
- 无效的引用
- 包含错误内容
“??”运算符仅对variable.
、temp.
和context.
有效,它们包含对数字或实体的引用,但不包含诸如材质、纹理或几何等资源(因为这些必须存在且有效,否则这将是内容错误)。如果第一个参数出现错误,它将返回第二个参数。[注 3]
分域示例
实体定义脚本
待补充
动画与动画控制器文件
待补充
渲染控制器
待补充
数组表达式
待补充
资源表达式
待补充
资源组成
几何
待补充
纹理
待补充
函数表达
数学函数
名称
|
描述
|
---|---|
math.abs(value) | value的绝对值。 |
math.acos(value) | value的反余弦值。 |
math.asin(value) | value的反正弦值。 |
math.atan(value) | value的反正切值。 |
math.atan2(y,x) | y/x的反正切值。 |
math.ceil(value) | 将value向上取整。 |
math.clamp(value,min,max) | 将value限定在最小值(min)到最大值(max)之间。 |
math.cos(value) | value的余弦值。 |
math.die_roll(num,low,high) | 返回num个随机数的总和,每个值的范围在最低(low)到最高(high)范围之间(注:生成的随机数不是像一般骰子那样的整数,若为此,请使用math.die_roll_integer)。 |
math.die_roll_integer(num,low,high) | 返回num个随机整数的总和,每个值的范围在最低(low)到最高(high)范围之间。 |
math.exp(value) | 计算value以e为底数的指数函数。 |
math.floor(value) | 将value向下取整。 |
math.hermite_blend(value) | |
math.lerp(start,end,t) | 返回[start,end]域以t(t值只能在0~1之间)为比例算出的差值。 |
math.lerprotate(start,end,0_to_1) | |
math.ln(value) | value的自然对数。 |
math.max(A,B) | 返回A和B中的最大值。 |
math.min(A,B) | 返回A和B中的最小值。 |
math.min_angel(value) | 将value(角度)最小化到[-180,180)的范围(单位:度)。 |
math.mod(value,denominator) | 返回value除以denominator(分母)后的余数。 |
math.pi | 返回常量π的浮点数形式。 |
math.pow(base,exponent) | 返回base(底数)的exponent(指数)次幂。 |
math.random(low,high) | 最低(low)到最高(high)范围内的随机数(注:随机数不包含low)。 |
math.random_integer(low,high) | 最低(low)到最高(high)范围内的随机整数(注:随机整数包含low和high)。 |
math.round(value) | 将value四舍五入取整。 |
math.sin(value) | value的正弦值。 |
math.sqrt(value) | value的平方根。 |
math.trunc(value) | 截短法取整。 |
查询函数
查询函数是布尔表达式,允许您查询引擎在不同情况下拥有的值。它们可以用在Molang表达式中。可用于控制位置,纹理,动画等内容。
例如:
"position": [ 0.0, "query.is_baby ? -8.0 : 0.0", "query.is_baby ? 4.0 : 0.0" ]
查询函数清单
名称
|
描述
|
---|---|
query.above_top_solid | 返回位于输入坐标正上方最高固体方块的高度。 |
query.actor_count | 返回上一帧中渲染的活动对象的数量。 |
query.all | 如果其他全部参数与第一个参数结果相同,则返回1.0,否则返回0.0。 |
query.all_animations_finished | 如果当前动画控制器下的所有动画至少播放了一次则返回1.0,否则返回0.0。 |
query.all_tags | 返回物品或方块所具有的所有指定标签。 |
query.anim_time | 返回动画自开始以来的时间(以秒为单位),如果动画未被调用则返回0.0。 |
query.any | 如果其他任意参数与第一个参数结果相同,则返回1.0,否则返回0.0 |
query.any_animation_finished | 如果当前动画控制器下的任意动画至少播放了一次则返回1.0,否则返回0.0。 |
query.any_tag | 返回物品或方块所具有的任意指定标签。 |
query.approx_eq | 如果所有参数都在0.000000之内,则返回1.0,否则返回0.0。 |
query.armor_color_slot | 将盔甲栏编号作为参数,并返回所查询的盔甲栏中盔甲的颜色。 |
query.armor_material_slot | 将盔甲栏编号作为参数,并返回所查询的盔甲栏中盔甲的材料类型。 |
query.armor_texture_slot | 将盔甲栏编号作为参数,并返回所查询的盔甲栏中盔甲的纹理类型。 |
query.average_frame_time | 以秒为单位返回过去n帧中的平均每帧的时间。 |
query.block_face | 返回点击方块的面。(向下 = 0.0,向上 = 1.0,北 = 2.0,南 = 3.0,西 = 4.0,东 = 5.0,未定义 = 6.0) |
query.block_property | 返回所查询的方块属性的值。 |
query.block_neighbor_has_all_tags | 查询方块边上的某个块(根据填入的x,y,z)所有tag是否等于填入的那个tag,如果是,返回1.0,否则返回0.0 |
query.block_neighbor_has_any_tag | 查询方块是否有tag等于填入的tag,如果是,返回1.0,否则返回0.0 |
query.blocking | 如果实体正在搬运或放置方块(例如末影人),则返回1.0,否则返回0.0。 |
query.body_x_rotation | 若对活动对象调用,则返回活动对象身体的x轴旋转角度,否则返回0.0。 |
query.body_y_rotation | 若对活动对象调用,则返回活动对象身体的y轴旋转角度,否则返回0.0。 |
query.bone_aabb | 返回轴对其的骨骼边界框作为结构体。 |
query.bone_origin | 返回骨骼的初始枢轴作为结构体。 |
query.bone_rotation | 返回骨骼的初始旋转角度作为结构体。 |
query.camera_distance_range_lerp | 以任意顺序取两个距离,并根据相对于这两个距离范围之间的相机距离返回对应数值。 |
query.camera_rotation | 返回相机的旋转角度。 |
query.can_climb | 如果实体可以攀爬,则返回1.0,否则返回0.0。 |
query.can_damage_nearby_mobs | 如果实体可以对附近的生物造成伤害,则返回1.0,否则返回0.0。 |
query.can_fly | 如果实体可以飞行,则返回1.0,否则返回0.0。 |
query.can_power_jump | 如果实体可以蓄力跳跃,则返回1.0,否则返回0.0。 |
query.can_swim | 如果实体可以游泳,则返回1.0,否则返回0.0。 |
query.can_walk | 如果实体可以行走,则返回1.0,否则返回0.0。 |
query.cape_flap_amount | 返回披风的飘起程度。 |
query.cardinal_facing | 返回玩家当前的面部朝向。 |
query.cardinal_facing_2d | 返回玩家当前面部在2D平面上的朝向。 |
query.cardinal_player_facing | 返回玩家当前的面部朝向。 |
query.combine_entities | 将来自所有参数的任何有效实体引用组合到单个数组中。注意:不保留顺序,并且会删除重复值和无效值。 |
query.count | 计数读取该内容包含的值的数量(将数组计为它们包含的元素数;非数组计为1)。 |
query.current_squish_value | 返回当前实体的压缩值,如果没有意义,这返回0.0。 |
query.day | 返回当前存档中度过的天数。 |
query.debug_output | 向开发构建的调试日志中输出一个Molang表达式运算的值。 |
query.delta_time | 以秒为单位返回自上一帧以来的时间。 |
query.distance_from_camera | 返回此活动对象或粒子发射器的基部到相机的距离 |
query.effect_emitter_count | 返回被调用方粒子类型的活跃粒子发射器总数。 |
query.effect_particle_count | 返回被调用方粒子类型的活跃粒子总数。 |
query.equipment_count | 返回活动对象携带的装备数量。 |
query.equipped_item_all_tags | 根据指定槽位以及欲查询的物品标签,如果被查询槽位中的装备拥有欲查询的所有标签,则返回1.0,否则返回0.0。 |
query.equipped_item_any_tag | 根据指定槽位以及欲查询的物品标签,如果被查询槽位中的装备拥有欲查询的任意标签,则返回1.0,否则返回0.0。 |
query.equipped_item_is_attachable | 如果此物品是附着物,则返回1.0,否则返回0.0。 |
query.eye_target_x_rotation | 如果有意义,则返回实体眼部的X轴旋转角度,否则返回0.0。 |
query.eye_target_y_rotation | 如果有意义,则返回实体眼部的Y轴旋转角度,否则返回0.0。 |
query.facing_target_to_range_attack | 如果实体正在进行范围攻击,则返回1.0,否则返回0.0。 |
query.frame_alpha | 返回AI渲染两帧之间的时间刻度比率。 |
query.get_actor_info_id | 返回活动对象的数字ID。 |
query.get_animation_frame | 返回动画当前帧,如果无意义,则返回0.0 |
query.get_default_bone_pivot | 获取指定骨骼朝向枢轴的指定轴。 |
query.get_locator_offset | 获取指定定位器偏移量的指定坐标轴。 |
query.get_root_locator_offset | 获取根模型指定定位器偏移量的指定坐标轴。 |
query.ground_speed | 返回实体的对地速度(单位为米每秒)。 |
query.has_any_family | 如果实体拥有欲查询的任意家族名称,则返回1.0,否则返回0.0。 |
query.has_armor_slot | 将盔甲栏编号作为参数,如果实体在欲查询的盔甲栏中有盔甲,则返回1.0,否则返回0.0 |
query.has_biome_tag | 查询方块放置目标原点位置的生物群系是否具有指定的标签。 |
query.has_block_property | 如果相关方块有指定的方块属性,则返回1.0,否则返回0.0。 |
query.has_cape | 如果玩家有披风,则返回1.0,否则返回0.0。 |
query.has_collision | 如果实体有碰撞箱,则返回1.0,否则返回0.0。 |
query.has_gravity | 如果实体受重力影响,则返回1.0,否则返回0.0。 |
query.has_owner | 如果实体有主人ID,则返回true,否则返回false。 |
query.has_rider | 如果实体有乘骑者,则返回1.0,否则返回0.0。 |
query.has_target | 如果实体有目标,则返回1.0,否则返回0.0。 |
query.head_roll_angel | 如果有意义,则返回实体头部的翻滚角旋转度数,否则返回0.0 |
query.head_x_rotation | 如果有意义,则返回实体的N个头的X轴旋转角度,否则返回0.0。 |
query.head_y_rotation | 如果有意义,则返回实体第N个头的Y轴旋转角度,否则返回0.0。 |
query.health | 返回当前实体的生命值,如果调用该实体的生命值没有意义,则返回0.0。 |
query.heightmap | 获取高度图。 |
query.hurt_direction | 返回此活动对象的伤害方向,否则返回0.0。 |
query.hurt_time | 返回此活动对象的伤害时间,否则返回0.0。 |
query.in_range | 如果第一个参数介于第二个参数(最小值)和第三个参数(最大值)之间,则返回1.0,否则返回0.0。 |
query.invulnerable_ticks | 如果有意义,则返回实体剩余的无敌时间(单位为游戏刻),否则返回0.0。 |
query.is_admiring | 如果实体羡慕你手上的物品,则返回1.0,否则返回0.0 |
query.is_alive | 如果实体正存活着,则返回1.0,否则返回0.0。 |
query.is_angry | 如果实体处于愤怒状态,则返回1.0,否则返回0.0。 |
query.is_attached_to_entity | 如果活动对象附着在实体上,则返回1.0,否则返回0.0。 |
query.is_avoiding_block | 如果实体正在避开方块,则返回1.0,否则返回0.0。 |
query.is_avoiding_mobs | 如果实体正在躲避生物,则返回1.0,否则返回0.0。 |
query.is_baby | 如果实体处于幼年,则返回1.0,否则返回0.0。 |
query.is_breathing | 如果实体正在呼吸,则返回1.0,否则返回0.0。 |
query.is_bribed | 如果实体为玩家服务则返回1.0,否则返回0.0 |
query.is_carrying_block | 如果实体拿着方块,则返回1.0,否则返回0.0。 |
query.is_casting | 如果实体正在施法,则返回1.0,否则返回0.0。 |
query.is_celebrating | 如果实体正在庆贺,则返回1.0,否则返回0.0。 |
query.is_celebrating_special | 如果实体正在特殊庆贺,则返回1.0,否则返回0.0。 |
query.is_charged | 如果实体变为闪电苦力怕,则返回1.0,否则返回0.0。 |
query.is_charging | 如果实体正在充能,则返回1.0,否则返回0.0。 |
query.is_chested | 如果实体装配有箱子,则返回1.0,否则返回0.0。 |
query.is_critical | 如果实体发生暴击,则返回1.0,否则返回0.0。 |
query.croaking | 如果实体正在蛙鸣,则返回1.0,否则返回0.0。 |
query.is_dancing | 如果实体正在跳舞,则返回1.0,否则返回0.0。 |
query.is_delayed_attacking | 如果实体处于攻击状态,则返回1.0,否则返回0.0。 |
query.is_digging | 如果实体正在挖掘,则返回1.0,否则返回0.0。 |
query.is_eating | 如果实体正在进食,则返回1.0,否则返回0.0。 |
query.is_eating_mob | 如果实体正在吞噬其他实体,则返回1.0,否则返回0.0。 |
query.is_elder | 如果实体处于成年,则返回1.0,否则返回0.0。 |
query.is_emoting | 如果实体正在播放表情,则返回1.0,否则返回0.0。 |
query.is_enchanted | 如果活动对象已附魔,则返回1.0,否则返回0.0。 |
query.is_fire_immune | 如果实体对火焰免疫,则返回1.0,否则返回0.0。 |
query.is_first_person | 如果实体处于第一人称视角,则返回1.0,否则返回0.0。 |
query.is_ghost | 如果实体处于死亡状态,则返回1.0,否则返回0.0。 |
query.is_gliding | 如果实体正在滑动,则返回1.0,否则返回0.0。 |
query.is_grazing | 如果实体正在吃方块,则返回1.0,否则返回0.0。 |
query.is_idling | 如果实体处于闲置状态,则返回1.0,否则返回0.0。 |
query.is_ignited | 如果实体被点燃,则返回1.0,否则返回0.0。 |
query.is_illager_captain | 如果实体是袭击队长,则返回1.0,否则返回0.0。 |
query.is_in_contact_with_water | 如果实体与任何水源(水、雨或喷溅药水)接触,则返回1.0,否则返回0.0。 |
query.is_in_love | 如果实体正在发情,则返回1.0,否则返回0.0。 |
query.is_in_ui | 如果实体正在UI中,则返回1.0,否则返回0.0。 |
query.is_in_water | 如果实体处于水中,则返回1.0,否则返回0.0。 |
query.is_in_water_or_rain | 如果实体处于水中或雨中,则返回1.0,否则返回0.0。 |
query.is_interested | 如果实体感兴趣,则返回1.0,否则返回0.0。 |
query.is_invisible | 如果实体处于隐身状态,则返回1.0,否则返回0.0。 |
query.is_item_equipped | 返回主手或副手是否持有物品。 |
query.is_jumping | 如果实体正在跳跃,则返回1.0,否则返回0.0。 |
query.is_laying_down | 如果实体处于躺下的状态,则返回1.0,否则返回0.0。 |
query.is_laying_egg | 如果实体正在产卵(例如海龟]]),则返回1.0,否则返回0.0。 |
query.is_leashed | 如果实体被栓绳牵引,则返回1.0,否则返回0.0。 |
query.is_levitating | 如果实体正在漂浮,则返回1.0,否则返回0.0。 |
query.is_moving | 如果实体正在移动,则返回1.0,否则返回0.0。 |
query.is_name_any | 可有一个或多个参数,如果实体的名称是任意参数,则返回 1.0,否则返回 0.0。 |
query.is_on_fire | 如果实体着火了,则返回1.0,否则返回0.0。 |
query.is_on_ground | 如果实体正处于地面上,则返回1.0,否则返回0.0。 |
query.is_on_screen | 如果实体在屏幕相机内,则返回1.0,否则返回0.0。 |
query.is_onfire | 如果实体着火了,则返回1.0,否则返回0.0。 |
query.is_orphaned | 如果实体是孤儿,则返回1.0,否则返回0.0。 |
query.is_owner_identifier_any | 返回父活动对象标识符是否为指定的任意字符串。 |
query.is_persona_or_premium_skin | 如果此玩家拥有角色或付费皮肤,则返回1.0,否则返回0.0。 |
query.is_powered | 如果实体已充能,则返回1.0,否则返回0.0。 |
query.is_pregnant | 如果实体怀孕了,则返回1.0,否则返回0.0。 |
query.is_ram_attacking | 如果实体正在使用随机攻击,则返回1.0,否则返回0.0。 |
query.is_resting | 如果实体在休息,则返回1.0,否则返回0.0。 |
query.is_riding | 如果实体正处于骑乘状态,则返回1.0,否则返回0.0。 |
query.is_roaring | 如果实体正在咆哮,则返回1.0,否则返回0.0。 |
query.is_rolling | 如果实体正在翻滚,则返回1.0,否则返回0.0。 |
query.is_saddled | 如果实体拥有鞍,则返回1.0,否则返回0.0。 |
query.is_scared | 如果实体受到惊吓,则返回1.0,否则返回0.0。 |
query.is_selected_item | 如果玩家选中了物品栏中的物品,则返回1.0,否则返回0.0。 |
query.is_shaking | 如果实体正在颤抖,则返回1.0,否则返回0.0。 |
query.is_shaking_wetness | 如果实体正在抖水,则返回1.0,否则返回0.0。 |
query.is_sheared | 如果实体拥有minecraft:is_sheared组件则返回1.0,否则返回0.0。 |
query.is_shield_powered | 如果有意义,则实体有激活的能量盾时返回1.0,否则返回0.0。 |
query.is_silent | 如果实体静默,则返回1.0,否则返回0.0。 |
query.is_sitting | 如果实体坐着,则返回1.0,否则返回0.0。 |
query.is_sleeping | 如果实体正在睡觉,则返回1.0,否则返回0.0。 |
query.is_sneaking | 如果实体正在潜行,则返回1.0,否则返回0.0。 |
query.is_sneezing | 如果实体正在打喷嚏,则返回1.0,否则返回0.0。 |
query.is_sprinting | 如果实体正在冲刺,则返回1.0,否则返回0.0。 |
query.is_stackable | 如果实体是可堆叠的,则返回1.0,否则返回0.0。 |
query.is_stalking | 如果实体正在潜近目标,则返回1.0,否则返回0.0。 |
query.is_standing | 如果实体站立,则返回1.0,否则返回0.0。 |
query.is_stunned | 如果实体处于昏迷状态,则返回1.0,否则返回0.0。 |
query.is_swimming | 如果实体在游泳,则返回1.0,否则返回0.0。 |
query.is_tamed | 如果实体被驯服,则返回1.0,否则返回0.0。 |
query.is_transforming | 如果实体在转化,返回1.0,否则返回0.0。 |
query.is_using_item | 如果实体正在使用一个物品,则返回1.0,否则返回0.0。 |
query.is_wall_climbing | 如果实体在爬墙,则返回1.0,否则返回0.0。 |
query.item_in_use_duration | 返回此物品被使用的最高持续时间(以秒为单位),如果没有意义,则返回0.0。 |
query.item_is_charged | 如果物品被充能,则返回1.0,否则返回0.0。 |
query.item_max_use_duration | 如果有意义,则返回此物品可被使用的最大时间,否则返回0.0。 |
query.item_remaining_use_duration | 返回此物品的剩余使用时间(以秒为单位),如果没有意义,则返回0.0。 |
query.item_slot_to_bone_name | 返回实体映射到对应槽位的骨骼名称。 |
query.key_frame_lerp_time | 返回前一关键帧和后一关键帧之间的比率。 |
query.last_frame_time | 返回最后一帧的时间(以秒为单位)。 |
query.last_hit_by_player | 如果实体的上一次受伤由玩家造成,则返回1.0,否则返回0.0。 |
query.lie_amount | 返回实体的躺下程度。 |
query.life_span | 返回实体的有限生命周期,如果其生命周期无限,则返回0.0。 |
query.life_time | 返回此动画开始以来的持续时间(以秒为单位)。 |
query.lod_index | 以0为基准值返回活动对象到相机预设距离范围的对应值。 |
query.log | 向内容日志输出当前表达式的值。 |
query.main_hand_item_max_duration | 返回主手物品的最大使用时间,如果没有意义,则返回0.0。 |
query.main_hand_item_use_duration | 返回主手物品的使用时间,如果没有意义,则返回0.0。 |
query.mark_variant | 返回实体的变种标记,如果没有意义,则返回0.0。 |
query.max_durability | 查询物品最大耐久值,如果没有意义,则返回0.0。 |
query.max_health | 查询实体最大生命值,如果没有意义,则返回0.0。 |
query.max_trade_tire | 如果有意义,则返回此实体的最大交易层级,否则返回0.0。 |
query.maximum_frame_item | |
query.minimum_frame_time | |
query.model_scale | 返回此实体的缩放比例,如果没有意义,则返回0.0 |
query.modified_distance_moved | 返回实体修改过的移动方向,如果没有意义,则返回0.0 |
query.modified_move_speed | 返回实体更改过的移速,如果没有意义,则返回0.0 |
query.moon_brightness | 返回月亮当前亮度,如果没有意义,则返回0.0 |
query.moon_phase | 返回月亮当前的阶段,如果没有意义,则返回0.0 |
query.movement_direction | 查询实体运动方向,如果没有意义,则返回0.0 |
query.noise | 获取柏林噪声类型。 |
query.on_fire_time | 查询实体着火时间,如果没有意义则返回0.0。 |
query.out_of_control | 查询实体是否失控,如果没有意义,则返回0.0。 |
query.player_level | 返回实体的等级,否则返回0.0。 |
query.position | 返回实体在世界中的绝对坐标。它根据一个参数来返回对应轴的坐标,0代表x轴,1代表y轴,2代表z轴。 |
query.position_delta | 返回实体上一帧的相对位移。它接收一个参数来返回对应轴的坐标,0代表x轴,1代表y轴,2代表z轴。 |
query.previous_squish_value | 返回实体当前的压缩值,如果没有意义,则返回0.0。 |
query.remaining_durability | 返回物品的剩余耐久度。 |
query.roll_counter | 返回实体的翻滚计数器。 |
query.rotation_to_camera | 返回瞄准相机_(游戏系统)所需的对应轴旋转角度。 |
query.shake_angel | 如果有意义,则返回实体的摇晃角度角度,否则返回0.0。 |
query.shake_time | 返回实体的摇晃时间。 |
query.shield_blocking_bob | 返回副手盾牌在阻挡被击中时应该向下平移的量。 |
query.sit_amount | 返回实体的当前坐下程度。 |
query.skin_id | 返回实体的皮肤ID。 |
query.sleep_rotation | 返回玩家睡在床上应该旋转的角度。 |
query.sneeze_counter | 返回实体的喷嚏计数器。 |
query.spellcolor | 返回指定实体的魔咒颜色结构体。 |
query.standing_scale | 返回实体站立程度的度量。 |
query.structural_integrity | 返回活动对象的完整性,否则返回0.0。 |
query.swell_amount | 返回实体的膨胀程度。 |
query.swelling_dir | 如果有意义,则返回实体的膨胀方向,否则返回0.0。 |
query.swim_amount | 返回当前实体正在游泳的程度。 |
query.tail_angel | 如果有意义,则返回实体尾巴的旋转角度,否则返回0.0。 |
query.target_x_rotation | 如果实体有目标,则返回对准目标的X轴旋转角度,否则返回0.0。 |
query.target_y_rotation | 如果实体有目标,则返回对准目标的Y轴旋转角度,否则返回0.0。 |
query.texture_frame_index | 返回经验球的图标层级。 |
query.time_of_day | 返回当前实体所在维度的时间。 |
query.time_stamp | 返回当前存档的时间戳。 |
query.total_emitter_count | 返回世界上活跃的粒子发射器总数。 |
query.total_particle_count | 返回世界上活跃的粒子总数。 |
query.trade_tier | 如果有意义,则返回实体的交易层级,否则返回0.0。 |
query.unhappy_counter | 返回实体的好感度。 |
query.variant | 返回实体的变种层级。 |
query.vertical_speed | 返回实体向上或向下的速度(以秒为单位),正数为向上。 |
query.walk_distance | 返回实体的行走距离。 |
query.wing_flap_position | 如果有意义,则返回实体的鞘翅位置,否则返回0.0。 |
query.wing_flap_speed | 如果有意义,则返回实体的鞘翅速度,否则返回0.0。 |
query.yaw_speed | 返回实体的偏航速度。 |
实验性查询函数清单
已弃用函数
名称
|
类型
|
弃用版本
|
描述
|
替代函数
|
---|---|---|---|---|
query.cardinal_block_face_placed_on | 查询函数 | 返回点击方块的面。 | query.block_face | |
query.get_equipped_item_name | 查询函数 | 返回实体手持物品的名称,如果无意义,则返回0.0。 | ||
query.get_name | 查询函数 | 如果有意义,则返回实体的名称,否则返回0.0。 | query.is_name_any | |
query.overlay_alpha | 查询函数 | |||
query.owner_identifier | 查询函数 | 返回一串父类实体拥有的附命名空间标识符字符串,常用来判断物品持有者的类型。 | query.is_owner_identifier_any |
实验性运算符
版本化更改
- 重定向 Molang/版本化更改
历史
基岩版 | |||||
---|---|---|---|---|---|
1.7.0 | 1.7.0.2 | 加入了MoLang。 | |||
1.16.200 | 1.16.200.51 | 修复了当在已重命名的物品上使用query.get_equired_item_name无法返回正确的结果的问题。现在将其与游戏版本绑定,以便在世界绑定了指定版本时返回其旧的名称。 | |||
1.16.200.52 | 新增了query.cardinal_facing_2d来获取一个不包含上下的水平面方向。 | ||||
1.16.200.55 | 修复了query.cardinal_block_face_placed_on不与minecraft:on_player_placing一起工作的问题。 | ||||
Geometry、Material和Texture变量名现在可以包含“.”。 | |||||
1.16.230 | 1.16.230.50 | 修复了query.is_in_ui使其可以对数据驱动实体在UI中渲染时使用。 | |||
1.17.0 | 1.17.0.52 | 新增了一个查询函数以获取默认骨骼枢轴。 | |||
更新了查询函数,用于返回基于给定参数的正规化物品剩余使用时间。 | |||||
1.17.10 | 1.17.10.20 | 现在可以对末影龙使用query.wing_flap_position了。 | |||
新增了query.show_bottom来用于确定实体底部是否被渲染。 | |||||
新增了query.death_time用于确定生物开始死亡后经过的时间。 | |||||
新增了math.min_angel来将角度最小化到[-180,180)的范围。 | |||||
1.17.20 | 1.17.20.23 | 附加包清单文件中的min_engine_version 字段现在可以被传入MoLang解析。 | |||
1.17.30 | 1.17.30.20 | 修复了query.item_remaining_use_duration缩放不正确或结果倒置的问题(这是为了添加文档中对1.17.30引擎版本以后的版本化变更)。 | |||
新增了facing_target_to_range_attack来返回被查询活动对象的minecraft:behavior.ranged_attack AI意向当前是否在执行。 | |||||
实验性查询函数和语言表达式现在在文档中列出。 | |||||
文档从query.item_remaining_use_duration开始详细介绍版本化变更。 | |||||
1.17.30.21 | query.bone_orientation_trs现在会返回正确的Y轴平移及缩放结果。 | ||||
新增了query.block_neighbor_has_any_tags和query.block_neighbor_has_all_tags两项查询函数(需要实验性玩法)。 | |||||
当进入一个资源包中使用了含有query.armor_color_slot的世界时,将不再发生崩溃。 | |||||
将实验性的查询函数(除与活动对象属性相关的查询函数外)移到了新的“实验性MoLang功能”实验性玩法选项中。 | |||||
1.17.30.23 | MoLang改名为Molang。 | ||||
为物品冷却加入了相关的查询函数: query.is_cooldown_type,query.cooldown_time,和query.cooldown_time_remaining。 | |||||
更新了更多的Molang内容日志报错来表示对应的运算符或查询函数。 | |||||
1.17.40 | 1.17.40.20 | 为text + 3 等在之前被忽略的表达式加入了新的编译错误报告。 | |||
修复了query.item_remaining_use_duration给出的结果会不正确缩放或倒置的问题。 | |||||
1.17.40.21 | 现在包含大写字母的Molang表达式会被正确解析了。 | ||||
query.get_equipped_item_name查询函数现在会正确识别海晶灯。 | |||||
为1 + (9 10) 等在之前被忽略的表达式加入了新的编译错误报告。 | |||||
1.18.0 | 1.18.0.25 | 修复了未将Molang表达式的min_engine_version标记为仅1.17.40或更高版本时触发的内容日志报错。 | |||
1.18.10 | 1.18.10.22 | 加入非实验性的is_name_any、is_item_name_any和is_owner_identifier_any查询函数。 | |||
修复了relative_block_has_all_tags、block_neighbor_has_all_tags和biome_has_all_tags查询函数应该需要所有标签而不应该是任何标签的问题。 | |||||
修复了嵌套的条件(三元)运算符解析顺序应该为从右到左而不应该是从左到右的问题。 |
漏洞
关于“Molang”的漏洞在国际版中由漏洞追踪器维护,请在此报告漏洞。