はじめに
エンティティプロパティというのは、各エンティティが独自で保持できるビヘイビアパック上のデータ領域です。
オブジェクト指向型言語で言うところのクラスのプロパティと同じようなニュアンスだと考えて頂ければ分かり易いかと思いますが、アクセス方法が特殊なので注意が必要です。
ここではプロパティの定義方法とアクセス方法をご紹介します。
定義方法
まずは以下のファイルをご覧ください。
>> ダミーエンティティの作り方のページでご紹介したファイルにproperties
ブロックを追加したものです。
{
"format_version": "1.17.10",
"minecraft:entity": {
"description": {
"identifier": "customize:dummy_entity",
"is_spawnable": false,
"is_summonable": true,
"properties": {
"customize:bool_dummy": {
"type": "bool",
"default": false
}
}
},
"components": {}
}
}
プロパティは上記のようにdescription
ブロックの中でproperties
ブロックとして定義します。
"<ネームスペース>:<プロパティ名>": {
<データ型別のステートメント>
}
データの種類
使えるデータ型はbool型も含めて以下の4種類です。
残念ながら文字列型は存在しないようです。
"customize:int_dummy": {
"type": "int",
"range": [0, 4],
"default": 0
}
- type
- 固定で
int
を指定します。 - range
- 配列形式で[最小値,最大値]を指定します。
- default
- デフォルト値を指定します。
"customize:float_dummy": {
"type": "float",
"range": [0.0, 30.0],
"default": "math.random(20, 25)"
}
- type
- 固定で
float
を指定します。 - range
- 配列形式で[最小値,最大値]を指定します。
- default
-
デフォルト値を指定します。
上記の例ではMolangのmath.random(20, 25)
を使って20~25のランダム値を指定しています。
"customize:bool_dummy": {
"type": "bool",
"default": false
}
- type
- 固定で
bool
を指定します。 - default
- デフォルト値をtrue、またはfalseで指定します。
"customize:enum_dummy": {
"type": "enum",
"values": ["park", "reverse", "neutral", "drive"],
"default": "park",
"client_sync": true
}
- type
- 固定で
enum
を指定します。 - values
- enum値を文字列の配列形式で指定します。
- default
- values内の中からデフォルト値にするものを指定します。
- client_sync(他のデータ型でも使用可)
- trueの場合、リソースパックの
minecraft:client_entity
ブロックで使用可能になります。
アクセス方法
エンティティ内部では以下の方法でアクセスできます。
- Molangで参照
-
query.property('<プロパティ名>')の形式で指定。
データ定義でclient_sync
をtrueにしておけばリソースパックでも使えます。
- filterで参照
-
test
項目に型の種類、domain
項目にプロパティ名を指定します。
int型の場合{"test":"int_property", "subject":"self", "domain":"customize:int_dummy", "value":4, "operator":">"}
float型の場合{"test":"float_property", "subject":"self", "domain":"customize:float_dummy", "value":4.5, "operator":">"}
bool型の場合{"test":"bool_property", "subject":"self", "domain":"customize:bool_dummy", "value":true, "operator":"=="}
enum型の場合{"test":"enum_property", "subject":"self", "domain":"customize:enum_dummy", "value":"park", "operator":"!="}
プロパティの存在確認{"test":"has_property", "subject":"self", "value":"customize:bool_dummy", "operator":"=="}
※上記のいずれの場合もsubjectはself
をデフォルトとして、operatorは==
またはequals
をデフォルトとして省略できます。
- set_propertyで設定
-
プロパティの設定ブロック例"set_property": { "customize:int_dummy": "query.property('customize:int_dummy') + 1" }
外部から設定するには以下のevents
ブロックのようにイベントとして定義します。
<ビヘイビアパック>/entities/dummy_entity.json{ "format_version": "1.17.10", "minecraft:entity": { "description": { "identifier": "customize:dummy_entity", "is_spawnable": false, "is_summonable": true, "properties": { "customize:bool_dummy": { "type": "bool", "default": false } } }, "components": {}, "events": { "customize:bool_dummy_set": { "set_property": { "customize:bool_dummy": true } }, "customize:bool_dummy_reset": { "set_property": { "customize:bool_dummy": false } } } } }
各種制限事項
プロパティ数の制限
エンティティの各タイプごとに32個までと決められているようです。
int型
使える範囲は-16,777,216~16,777,215のようですが、-1,000,000~1,000,000の範囲で使う事が推奨されています。
enum型
一つのenum型プロパティに対して16エントリまで許容されます。
enum値の文字列の長さは1~32文字です。
最初の文字はアルファベット、それ以降はアルファベット・数字・アンダースコアの構成である必要があります。
おわりに
本環境では以下のページでご紹介させて頂いたコンテンツ内で、Websocketサーバーと連携する形でエンティティプロパティを利用しています。