- 致编者:请牢记我们的域名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
陳述式將用來退出目前Molang腳本作用域並計算其後運算式的值,類似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>
|
實體變數。 |
?: | 三元條件運算子。當問號左邊的運算式為真,則將問號與冒號中間運算式的值作為整個運算式的取值,反之則將冒號後面運算式的值作為整個運算式的取值。 |
? | 二元條件運算子。當運算子左邊的運算式為真,則將右邊運算式的值作為整個運算式的取值,反之直接輸出0。 |
this | 該腳本(在指定上下文的情況下)最終寫入值的目前值。 |
return | 用於在複雜運算式中計算其後的陳述式並停止腳本的執行,然後傳回計算出的值。 |
-> | 指針運算子,用於存取來自不同實體的數據。 |
context.<variable_name>
|
上下文變數。 |
loop | 用於重複執行一段或多段陳述式N次。 |
for_each | 用於遍歷迭代一個實體陣列。 |
break | 用於提前退出loop或for_each的作用域。 |
continue | 用於跳過loop或for_each迭代陳述式的剩餘部分,並進入到下一次迭代。 |
[] | 用於存取陣列的方括弧。 |
邏輯運算子[編輯]
運算子 | 描述
|
範例 |
---|---|---|
! | 邏輯非運算子(一元運算子)。用於反轉其後運算式的真假,使一個運算式的結果從true 變為false ,從false 變為true 。
|
!query.is_sleeping
|
&& | 邏輯與運算子(二元運算子)。用於將兩個運算式連接成一個。只有當兩個運算式都為true ,整個運算式的結果才能為true 。
|
query.health == 10 && query.is_moving
|
|| | 邏輯或運算子(二元運算子)。用於將兩個運算式連接成一個。只要其中任意一個運算式為true 整個運算式都為true 。
|
query.moving || query.is_swimming
|
< | 小於運算子。用於比較左右兩邊運算式數值的大小,左邊小於右邊即為true ,反之則為false 。
|
query.health < 5
|
<= | 小於等於運算子。用於比較左右兩邊運算式數值的大小,左邊小於或等於右邊即為true ,反之則為false 。
|
query.block_face <= 2
|
>= | 大於等於運算子。用於比較左右兩邊運算式數值的大小,左邊大於或等於右邊即為true ,反之則為false 。
|
math.ceil(query.health) >=query.on_fire_time
|
> | 大於運算子。用於比較左右兩邊運算式數值的大小,左邊大於右邊即為true ,反之則為false 。
|
query.day > 7
|
== | 等於運算子。當左邊與右邊運算式的結果相等時即為true ,反之則為false 。
|
query.block_face == query.cardinal_player_facing
|
!= | 不等於運算子。當左邊與右邊運算式的結果不相等時即為true ,反之則為false 。
|
query.body_x_rotation != query.body_y_rotation
|
優先級[編輯]
當不使用圓括弧時,Molang運算子遵循下表順序來確定先運算哪個運算式,這與C或C++類似。下表中優先級從上往下依次降低,優先級較高的運算子在運算式中會先進行計算。當運算子具有相同的優先級時,它們按從左往右的順序進行計算,但三元條件運算子除外,它將會從右往左計算。使用圓括弧可以直接控制計算順序,一般用於更複雜的運算式。
優先級組 | 描述
|
---|---|
邏輯非 | 邏輯非「!」邏輯運算子。 |
乘除 | 乘法「*」和除法「/」算術運算子。 |
加減 | 加法「+」和減法「-」算術運算子。 |
比較 | 「<」、「<=」、「>」、「>=」關係運算子。 |
相等檢查 | 相等「==」和不相等「!=」關係運算子。 |
邏輯與 | 邏輯與「&&」邏輯運算子。 |
邏輯或 | 邏輯或「||」邏輯運算子。 |
三元條件 | 三元條件運算子「?:」。當有多個三元條件運算子時,從右往左計算。 |
空值合併 | 空值合併運算子「??」。 |
變數[編輯]
一個變數的生命週期可以是以下三種之一:臨時變數、實體變數和上下文變數。
- 臨時變數是可讀寫的,並且依照C語言的規則,它們應在它們所定義的作用域中是有效的。出於效能原因,在目前的腳本執行中,臨時變數的生存週期仍是全域的,並且可能在它們所定義的最外層作用域之外仍能傳回一個有效值,故在複雜的運算式中需多加注意。
- 實體變數是可讀寫的,並在實體的生命週期內將其值儲存在實體上。在目前時刻這些變數都不會被儲存,所以退出和重新載入世界將使它們重新初始化。同樣,如果實體從世界中消失,實體上的任何變數都將丟失。
- 上下文變數是唯讀的,並且只對執行它們的腳本有效。遊戲內部定義了這些變數。
值[編輯]
- 所有的數字值都是浮點數。
- 布爾值都會被轉換並儲存為浮點值,false和true分別轉換為0.0和1.0。
- 對於布爾檢測,等於0.0的浮點值為假,不等於0.0的值為真。
- 對於陣列下標,浮點數將採用C語言形式的強制轉換轉換為整型,當出現負數時鉗制為0,數字過大時頂封到與陣列長度相同。
- 其他支援的型別有:
- 錯誤(如被零除、變數丟失、空引用等)通常傳回0.0值。
查詢函式[編輯]
查詢函式允許Molang腳本讀取遊戲數據。如果查詢函式不含帶參數,則括弧()
可以不寫。有關查詢函式的完整列表,可參見下方的查詢函式清單。
別名[編輯]
為了減少打字負擔並在閱讀和編寫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]
參數[編輯]
函式的參數寫在函式末尾的圓括弧中,每兩個參數之間使用,
隔開,例如:
math.random(0,3)
函式名math.random
與參數括弧(0,3)
之間不能有空格,每個參數兩邊允許有任意數量的空格。
Molang中並不是所有的函式都能使用參數;不同函式中參數的位置不同,作用也不同。
運算表達[編輯]
公共變數[編輯]
通常,一個生物的變數被認為是該生物的私有變數,而另一個生物無法存取。要向其他生物開放此變數的唯讀存取權限,需要在所擁有實體的資源定義中對該變數設定"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]
分域範例[編輯]
翻譯後需按照本Wiki的格式重新組織文字語言。 |
實體腳本定義[編輯]
在定義檔案中有一個預計算值的部分,這些值在動畫和繪製控制器被處理之前立即執行,並儲存在實體中。其目的是預先計算您可能希望在腳本中再次使用的任何昂貴的複雜值,長作用域索引變數更新,或者通常是任何一次性計算的呈現刻。
"scripts": {
"pre_animation": [
"variable.my_constant = (Math.cos(query.modified_distance_moved * 38.17) * query.modified_move_speed;",
"variable.my_constant2 = Math.exp(1.5);"
]
},
動畫與動畫控制器檔案[編輯]
這些動畫皆是數字操作,用於控制播放哪些動畫以及如何設定其骨骼動畫。 variable.variable_name
與 query.function_name
指的是目前正被繪製的實體。 使用其可存取語言中的任何內容,但不包含諸如材質、紋理或幾何等資源(因為這些必須存在且有效,否則這將是內容錯誤)。
繪製控制器[編輯]
這裏有幾種不同的表達方式,其中上下文可表明其允許與否。與動畫控制器一樣,實體存取器指的是目前實體,但是取決於其上下文中內容還可以存取材質、紋理與幾何。這裏有兩種不同的繪製控制器:
- 陣列定義(可選)
- 資源使用(必需)
「陣列定義」部分允許您根據需要按資源型別建立資源陣列,以便您在「資源使用」部分中引用。
陣列運算式[編輯]
對於三種資源型別(材質、紋理與幾何),其中任意一種都可以定義為一個資源陣列。資源的名稱是定義檔案中的好名字(nice-name,可能指的是機器可識別的變數名)。下面以以材質為例:
"arrays":
{
"materials": {
"array.my_array_1": ["material.a", "material.b", "material.c"],
"array.my_array_2" : ["material.d", "material.e"],
"array.my_array_3" : ["array.my_array_1", "material.my_array_2"],
"array.my_array_4" : ["array.my_array_2", "material.my_array_3"],
"array.my_array_5" : ["array.my_array_1", "material.my_array_1", "material.my_array_4"],
"array.my_array_6" : ["array.my_array_1", "material.f"],
...
},
請注意,陣列的所有元素必須是同一型別。即紋理陣列只能包含紋理為元素,其他亦然。
一個陣列可以引用零個或多個陣列(如果需要,包括重複的陣列)且同樣可以引用零個或多個材質(再説一遍!如果需要,可以包括重複的陣列)的任意組合,且可以有任意個陣列,每個陣列包含任意個元素。同理,如果陣列的成員中包含陣列,則它們的長度也不必相同。在「資源使用」部分中為陣列編制索引時,要使用數字運算式。若運算式值為負,則會以零為索引。任何非負索引都將轉換為整數,並根據陣列的大小進行整理,原理如下:
index = max(0, expression_result) % array_size
資源運算式[編輯]
資源運算式必須根據上下文傳回特定型別的單個資源。
例如,在 geometry
組,必須生成將生成單個geometry的運算式。一些例子:
以每秒一次的速率在geometry陣列中循環
"geometry": "array.my_geometries[query.anim_time]"
根據實體標誌選擇geometry
"geometry": "query.is_sheared ? geometry.sheared : geometry.woolly"
使用特定的geometry
"geometry": "geometry.my_geo"
睡眠時使用特定的geometry,否則根據餘弦曲線遍歷陣列,當餘弦曲線為負時,幾乎有一半的時間使用陣列第1個內容。
"geometry": "query.is_sleeping ? geometry.my_sleeping_geo : array.my_geos[math.cos(query.anim_time * 12.3 + 41.9) * 10 + 0.6]"
資源段落[編輯]
幾何[編輯]
geometry部分指定繪製時要使用的geometry。您可以在定義檔案中指定儘可能多的繪製控制器,單個繪製控制器僅關注如何繪製單個geometry。注意,geometry可以使用任意數量的骨骼和多邊形進行任意複雜的操作。
材質[編輯]
「材質」部分指定如何映射geometry的骨骼的材質。單個材質將映射到整個geometry上。材質的運算式按所列順序計算。每個陳述式的第一部分是要應用材質的模型骨骼的名稱,第二部分是要使用的材質。模型部件名可以使用 *
進行通配符匹配。例如 :
"materials": [
{ "*": "Material.default" },
{ "TailA": "array.hair_colors[variable.hair_color]" },
{ "Mane": "array.hair_colors[variable.hair_color]" },
{ "*Saddle*": "variable.is_leather_saddle ? material.leather_saddle : material.iron_saddle" }
],
- This will start by applying Material.default to all model parts.
- It will set the material on a model part named
TailA
to the result of the expressionArray.hairColors[variable.hair_color]
. This will look up some previously created variable on the entity named hair_color and use that to index into a material array calledarray.hair_colors
defined in this render controller. This will overwrite the Material.default material set in the line above. - It will look up the same material as the expression is identical, and apply it to the
Mane
model part. - If will find any model part starting with, ending with, or containing
Saddle
(case sensitive) and change its material to eithermaterial.leather_saddle
ormaterial.iron_saddle
depending on the previously set entity variablevariable.is_leather_saddle
.
函式表達[編輯]
數學函式[編輯]
名稱
|
描述
|
---|---|
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(範圍0~1,即0%~100%)為比例進行插值。 |
math.lerprotate(start,end,t) | 在圓上從start角度到end角度的最小角度方向以t(範圍0~1,即0%~100%)為比例進行插值。 |
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 | 如果實體變為閃電Creeper,則傳回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 |
內建變數[編輯]
Mojang為遊戲內建了一些硬編碼的變數,這些變數可以在對應的地方起特殊作用。
實體變數[編輯]
名稱 | 描述
|
---|---|
variable.aabb.x | |
variable.aabb.y | |
variable.aabb.z | |
variable.aabb_dimension.x | |
variable.aabb_dimension.y | |
variable.actor.speed | |
variable.cloud_lifetime | |
variable.cloud_radius | |
variable.color.a | 顏色(透明度通道) |
variable.color.b | 顏色(藍色通道)。 |
variable.color.g | 顏色(綠色通道) |
variable.color.r | 顏色(紅色通道) |
variable.direction.x | |
variable.direction_x | |
variable.direction.y | |
variable.direction_y | |
variable.direction.z | |
variable.direction_z | |
variable.direction_vector.x | |
variable.direction_vector.y | |
variable.direction_vector.z | |
variable.emitter_age | Age since the current loop started for the emitter |
variable.emitter_intensity | |
variable.emitter_lifetime | How long the current loop lasts for the emitter |
variable.emitter_radius | |
variable.emitter_random_1 | 隨機數1號,範圍0.0~1.0,在發射器目前循環的作用域中固定 |
variable.emitter_random_2 | 隨機數2號,範圍0.0~1.0,在發射器目前循環的作用域中固定 |
variable.emitter_random_3 | 隨機數3號,範圍0.0~1.0,在發射器目前循環的作用域中固定 |
variable.emitter_random_4 | 隨機數4號,範圍0.0~1.0,在發射器目前循環的作用域中固定 |
variable.emitter_texture_coordinate.u | 紋理在紋理圖集中的X座標錨點(浮點數) |
variable.EmitterTextureCoord.u | |
variable.emitter_texture_coordinate.v | 紋理在紋理圖集中的Y座標錨點(浮點數) |
variable.EmitterTextureCoord.v | |
variable.emitter_texture_size.u | 紋理X軸尺寸除以紋理圖集的X軸尺寸(浮點數) |
variable.EmitterTextureSize.u | |
variable.emitter_texture_size.v | 紋理X軸尺寸除以紋理圖集的Y軸尺寸(浮點數) |
variable.EmitterTextureSize.v | |
variable.entity_scale | When the effect is attached to an entity, this value is the scale of the entity |
variable.is_outside_water | |
variable.particlecount | |
variable.particlesize | |
variable.particle_age | 粒子存活時間 |
variable.particle_lifetime | 粒子生命週期長度 |
variable.particle_multiplier | |
variable.particle_random_1 | 粒子隨機數1號,範圍0.0~1.0,在粒子生命週期內固定 |
variable.particle_random_2 | 粒子隨機數2號,範圍0.0~1.0,在粒子生命週期內固定 |
variable.particle_random_3 | 粒子隨機數3號,範圍0.0~1.0,在粒子生命週期內固定 |
variable.particle_random_4 | 粒子隨機數4號,範圍0.0~1.0,在粒子生命週期內固定 |
variable.size_modifier | |
variable.speed_modifier | |
variable.velocity_scalar |
上下文變數[編輯]
名稱 | 描述 |
---|---|
context.is_first_person | |
context.item_slot | |
context.player_offhand_arm_height | |
context.other |
實驗性運算子[編輯]
未來的一些運算子可能暫時屬於實驗性玩法,它們將在此處列出。目前Mojang尚未加入任何實驗性運算子。
版本化變更[編輯]
清單檔案中的"min_engine_version"
決定了Molang運算式在附加包中以哪個遊戲版本的規則進行運作。任何版本小於或等於"min_engine_version"
的版本化變更都能夠起作用。
最低引擎版本[注 4] | 變更內容 |
---|---|
1.17.30 | 修復了query.item_remaining_use_duration從刻到秒轉換時的問題(乘以20而不是除以)。還修復了該查詢函式中從1降到0而不是從0升到1的正規化邏輯。 |
1.17.40 | 為以前可能會產生意外連接嘅無效運算式加入了一些新的報錯資訊。例如'text' + 1 現在將導致內容記錄報錯。
|
增加了對圓括弧或方括弧中太多運算子的錯誤檢測,例如:1+(2 3) 。還為遇到未知符號時加入了更明確的錯誤檢測。
| |
1.18.10 | 修復了嵌套的條件(三元)運算子解析順序應該為從右到左而不應該是從左到右的問題。以前嵌套的條件運算式如A ? B : C ? D : E 將計算為(A ? B : C) ? D : E ,現在它們計算為A ? B : (C ? D : E) 。
|
1.18.20 | 修復了使邏輯與在邏輯或之前計算,並使比較運算子在相等運算子之前計算。例如A && B || C 現在計算為(A && B) || C 而非A && (B || C) ,以及A < B == C > D 現在計算為(A < B) == (C > D) 而不是((A < B) == C) > D 。
|
歷史[編輯]
基岩版 | |||||
---|---|---|---|---|---|
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」的錯誤在國際版中由錯誤追蹤器維護,請在此回報錯誤。
你知道嗎[編輯]
- 從1.8.0.24起官方文件中開始出現Molang,而從1.16.200.51起,Mojang才開始在更新記錄中寫入關於Molang的更新內容。
- Molang最初就是為了動畫、動畫控制器和繪製控制器數據驅動而加入的。
- 全域參數是舊版本遊戲中Molang的一種關鍵字,它從1.10.0.3起被查詢函式取代。全域參數有以下5種:
global.anim_time
、global.delta_time
、global.key_frame_lerp_time
、global.life_time
和global.frame_alpha
,它們分別對應現在的query.anim_time
、query.delta_time
、query.key_frame_lerp_time
、query.life_time
和query.frame_alpha
。 - 在1.8.0.11及更早的版本中,查詢函式的格式為
entity.flags.foo
和entity.member.foo
,並且函式名使用駝峯命名法而非現在的蛇形命名法;實體變數的格式為entity.foo
;全域參數的格式為params.foo
。