アドオン詳細解説 - エンティティ(ビヘイビア)
目次 (折りたたみ可)
ファイル・フォルダの場所
ビヘイビアパックの「entities」フォルダにファイルを置きます。
ビヘイビア
┣ manifest.json
┣ pack_icon.json
┗ entities
┗ 〇〇.json
作成の手順
エンティティ本体に加えてテクスチャも追加するので、ビヘイビアとリソース両方が必要になります。
-
entitiesフォルダに定義JSONを新規作成する
(+ エンティティイベントを作成) - テクスチャの追加
- ジオメトリの追加
- アニメーション(リソース)の追加
- アニコン(リソース)の追加
- レンコンの追加
- entity_clientのJSONを作成
注
アニコン:アニメーションコントローラの略
レンコン:レンダーコントローラの略
エンティティを定義するJSON
基本構造
{
"format_version": "1.18.0",
"minecraft:entity": {
"description": {
"identifier": "ex:my_entity",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false
},
"components": {
// コンポーネント
}
}
}
詳細な構造
{
"format_version": "1.18.0",
"minecraft:entty": {
"description": {
"identifier": "ex:my_entity",
"is_spawnable": true,
"is_summonabled": true,
"is_experimental": false,
"runtime_identifier": "ex:runtime_entity",
"properties":{
// アクタープロパティ
},
"aliases": {
// エイリアス
},
"scripts": {
"animate": [
// エンティティイベント名
]
},
"animations": {
// エンティティイベント
}
},
"permutations": [
// パーミュテーション
],
"component_groups": {
// コンポーネントグループ
},
"components": {
// コンポーネント
},
"events": {
// イベント
}
}
}
各プロパティについて:
プロパティ名 | 簡単な説明 |
---|---|
"identifier" | このエンティティのID |
"is_spawnable" | スポーンエッグをクリエイティブインベントリに追加するかどうか |
"is_summonable" | コマンドで/summonできるかどうか |
"is_experimental" | 試験的かどうか(基本的にfalseでいい) |
"runtime_identifier" | 性質を継承するエンティティのID |
コンポーネント
このエンティティの性質はコンポーネントによって決まります。一つひとつのコンポーネントは
"minecraft:〇〇": {
// 0個以上のプロパティ
}
という形をしています。
イベント
形態の変化とコンポーネントグループ
"components"に書かれたコンポーネントはそのエンティティのデフォルトの性質になります。 たとえば、ゾンビは子どもや大人など複数の形態を持ちますが、同じエンティティなので共通する性質(デフォルトの性質)があります。 そのような共通の性質は"components"に書きます。
一方、子ども/大人のように形態によって変わる性質がある場合は、その性質を切り替えられるようにする必要があります。 そこで、"component_groups"のコンポーネントグループを利用します。
"component_groups": {
"group_a": {
// 形態Aのコンポーネント
},
"group_b": {
// 形態Bのコンポーネント
}
}
コンポーネントグループを切り替えるには"events"のイベントを利用します。
"events": {
"change_to_a": { // 形態Aに変化
"add": { "component_groups": [ "group_a" ] }, // グループ"group_a"を追加
"remove": { "component_groups": [ "group_b" ] } // グループ"group_b"を削除
},
"change_to_b": { // 形態Bに変化
"add": { "component_groups": [ "group_b" ] }, // グループ"group_b"を削除
"remove": { "component_groups": [ "group_a" ] } // グループ"group_a"を追加
}
}
イベントは特定のコンポーネントによって発生させることができます。
イベントファンクション
一つひとつのイベントではイベントファンクションを用いて何を起こすかを指定します。 コンポーネントグループを追加したり削除したりする"add"、"remove"もイベントファンクションです。
エンティティのイベントファンクションは以下の通りです:
名前 | 簡単な説明 |
---|---|
"add" | コンポーネントグループを追加する |
"remove" | コンポーネントグループを削除する |
"run_command" | コマンドを実行する |
"set_actor_property" | アクタープロパティの値を変更する |
"sequence" | 複数のイベントファンクションを実行する |
"randomize" | 指定した中からランダムに実行 |
"trigger" | イベントを実行 |
エンティティイベント
より複雑な挙動を実現するためにエンティティイベントというものが利用できます。 詳しい説明は別記事に書いたのでここではエンティティ本体との紐づけかたを説明します。
"scripts": {
"animate": [
"ex1"
]
},
"animations": {
"ex1": "(EntityEvのID)"
}
"animations"で紐づけるエンティティイベントに、各自で名前をつけて(例では"ex1")、IDと紐づけます。
次に、その名前を"scripts"の"animate"で指定します。 上記のように、単に指定するだけならそのエンティティから毎tick実行されます。
"scripts": {
"animate": [
{ "ex1": "(Molang式)" }
]
},
"animations": {
"ex1": "(エンティティイベントのID)"
}
また、このようにしてMolang式とともに指定すると、Molang式の条件を満たしたときだけ処理されるようになります。
アクタープロパティ
アクタープロパティはエンティティが変数を持てるようにすることができます。 "minecraft:variant"コンポーネントとコンポーネントグループを用いてほとんど同じことができますが、 数値の種類が膨大なとき、数値以外の変数をもつとき、グループを用いるには小規模であるとき(HPのような簡単に変化する値を管理するなど)に役立ちます。
プロパティを定義する
"properties": {
"property:prop_bool": { "type": "bool", "default": false },
"property:prop_int": { "type": "int", "default": 0 },
"property:prop_string": { "type": "string", "default": "default" },
}
そもそもプロパティの種類(type)は"bool"(真偽値)、"int"(整数値)、"string"(文字列)の3種類に限られます。
プロパティを定義するには、"properties"で
"property:(プロパティ名)": { "type": "(プロパティのタイプ)" }
のようにして定義します。
また、定義するときにオプションとして以下のプロパティが追加できます。
プロパティ名 | 簡単な説明 |
---|---|
"default" | プロパティのデフォルト値 |
"client_sync" | リソースで値を取得できるようにするかどうか |
"property:definition_ex": {
"type": "int",
"default": 1,
"client_sync": true
}
プロパティの値をMolangで取得するには、クエリq.propertyを使います。
エイリアス
このエンティティに専用の、別のIDを新たに作成して、そのIDでプロパティの値が既に決まったエンティティをスポーンさせる(/summonなど)ことができます。
エイリアスは以下のように設定します。
"aliases": {
"(専用のID)": {}, // プロパティに値を指定しない場合
"(専用のID)": {
"property:(プロパティ名)": "(値)"
}
}
パーミュテーション
パーミュテーションでコンポーネントグループのようにプロパティの値によってエンティティの形態(= パーミュテーション)を変化させることができます。
"permutations": [
{ // 1つの形態(=Perm)
"components": {
// コンポーネント
},
"condition": "(Molang式)"
}
]
"condition"のMolang式でプロパティを基にした条件式を書き、 その条件が満たされたとき(= プロパティが特定の値になったとき)のみ同オブジェクト内(赤枠内)の"components"に書かれたコンポーネントが適用されます。
パーミュテーションを複数にするときは、赤枠部分を増やします:
"permutations": [
{ // Perm1
"components": {
// Perm1のコンポーネント
},
"condition": "(Molang式)"
},
{ // Perm2
"components": {
// Perm2のコンポーネント
},
"condition": "(Molang式)"
}
]
できないこと
- 当たり判定(CollisionBox)が複雑なモブ(蛇など)