0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【マインクラフト(統合版)】エンティティプロパティの使い方まとめ

Posted at

はじめに

エンティティプロパティというのは、各エンティティが独自で保持できるビヘイビアパック上のデータ領域です。

オブジェクト指向型言語で言うところのクラスのプロパティと同じようなニュアンスだと考えて頂ければ分かり易いかと思いますが、アクセス方法が特殊なので注意が必要です。

ここではプロパティの定義方法とアクセス方法をご紹介します。

定義方法

まずは以下のファイルをご覧ください。
>> ダミーエンティティの作り方のページでご紹介したファイルにpropertiesブロックを追加したものです。

<ビヘイビアパック>/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": {}
    }
}

プロパティは上記のようにdescriptionブロックの中でpropertiesブロックとして定義します。

定義形式
"<ネームスペース>:<プロパティ名>": { 
    <データ型別のステートメント>
}

データの種類

使えるデータ型はbool型も含めて以下の4種類です。
残念ながら文字列型は存在しないようです。

int型
"customize:int_dummy": { 
    "type": "int", 
    "range": [0, 4], 
    "default": 0 
}
type
固定でintを指定します。
range
配列形式で[最小値,最大値]を指定します。
default
デフォルト値を指定します。

float型
"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のランダム値を指定しています。

bool型
"customize:bool_dummy": { 
    "type": "bool", 
    "default": false 
}
type
固定でboolを指定します。
default
デフォルト値をtrue、またはfalseで指定します。

enum型
"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サーバーと連携する形でエンティティプロパティを利用しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?