【ブロックステート】
はじめに
ここではカスタムブロック内で定義できるブロックステートの使い方をまとめています。
ブロックステートの性質は▶エンティティプロパティに似ていて、オブジェクト指向型言語のプロパティのようなもので、カスタムブロック内で使える内部変数と言っていいでしょう。
ブロックステートの性質は▶エンティティプロパティに似ていて、オブジェクト指向型言語のプロパティのようなもので、カスタムブロック内で使える内部変数と言っていいでしょう。
値の定義
使える値は以下の3種類で、それぞれで扱う値を配列として定義します。
ちなみに、配列で列挙した一番左端の値がデフォルトとなります。
数値型の定義例
文字列型の定義例
ブール型の定義例
ちなみに、配列で列挙した一番左端の値がデフォルトとなります。
数値型の定義例
"states": { "customize:number_data": [ 0, 1, 2 ] }
文字列型の定義例
"states": { "customize:string_data": [ "one", "two", "three" ] }
ブール型の定義例
"states": { "customize:bool_data": [ true, false ] }
値の設定
値の設定は
今回は▶ダミーブロックを使用する前提なので
setblockコマンド使用例
fillコマンド使用例
上記の黄色の部分がクライアント(マインクラフト)側でブロックステートを設定する時の書き方です。
但し、サーバー(Websocketサーバー)側から送信する時はブロックステートを設定する時の代入演算子が”=”ではなく”:”になるので注意が必要です。
setblock
やfill
コマンドで行います。今回は▶ダミーブロックを使用する前提なので
customize:dummy_block
というブロックIDを利用しています。setblockコマンド使用例
setblock <X座標> <Y座標> <Z座標> customize:dummy_block ["customize:bool_data"=true]
fillコマンド使用例
fill <開始X座標> <開始Y座標> <開始Z座標> <終了X座標> <終了Y座標> <終了Z座標> customize:dummy_block ["customize:bool_data"=true]
上記の黄色の部分がクライアント(マインクラフト)側でブロックステートを設定する時の書き方です。
但し、サーバー(Websocketサーバー)側から送信する時はブロックステートを設定する時の代入演算子が”=”ではなく”:”になるので注意が必要です。
値の参照
値を参照する時は以下のような
permutations定義例
permutations
定義内で行い、Molangのquery.block_state
を使います。permutations定義例
"permutations": [ { "condition": "query.block_state('customize:bool_data') == true", "components": { "minecraft:collision_box": true } }, { "condition": "query.block_state('customize:bool_data') == false", "components": { "minecraft:collision_box": false } } ]
- ・permutations
-
以下の定義ブロックを配列で設定します。
- condition
- ブロックステートの値を参照して条件式を設定します。
- components
-
condition
の条件に一致した時に適用するcomponents
を設定します。
今回の場合は以下の動作になります。- ブロックステートがtrueの時
-
minecraft:collision_box
をtrueにしてブロックとの衝突判定を有りにしています。 - ブロックステートがfalseの時
-
minecraft:collision_box
をfalseにしてブロックとの衝突判定を無しにしています。
components
の詳細については▶ダミーブロック(コンポーネント定義)の項をご覧ください。
テストしてみる
今回のケースでブロック定義を作成すると以下のような内容になります。
ブール型のブロックステートを使った例
コマンドで設置する場合、以下のように”[”まで入力すると入力補助が働いてブロック内で定義しているブロックステートの名前が表示されるので便利です。

さらに”=”まで入力すると、該当のブロックステートに設定できる値が以下のようにリスト表示されます。

▼ブロック設置後

衝突判定有りなのでブロックの上に乗る事ができます。
▼ブロック設置後

衝突判定無しなのでブロックの上に乗ろうとしてもすり抜けます。
ブール型のブロックステートを使った例
{ "format_version": "1.20.80", "minecraft:block": { "description": { "identifier": "customize:dummy_block", "states": { "customize:bool_data": [ true, false ] } }, "permutations": [ { "condition": "query.block_state('customize:bool_data') == true", "components": { "minecraft:collision_box": true } }, { "condition": "query.block_state('customize:bool_data') == false", "components": { "minecraft:collision_box": false } } ], "components": { } } }
states
定義はdescription
定義ブロック内に記述します。permutations
定義ブロックはdescription
やcomponents
定義ブロックと同じ階層に並べて記述します。コマンドで設置する場合、以下のように”[”まで入力すると入力補助が働いてブロック内で定義しているブロックステートの名前が表示されるので便利です。

さらに”=”まで入力すると、該当のブロックステートに設定できる値が以下のようにリスト表示されます。

ブロックステートをtrueにして設置
setblockのコマンドラインsetblock <X座標> <Y座標> <Z座標> customize:dummy_block ["customize:bool_data"=true]
▼ブロック設置後

衝突判定有りなのでブロックの上に乗る事ができます。
ブロックステートをfalseにして設置
setblockのコマンドラインsetblock <X座標> <Y座標> <Z座標> customize:dummy_block ["customize:bool_data"=false]
▼ブロック設置後

衝突判定無しなのでブロックの上に乗ろうとしてもすり抜けます。