【マイクラ】Molangとは?式の書き方・アドオンでの使い方を解説【統合版】

この記事は、マイクラ統合版でアドオン制作を始めたい方向けのMolang入門です
リソースパック・ビヘイビアーパックのJSONを少し触ったことがある前提で解説します
Java版のデータパック・Mod制作とは別物なので、そこはご注意くださいね

こんにちは。ゆずかきです。

マイクラ統合版のアドオンを触っていると、JSONファイルの中に突然、

query.is_baby
q.modified_move_speed
variable.attack_time
math.sin(query.anim_time * 38.17)

みたいな式が出てきますよね。

最初に見た時、筆者は「え、これ何?JavaScript?コマンド?」となりました。
でも実際に触ってみると、これはMolang(モラング)という、統合版アドオン用の軽量な式言語です。

難しそうに見えますが、最初から全部を覚える必要はありません。
初心者さんがまず理解すべきなのは、

  • queryでゲーム内の状態を読む
  • variableで値を一時的に持たせる
  • mathで計算する
  • 条件式でアニメーション・見た目・ブロック状態を切り替える

このあたりです。

この記事では、Molangとは何か?から、基本的な式の書き方・アドオン内での使い方・初心者が詰まりやすいポイントまで、実録ベースで整理していきますね。

この記事を読めば、次のことが分かります。

  • マイクラ統合版のMolangが何に使われるのか分かります👍
  • queryvariabletempの違いが分かります👌
  • アニメーション、レンダーコントローラー、パーティクル、ブロック条件での使い方が理解できます
  • アドオン制作中にMolang式で詰まった時、どこを見直せば良いか分かります(^^♪

それでは、やっていきましょう!

※本記事はマイクラ統合版のクリエイター向けドキュメントを元に、初心者向けに噛み砕いて構成しています。
※記事内のコード例は学習用の最小例です。実際に導入する場合は、使用中のアドオン構成・format_versionmin_engine_versionに合わせて調整してください。
※2026年5月時点の統合版クリエイター向け仕様を前提にしています。


目次

1. Molangとは?
2. Molangでできること・できないこと
3. Molangはどこに書く?アドオン内の主な使用場所
4. Molangの基本文法を覚える
5. query・variable・temp・contextの違い
6. 条件式の書き方|true/falseは1.0と0.0で考える
7. アニメーションでMolangを使う方法
8. アニメーションコントローラーで状態を切り替える方法
9. レンダーコントローラー・パーティクルでの使い方
10. ブロックのpermutationsでMolangを使う方法
11. Molangが動かない時のチェックポイント
12. バージョン差とmin_engine_versionの注意点
13. まとめ
14. 参考文献

この記事で分かること
・マイクラ統合版アドオンで使うMolangの基本
・Molang式の書き方、読み方、よくあるミス
・アニメーション・レンダー・パーティクル・ブロック条件での実用例


1. Molangとは?

Molangとは、マイクラ統合版のアドオン内で使われる、Minecraft専用の式言語です。

普通のプログラミング言語というより、JSONファイルの中で、

  • 今このMobは歩いている?
  • 子どもMobかどうか?
  • 攻撃中かどうか?
  • アニメーションをどれくらい回転させる?
  • テクスチャをどちらに切り替える?
  • ブロック状態がONなら発光させる?

こういう判定や計算をするために使います。

例えば、下のような式です。

query.is_baby

これは、対象のエンティティが子ども状態なら1.0、そうでなければ0.0のような値として扱える式です。

もう少し実用的にすると、こんな感じです。

query.is_baby ? 0.5 : 1.0

意味としては、

  • 子どもなら0.5
  • そうでないなら1.0

を返す、ということですね。

Molangは、「ゲーム内の状態を見て、数値を返すもの」と考えるとかなり分かりやすいです。

アニメーション、パーティクル、レンダーコントローラー、ブロックのpermutationsなどで使われます。
統合版アドオン制作では避けて通れないので、最初にここを押さえておくと後がかなり楽になります。

体験談
筆者は最初、q.v.の意味が分からず、サンプルJSONを見ても全然読めませんでした。
でも、q.query.の省略、v.variable.の省略だと分かった瞬間、かなり見通しが良くなりました。
まずは省略形の意味を覚えるのがおすすめです。


2. Molangでできること・できないこと

Molangは便利ですが、何でもできる言語ではありません。
ここを勘違いすると、アドオン制作中にかなり迷子になります。

Molangでできること

Molangで主にできることは、次のような内容です。

  • エンティティの状態を読む
  • アニメーションの再生条件を決める
  • モデルの一部を表示・非表示にする
  • テクスチャやジオメトリを条件で切り替える
  • パーティクルの寿命・サイズ・動きに計算式を入れる
  • ブロック状態に応じてコンポーネントを切り替える
  • 数値計算、三角関数、乱数などを使う

特に多いのは、アニメーションまわりです。

例えば、歩いている時だけ足を動かす、座っている時だけ座りアニメーションにする、攻撃中だけ腕を振る、みたいな処理ですね。

Molangでできないこと

逆に、Molangが苦手なこと・できないこともあります。

  • JavaScriptのように大規模な処理を書く
  • ワールド全体を自由に操作する
  • 複雑なデータ保存をする
  • サーバー側で何でも命令する
  • Java版のデータパックやModにそのまま使う

Molangは、あくまでアドオンJSON内で使う軽量な式です。
本格的にワールドやイベントを動かしたいなら、統合版のScript APIなど別の仕組みも関係してきます。

ここを整理すると、Molangの立ち位置はこうです。

仕組み 主な役割 初心者向けの理解
Molang JSON内で条件・計算を書く 見た目や動きを切り替える式
ビヘイビアーパック Mobやブロックの挙動を定義 中身の動作設定
リソースパック 見た目・音・アニメーションを定義 外見や表示設定
Script API JavaScript/TypeScriptで処理を書く より本格的な処理


要するに、Molangはアドオン制作の中で、軽い判定や計算を担当する係です。
ここを無理にプログラミング全般として理解しようとすると疲れるので、まずは「条件式を書くもの」と思っておけば大丈夫です。


3. Molangはどこに書く?アドオン内の主な使用場所

Molangは、統合版アドオンのいろいろなJSONファイルで使われます。
初心者さんがよく見る場所は、主に下記です。

使用場所 ファイル例 何に使う?
エンティティ定義 entity/*.json / entities/*.json 事前計算、アニメーションへの値渡し
アニメーション animations/*.json 骨の回転、移動、拡大縮小
アニメーションコントローラー animation_controllers/*.json 状態に応じてアニメーションを切り替える
レンダーコントローラー render_controllers/*.json テクスチャ、ジオメトリ、表示パーツの切り替え
パーティクル particles/*.json 寿命、サイズ、発生条件、動きの調整
ブロックのpermutations blocks/*.json ブロック状態に応じて見た目や性質を切り替える


例えば、アニメーションコントローラーではこういう形で使います。

"transitions": [
  { "walking": "query.modified_move_speed > 0.1" }
]

これは、移動速度が一定以上ならwalking状態に移る、という意味です。

ブロックのpermutationsなら、こういう使い方です。

{
  "condition": "query.block_state('custom:is_lit') == true",
  "components": {
    "minecraft:light_emission": 15
  }
}

これは、カスタムブロックのcustom:is_litという状態がtrueなら、明るさを出す、というイメージです。

注意!
Molangは書く場所によって使えるqueryや値が違う場合があります。
「別のファイルでは動いた式をそのまま貼ったのに動かない」ということもあるので、まずはそのJSONの文脈で使える式かどうかを疑ってくださいね。


4. Molangの基本文法を覚える

ここからは、Molangの書き方を整理します。
難しいところまで一気に覚えなくて大丈夫です。
まずは、よく使うものだけ押さえましょう。

数値は基本的にfloatとして扱われる

Molangでは、数値は基本的に浮動小数点数として扱われます。
つまり、11.0のような数値として考えればOKです。

1.0
0.5
-10.0

true/falseは1.0と0.0で考える

Molangでは、真偽値も数値として扱う場面が多いです。

  • trueっぽい値 → 1.0
  • falseっぽい値 → 0.0

例えば、下の式は「子どもなら1.0、そうでなければ0.0」という値として見られます。

query.is_baby

文字列はシングルクォートで書く

文字列を扱う場合は、シングルクォートを使います。

'minecraft:pig'
'custom:my_entity'

文字列は主に、アイテム名・ブロック名・識別子などの比較で出てきます。

※文字列内に'を含めることはできないため、文字列にシングルクォートが必要な名前を入れないようにしてください。

単純な式はセミコロン不要

単純な式なら、最後の;は付けなくて大丈夫です。

math.sin(query.anim_time * 1.23)

ただし、複数行の複雑な式を書く場合は、各文の最後に;を付けます。
そして最後にreturnで返す値を書きます。

temp.x = math.sin(query.anim_time * 1.23);
temp.y = math.cos(query.life_time + 2.0);
return temp.x * temp.x + temp.y;

ここで大事なのは、複雑な式では最後にreturnを書かないと、返り値が0.0になることです。
筆者もここで普通にハマりました。

大文字・小文字は基本的に気にしすぎなくてOK

Molangの多くの識別子は大文字・小文字を区別しません。
ただし、文字列は書いた通りの大文字・小文字が維持されるので、識別子名を文字列として比較する時は注意しましょう。

'minecraft:pig'
'Minecraft:Pig'

こういう文字列は、同じつもりで書くと危ないです。
アドオン制作では、基本的に識別子は小文字で揃えるのがおすすめです。


5. query・variable・temp・contextの違い

Molangを読むうえで、最重要なのがここです。
queryvariabletempcontextの違いが分かると、サンプルJSONがかなり読めるようになります。

query|ゲーム内の状態を読む

queryは、ゲーム側が持っている状態を読むためのものです。
省略してqとも書けます。

query.is_baby
q.is_baby

この2つは、基本的に同じ意味です。

よく見る例はこんな感じです。

query.is_baby
query.is_sneaking
query.anim_time
query.life_time
query.modified_move_speed

読み方としては、

  • query.is_baby → 子どもかどうか
  • query.anim_time → アニメーション内の時間
  • query.life_time → 時間経過を使ったアニメーション計算などで使う値
  • query.modified_move_speed → 補正込みの移動速度

というイメージです。

※使えるqueryはかなり多いです。全部覚えるより、必要になった時に公式のQuery Functions一覧で探す方が現実的です。

variable|エンティティに値を持たせる

variableは、エンティティ側に値を持たせるためのものです。
省略してvとも書けます。

variable.attack_time
v.attack_time

例えば、アニメーション内で攻撃の進行度を見たり、事前に計算した値を別の場所で使ったりします。

variable.wing_flap = math.sin(query.anim_time * 30.0);

こうしておけば、別のアニメーション側でvariable.wing_flapを参照できます。

ただし、variableは万能な保存場所ではありません。
値はエンティティの寿命に紐づき、ワールドを閉じて再読み込みしたり、エンティティがデスポーンしたりすると失われます。
ワールドをまたいで確実に保存するような用途には向きません。

temp|その式の中だけで使う仮置き

tempは、一時的な計算用の変数です。
省略してtとも書けます。

temp.x = math.sin(query.anim_time);
return temp.x * temp.x;

長い計算式を少し読みやすくする時に便利です。

筆者の使い分け
その場の計算だけならtemp
アニメーションや別の場所でも使い回すならvariable
ゲームの状態を読むだけならquery
これでかなり整理できます。

context|その場面でゲーム側から渡される読み取り専用の値

contextは、特定の処理の中でゲーム側から渡される値です。
省略してcとも書けます。

context.some_value
c.some_value

ただ、初心者さんが最初から頻繁に使うというより、特定のイベントや文脈で必要になった時に出てくるものです。
基本はqueryvariableを先に覚えれば大丈夫です。

省略形まとめ

正式表記 省略形 役割
query q ゲーム内の状態を読む
variable v エンティティに値を持たせる
temp t 一時的な計算用
context c 文脈ごとの読み取り専用値


サンプルアドオンでは省略形のq.v.がよく出ます。
最初は見慣れませんが、ここさえ覚えれば読みやすくなりますよ。


6. 条件式の書き方|true/falseは1.0と0.0で考える

Molangで一番よく使うのが条件式です。
アニメーションの切り替え、表示パーツの切り替え、ブロック状態の判定など、あちこちで使います。

比較演算子

まずは、よく使う記号を覚えましょう。

記号 意味
== 等しい q.variant == 1
!= 等しくない q.variant != 0
> より大きい q.health > 10
< より小さい q.health < 5
>= 以上 q.modified_move_speed >= 0.1
<= 以下 q.health <= 1


例えば、体力が5未満ならtrue扱いにしたい場合は、こうです。

q.health < 5

AND・OR・NOT

複数条件を組み合わせる時は、下記を使います。

記号 意味
&& かつ q.is_baby && q.is_sneaking
|| または q.is_baby || q.is_sneaking
! ではない !q.is_baby


例として、子どもではなく、かつ移動している時だけtrueにするなら、こんな感じです。

!q.is_baby && q.modified_move_speed > 0.1

三項演算子|条件で値を切り替える

Molangでは、? :を使って値を切り替えられます。

条件 ? trueの時の値 : falseの時の値

実例です。

q.is_baby ? 0.5 : 1.0

これは、子どもなら0.5、それ以外なら1.0です。

レンダーコントローラーやパーティクルでは、こういう条件式がよく出ます。

q.is_sleeping ? 0 : 1

「寝ている時だけ非表示」「寝ていない時だけ表示」みたいな処理に使いやすいです。

null合体演算子|未設定対策に使う

Molangには??という書き方があります。
これは、値が未設定だった時にデフォルト値を入れるためのものです。

v.timer = (v.timer ?? 0) + q.delta_time;

意味としては、

  • v.timerがすでにあるなら、その値を使う
  • まだ無いなら0として扱う
  • そこにq.delta_timeを足す

という感じです。

ただし、??は主に数値やエンティティ参照の変数向けです。
マテリアル、テクスチャ、ジオメトリなどのリソース参照は、有効なものをきちんと指定する必要があります。

注意!
variableをいきなり使うと、未定義扱いでエラーになることがあります。
カウントやタイマーのような値は、?? 0で初期値を入れておくと安定しやすいです。


7. アニメーションでMolangを使う方法

Molangが一番分かりやすく活躍するのは、アニメーションです。
エンティティの骨を回転させたり、移動量に合わせて動かしたりできます。

例えば、歩いている時に足を前後に振るような処理です。

"animation.custom_entity.walk": {
  "loop": true,
  "bones": {
    "leg0": {
      "rotation": ["math.cos(query.anim_time * 38.17) * 80.0", 0.0, 0.0]
    },
    "leg1": {
      "rotation": ["math.cos(query.anim_time * 38.17) * -80.0", 0.0, 0.0]
    }
  }
}

ここで使っているのが、

math.cos(query.anim_time * 38.17) * 80.0

です。

意味としては、時間に合わせてコサイン波を作り、それを回転角度として使っています。
Molangの三角関数は角度を度数法で扱うので、query.anim_timeに掛ける値は「1秒あたり何度進めるか」のように見ると分かりやすいです。
これにより、足が前後に揺れるような動きになります。

初心者さん向けに言うと、

  • query.anim_time → アニメーション時間
  • math.cos(...) → なめらかに増減する波
  • * 80.0 → 動きの大きさ

です。

動きを強くしたい時

動きを大きくしたいなら、最後の倍率を増やします。

math.cos(q.anim_time * 38.17) * 120.0

ただし、回転量を大きくしすぎるとモデルがかなり不自然に見えます。
筆者の感覚では、最初は30.080.0くらいから試すのが扱いやすいです。

動きを速くしたい時

動きを速くしたいなら、q.anim_timeに掛けている数値を増やします。

math.cos(q.anim_time * 60.0) * 80.0

逆に、ゆっくり動かしたいなら数値を下げます。

math.cos(q.anim_time * 15.0) * 80.0

アニメーションの調整は、正直かなり試行錯誤です。
でも、速度は中の倍率、角度は外の倍率と覚えると調整しやすいです。

体験談
筆者は最初、math.cos()の中と外の倍率を混同していました。
中の数値を変えるとスピード、外の数値を変えると振れ幅が変わる、と覚えると一気に分かりやすくなりました。


8. アニメーションコントローラーで状態を切り替える方法

アニメーションコントローラーは、どの状態でどのアニメーションを再生するかを決める仕組みです。

アニメーションが「動きそのもの」だとすると、アニメーションコントローラーは「いつその動きを使うか」を決める係です。

例えば、歩いている時だけwalk状態にするなら、こんな感じです。

{
  "format_version": "1.17.30",
  "animation_controllers": {
    "controller.animation.custom_entity.move": {
      "states": {
        "default": {
          "animations": ["idle"],
          "transitions": [
            { "walking": "query.modified_move_speed > 0.1" }
          ]
        },
        "walking": {
          "animations": ["walk"],
          "transitions": [
            { "default": "query.modified_move_speed <= 0.1" }
          ]
        }
      }
    }
  }
}

この例では、

  • 移動速度が0.1より大きい → walking
  • 移動速度が0.1以下 → defaultへ戻る

という流れです。

座っている時にアニメーションを変える例

オオカミのように、座る・立つで状態が変わるMobなら、query.is_sittingのような条件を使います。

"transitions": [
  { "sitting": "query.is_sitting" }
]

戻す時は、否定の!を使います。

"transitions": [
  { "default": "!query.is_sitting" }
]

この「条件がtrueになったら状態を切り替える」という考え方が、アニメーションコントローラーの基本です。

blend_transitionで切り替えをなめらかにする

状態を急に切り替えると、動きがカクッと見えることがあります。
その時は、blend_transitionを入れると、状態遷移を少しなめらかにできます。

"blend_transition": 0.2

数値は秒数のイメージです。
大きくしすぎると切り替えが遅く感じるので、まずは0.10.2くらいから試すと良いです。

注意!
アニメーションコントローラーでMolang式が間違っていると、状態が切り替わらないだけでなく、そもそもアニメーションが再生されないこともあります。
まずは条件式を短くして、1個ずつ動作確認するのがおすすめです。


9. レンダーコントローラー・パーティクルでの使い方

Molangは、アニメーション以外にもかなり使われます。
特に、レンダーコントローラーとパーティクルはよく出てきます。

レンダーコントローラーでテクスチャを切り替える

レンダーコントローラーでは、条件に応じてテクスチャやジオメトリを切り替えられます。

例えば、query.variantの値でテクスチャを変えるイメージです。

"arrays": {
  "textures": {
    "Array.skins": [
      "Texture.default",
      "Texture.special"
    ]
  }
},
"textures": ["Array.skins[query.variant]"]

query.variant0ならTexture.default1ならTexture.specialを使う、という感じです。

この仕組みは、色違いMobやバリエーションのあるモデルを作る時に便利です。

注意!
色違いMobを解説する場合は、必ず実際のテクスチャ色やバリエーションを確認してください。
variantの数値だけ見て「赤」「白」などを想像で書くと、普通に間違えます。

パーツの表示・非表示を切り替える

モデルの一部を表示したり隠したりする場合も、Molangを使えます。

"part_visibility": [
  { "leg*": "!query.is_sleeping" },
  { "head": "!query.is_sleeping" },
  { "head_sleeping": "query.is_sleeping" }
]

これは、寝ている時と寝ていない時で表示するパーツを変える例です。

  • !query.is_sleeping → 寝ていない時
  • query.is_sleeping → 寝ている時

という読み方ですね。

パーティクルの寿命や大きさを変える

パーティクルでもMolangはよく使われます。
例えば、ランダムな寿命を設定するような式です。

"minecraft:particle_lifetime_expression": {
  "max_lifetime": "math.random(0.6, 2.0)"
}

また、パーティクルのサイズを時間経過で小さくするような式もあります。

(0.1 + variable.particle_random_1 * 0.1) - (0.1 * variable.particle_age)

初心者さん向けに言うと、パーティクルのMolangは、

  • どのくらい生きるか
  • どのくらいのサイズか
  • どの方向に動くか
  • 時間でどう変化するか

を決める時に使うことが多いです。

ただし、パーティクルはJSON自体も少し複雑です。
最初から凝ったものを作るより、バニラの炎・煙・泡などのサンプルを少しずつ変更して試す方が失敗しにくいです。


10. ブロックのpermutationsでMolangを使う方法

カスタムブロック制作でもMolangは使います。
特に、permutationsconditionでよく出ます。

permutationsは、簡単に言うとブロック状態に応じてコンポーネントを切り替える仕組みです。

例えば、ブロックがON状態なら光る、OFFなら光らない、みたいな処理です。

{
  "condition": "query.block_state('custom:is_lit') == true",
  "components": {
    "minecraft:light_emission": 15
  }
}

この例では、custom:is_litというブロック状態がtrueの時だけ、minecraft:light_emissionを適用しています。

方向によって見た目を変える例

ブロックの向きで条件を分ける場合は、あらかじめブロック側に持たせた方向系のブロック状態を見ます。

{
  "condition": "query.block_state('minecraft:cardinal_direction') == 'west'",
  "components": {
    "minecraft:geometry": "geometry.custom_block_west"
  }
}

これは、西向きの時だけ別のジオメトリを使う、というイメージです。

q.block_stateとquery.block_state

サンプルによっては、下のように省略形で書かれていることもあります。

q.block_state('custom:is_lit') == true

これは、下記と同じ意味です。

query.block_state('custom:is_lit') == true

筆者としては、初心者さんのうちはquery.block_stateと正式表記で書く方が読みやすいと思います。
慣れてきたらq.でもOKです。

注意!
古い情報ではblock_propertyという書き方が出てくる場合があります。
現在のCreator向け情報では、block_state系の書き方に置き換わっているため、古い記事や古いサンプルを使う時は要注意です。


11. Molangが動かない時のチェックポイント

Molangは短い式でも、ミスると普通に動きません。
しかも、初心者のうちは「JSONが悪いのか、Molangが悪いのか、ファイルの場所が悪いのか」が分かりづらいです。

なので、動かない時は下記を順番にチェックしましょう。

  • [ ] query.q.variable.v.を混同していないか?
  • [ ] 文字列を'minecraft:pig'のようにシングルクォートで書いているか?
  • [ ] 複雑な式で;returnを書き忘れていないか?
  • [ ] true/false判定を数値の1.0/0.0として扱える場面か?
  • [ ] そのJSONファイル内で使えるqueryか?
  • [ ] 古いblock_property系の記述を使っていないか?
  • [ ] format_versionmin_engine_versionが古すぎないか?
  • [ ] そもそもJSONのカンマ、波括弧、引用符が壊れていないか?
  • [ ] コンテンツログにエラーが出ていないか?

よくあるミス1:returnを書き忘れる

複数文のMolang式では、最後にreturnを書かないと返り値が0.0になります。

悪い例です。

t.x = math.sin(q.anim_time);
t.y = t.x * 2.0;

良い例です。

t.x = math.sin(q.anim_time);
t.y = t.x * 2.0;
return t.y;

よくあるミス2:未定義のvariableをそのまま足す

悪い例です。

v.timer = v.timer + q.delta_time;

v.timerがまだ無い場合、エラーや想定外の値になる可能性があります。

良い例です。

v.timer = (v.timer ?? 0) + q.delta_time;

よくあるミス3:条件が常にtrueになっている

Molangでは、0.0以外はtrue扱いになります。
そのため、うっかり数値をそのまま条件に置くと、思っていたより広い条件でtrueになることがあります。

例えば、移動速度を見たいなら、下のように比較した方が分かりやすいです。

q.modified_move_speed > 0.1

よくあるミス4:使う場所を間違えている

Molangは、書く場所によって参照できるものが違います。
アニメーションで使える式が、ブロックのpermutationsでそのまま使えるとは限りません。

体験談
筆者は、アニメーション側で見た式をそのまま別ファイルに貼って失敗したことがあります。
Molangは「式自体が正しいか」だけでなく、「その場所でその式が使えるか」も大事です。


12. バージョン差とmin_engine_versionの注意点

Molangでかなり重要なのが、min_engine_versionです。

統合版アドオンでは、manifest.jsonに書くmin_engine_versionによって、Molangの一部のルールや互換性が変わる場合があります。

"min_engine_version": [1, 20, 50]

このような指定ですね。

Molangは、過去バージョンとの互換性を保つために、min_engine_versionを見てどのルールを適用するか判断します。
そのため、古いアドオンを最新版で動かす時や、古い記事のコードを持ってくる時は注意が必要です。

覚えておきたい主な変更点

初心者さんが特に注意したい変更点は下記です。

バージョン 変更内容 初心者向けの注意
1.18.10 三項演算子の結合規則が修正 古い複雑な条件式は括弧を付けて読む
1.18.20 AND/ORや比較演算子の優先順位が修正 複雑な条件は括弧で明示する
1.20.10 `block_property`系が`block_state`系へ変更 古い記事のブロック条件は書き換え候補
1.20.40 `block_property`系が非推奨 新規制作では使わない方が安全
1.20.50 `block_property`がサポート外に `query.block_state()`を使う


つまり、今から新しく作るなら、古いblock_propertyではなくquery.block_state()を使うのが基本です。

2026年5月時点の補足

2026年5月時点では、統合版Creator向けにBedrock 1.26.20の更新情報も出ています。
ブロックJSONやタグ定義など、アドオン周辺の仕様は継続的に更新されています。

ただし、Molangの基本的な考え方、つまり、

  • queryで読む
  • variableで値を持つ
  • mathで計算する
  • 条件式で切り替える

という部分は、初心者がまず覚える内容として変わりません。

注意!
「昔の記事のコードをコピペしたら動かない」場合、Molang式そのものより、format_versionmin_engine_version・古いquery名が原因のことがあります。
特にブロック系は更新の影響を受けやすいので、古いサンプルを使う時は要確認です。


13. まとめ

以上、マイクラ統合版のMolangについて、初心者向けに整理しました。

Molangは最初こそ難しく見えますが、実際に使う時の考え方はかなりシンプルです。

要点を整理すると、

  • Molangは統合版アドオンのJSON内で使う式言語
  • Java版のデータパックやModとは別物
  • queryはゲーム内の状態を読む
  • variableはエンティティに値を持たせる
  • tempはその場の一時計算に使う
  • q.v.は省略形
  • true/falseは1.00.0の数値感覚で見る
  • アニメーション、アニメーションコントローラー、レンダーコントローラー、パーティクル、ブロック条件でよく使う
  • 古い情報ではblock_propertyが出ることがあるので、現在はquery.block_state()系を優先する

このあたりを押さえれば、サンプルアドオンのMolang式もかなり読めるようになります。

最初から全部覚える必要はありません。
まずは、

q.is_baby ? 0.5 : 1.0

こういう短い式から読み解いていきましょう。

Molangが読めるようになると、統合版アドオン制作でできることが一気に増えます。
Mobの動き、見た目の切り替え、パーティクル演出、カスタムブロックの状態変化など、作れるものの幅がかなり広がります。

では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。
柚子クラでは他にもマイクラ統合版アドオンや便利な仕様解説をまとめているので、是非ご覧くださいね(^^♪


14. 参考文献

この記事を書くにあたり、以下の公式ドキュメント・コミュニティ資料を参考にしています。