精選條目

Molang

出自Minecraft基岩版开发Wiki
玩家繪製控制器中使用的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 用於提前退出loopfor_each的作用域。
continue 用於跳過loopfor_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,數字過大時頂封到與陣列長度相同。
  • 其他支援的型別有:
  1. 幾何
  2. 紋理
  3. 材質
  4. 活動物件引用
  5. 活動物件引用陣列
  6. 字串
  7. 結構體
  • 錯誤(如被零除、變數丟失、空引用等)通常傳回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.xv.yv.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]

分域範例[編輯]

實體腳本定義[編輯]

在定義檔案中有一個預計算值的部分,這些值在動畫和繪製控制器被處理之前立即執行,並儲存在實體中。其目的是預先計算您可能希望在腳本中再次使用的任何昂貴的複雜值,長作用域索引變數更新,或者通常是任何一次性計算的呈現刻。

"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_namequery.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" }
    ],
  1. This will start by applying Material.default to all model parts.
  2. It will set the material on a model part named TailA to the result of the expression Array.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 called array.hair_colors defined in this render controller. This will overwrite the Material.default material set in the line above.
  3. It will look up the same material as the expression is identical, and apply it to the Mane model part.
  4. If will find any model part starting with, ending with, or containing Saddle (case sensitive) and change its material to either material.leather_saddle or material.iron_saddle depending on the previously set entity variable variable.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(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.actor_property
query.biome_has_all_tags 如果實體所在生態域或指定座標的生態域包含提供的所有標籤則傳回1.0,否則傳回0.0。
query.biome_has_any_tag 如果實體所在生態域或指定座標的生態域包含提供的任意標籤則傳回1.0,否則傳回0.0。
query.block_has_all_tags
query.block_has_any_tag
query.block_neighbor_has_all_tags
query.block_neighbor_has_any_tag
query.bone_orientation_matrix
query.bone_orientation_trs
query.client_input_type 根據目前用戶端使用的操作方式傳回mouse(滑鼠),touch(觸屏),gamepad(手柄)或motion_controller(運動傳感器)。
query.cooldown_time
query.cooldown_time_remaining
query.get_nearby_entities 傳回目前實體周圍篩選出的實體,它接收兩個參數,其中第二個參數為缺省參數。第一個指代長度距離,第二個指代實體的命名空間:識別碼。
query.get_nearby_entities_except_self 傳回目前實體周圍篩選出的不包括自己的實體,它接收兩個參數,其中第二個參數為缺省參數。第一個指代長度距離,第二個指代實體的命名空間:識別碼。
query.get_ride 如果該實體正在乘騎某實體,則傳回被乘騎的實體,否則傳回0.0。
query.get_riders 以陣列的形式傳回該實體的乘騎者。
query.has_actor_property
query.has_player_rider 如果實體被玩家乘騎,則傳回1.0,否則傳回0.0。
query.is_attached 如果一個活動物件附著於另一個活動物件上,則傳回1.0(例如被持有或被穿戴),否則傳回0.0。
query.is_cooldown_type
query.relative_block_has_all_tags 根據相對實體座標,如果該方塊擁有所有指定的標籤,則傳回1.0,否則傳回0.0。
query.relative_block_has_any_tag 根據相對實體座標,如果該方塊擁有任意指定的標籤,則傳回1.0,否則傳回0.0。
query.scoreboard 傳回目前實體的計分板資訊,它接受一個參數用來指代記分項。
query.self 傳回目前實體。
query.target 傳回目前實體目標(如果存在)。

已棄用函式[編輯]

名稱
型別
棄用版本
描述
替代函式
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 A random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitter_random_2 Another random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitter_random_3 A third random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitter_random_4 A fourth random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitter_texture_coordinate.u
variable.EmitterTextureCoord.u
variable.emitter_texture_coordinate.v
variable.EmitterTextureCoord.u
variable.emitter_texture_size.u
variable.EmitterTextureSize.u
variable.emitter_texture_size.v
variable.EmitterTextureSize.u
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 How long the particle has lived
variable.particle_lifetime

How long the particle lives for

variable.particle_multiplier
variable.particle_random_1 A random from 0.0 to 1.0 that is constant for the lifetime of the particle
variable.particle_random_2 Another random from 0.0 to 1.0 that is constant for the lifetime of the particle
variable.particle_random_3 A third random from 0.0 to 1.0 that is constant for the lifetime of the particle
variable.particle_random_4 A fourth random from 0.0 to 1.0 that is constant for the lifetime of the particle
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.01.7.0.2加入了MoLang。
1.16.2001.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一起工作的問題。
GeometryMaterialTexture變數名現在可以包含「.」。
1.16.2301.16.230.50修復了query.is_in_ui使其可以對資料驅動實體在UI中繪製時使用。
1.17.01.17.0.52新增了一個查詢函式以取得預設骨骼樞軸。
更新了查詢函式,用於傳回基於給定參數的正規化物品剩餘使用時間。
1.17.101.17.10.20現在可以對終界龍使用query.wing_flap_position了。
新增了query.show_bottom來用於確定實體底部是否被繪製。
新增了query.death_time用於確定生物開始死亡後經過的時間。
新增了math.min_angel來將角度最小化到[-180,180)的範圍。
1.17.201.17.20.23附加包清單檔案中的min_engine_version欄位現在可以被傳入MoLang解析。
1.17.301.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.21query.bone_orientation_trs現在會傳回正確的Y軸平移及縮放結果。
新增了query.block_neighbor_has_any_tagsquery.block_neighbor_has_all_tags兩項查詢函式(需要實驗性玩法)。
當進入一個資源包中使用了含有query.armor_color_slot的世界時,將不再發生崩潰。
將實驗性的查詢函式(除與活動物件屬性相關的查詢函式外)移到了新的「實驗性MoLang功能」實驗性玩法選項中。
1.17.30.23MoLang改名為Molang。
物品冷卻加入了相關的查詢函式: query.is_cooldown_typequery.cooldown_time,和query.cooldown_time_remaining
更新了更多的Molang內容記錄報錯來表示對應的運算子或查詢函式。
1.17.401.17.40.20text + 3等在之前被忽略的運算式加入了新的編譯錯誤回報。
修復了query.item_remaining_use_duration給出的結果會不正確縮放或倒置的問題。
1.17.40.21現在包含大寫字母的Molang運算式會被正確解析了。
query.get_equipped_item_name查詢函式現在會正確識別海燈籠
1 + (9 10)等在之前被忽略的運算式加入了新的編譯錯誤回報。
1.18.01.18.0.25修復了未將Molang運算式的min_engine_version標記為僅1.17.40或更高版本時觸發的內容記錄報錯。
1.18.101.18.10.22加入非實驗性的is_name_anyis_item_name_anyis_owner_identifier_any查詢函式。
修復了relative_block_has_all_tagsblock_neighbor_has_all_tagsbiome_has_all_tags查詢函式應該需要所有標籤而不應該是任何標籤的問題。
修復了嵌套的條件(三元)運算子解析順序應該為從右到左而不應該是從左到右的問題。

錯誤[編輯]

關於「Molang」的錯誤在國際版中由錯誤追蹤器維護,請在此回報錯誤。

你知道嗎[編輯]

  • 1.8.0.24起官方文件中開始出現Molang,而從1.16.200.51起,Mojang才開始在更新記錄中寫入關於Molang的更新內容。
  • Molang最初就是為了動畫動畫控制器繪製控制器資料驅動而加入的。
  • 全域參數是舊版本遊戲中Molang的一種關鍵字,它從1.10.0.3起被查詢函式取代。全域參數有以下5種:global.anim_timeglobal.delta_timeglobal.key_frame_lerp_timeglobal.life_timeglobal.frame_alpha,它們分別對應現在的query.anim_timequery.delta_timequery.key_frame_lerp_timequery.life_timequery.frame_alpha
  • 1.8.0.11及更早的版本中,查詢函式的格式為entity.flags.fooentity.member.foo,並且函式名使用駝峰命名法而非現在的蛇形命名法;實體變數的格式為entity.foo;全域參數的格式為params.foo

參見[編輯]

注釋[編輯]

  1. 字串不支援'字元,因為目前不支援字元轉義。
  2. 在這種人為設計的情況下最好打破循環,因為它比繼續執行所有的10次迭代更高效。
  3. Molang的法則是:如果某個內容出錯或值不正確,則會將其轉換為0.0(並且通常會在畫面上拋出內容記錄報錯)。內容錯誤可能會阻止將內容上傳到市集。
  4. 即附加包清單檔案"min_engine_version"的最低取值。



Template:Navbox Addon