エンティティの動作を決める
エンティティの動作を定義するbehavior_packs/entites/****.jsonについてのメモ
ほとんど以下のドキュメントを参考にしてまとめている
大まかな形式
code:entity.json
{
"format_version": "1.13.0",
"minecraft:entity": {
"description": {
"identifier":"compass:example",
"is_spawnable":true,
"is_summonable":true
},
"components": {},
"component_groups": {},
"events": {}
}
}
コンポーネントとコンポーネントグループ
コンポーネントはエンティティに追加することにできるプロパティのこと
それらを追加するためにコンポーネントかコンポーネントグループというものを用いる
基本のコンポーネントに追加された動作はイベント内でコンポーネントグループにより削除されない限り、ずっと有効になる
コンポーネントグループはデフォルトでは無効になっているが、イベントにより有効にすることができるコンポーネント類のこと
例えば、オオカミはなついている状態とそうでない状態があるが、それらはプレイヤーが「手なずける」というイベントを発生させた場合にコンポーネントグループを切り替えている
例
以下はエンティティの赤ちゃんの状態を実装した例である
code:example.json
{
"format_version": "1.13.0",
"minecraft:entity": {
"description": {
"identifier":"compass:example",
"is_spawnable":true,
"is_summonable":true
},
"components": {
"minecraft:physics":{}
},
"component_groups": {
"baby": {
"minecraft:behavior.follow_parent": {},
"minecraft:is_baby": {}
}
},
"events": {}
}
}
9行目の基本コンポーネントは常に有効になっている
一方で12行目のコンポーネントグループではイベントで「baby」の状態にしない限り有効にならない
コンポーネント
現在使用可能なすべてのコンポーネントはこちらから確認できる コンポーネントの優先度
コンポーネントの優先度はpriorityプロパティによって決めることができる
例
code:example.json
"minecraft:behavior.random_stroll": {
"priority": 4
},
"minecraft:behavior.hurt_by_target": {
"priority": 1
}
コンポーネントグループの削除
コンポーネント グループがエンティティから削除されると、コンポーネントの効果も削除されます。 ほとんどの場合、それによって問題が発生することはありません。 しかし一部のケースでは、コンポーネントが相互に上書きし合うことを考慮することが重要となります。 あるコンポーネントを削除した場合、そのコンポーネントが前の状態に戻されることはなく、別のコンポーネント グループや基本のコンポーネントから同じコンポーネントが使用されることもありません。 その代わりにコンポーネントは完全に削除され、そのデフォルト値にリセットされます。
例として、基本の components タグ内でスケールが 2 と定義されているエンティティがあるとします。 そこに、スケールを 1.5 に設定するスケール コンポーネントを含んだ赤ちゃんコンポーネント グループを追加します。 これにより、スケールは 1.5 に正しく更新されます。 次に、そのコンポーネント グループを削除します。 スケールは 2 に戻るのではなく、1 にリセットされます。 このようなことが起こるのは、コンポーネント グループを削除するとスケール コンポーネント全体も削除されるためです。 スケールはデフォルト値である 1 にリセットされます。
コンポーネントを削除する際には注意が必要そうだ
例
code:example.json
"components": {
"minecraft:scale":{
"value": 2
}
},
"component_groups": {
"baby": {
"minecraft:scale": {
"value": 1.5
}
},
"adult": {
"minecraft:scale": {
"value": 2
}
}
},
"events": {
"set_baby":{
"remove": {"component_groups": "adult"}, "add": {"component_groups": "baby"} },
"set_adult":{
"remove": {"component_groups": "baby"}, "add": {"component_groups": "adult"} }
}
イベントによるコンポーネントグループの切り替え
例
code:example.json
"events": {
"compass:example_event": {
"remove": {
},
"add": {
}
}
}
このように2行目でイベントを定義し、removeとaddを使用してコンポーネントグループを切り替える
ゲーム内で以下のコマンドを打ち込むことで、任意のイベントを発生させた状態のエンティティをスポーンさせることができるっぽい
code:command
/summon compass:example_entity ~ ~ ~ compass:example_event
組み込みイベント
いくつかのイベントはMinecraftに組み込まれているらしい
table:組み込みイベント
イベント名 説明
minecraft:entity_born このイベントは、エンティティが繁殖によってスポーンされたときに実行されます。
minecraft:entity_spawned このイベントは、エンティティがスポーンされるたびに実行されます。
ただしエンティティを手動で /summon した場合には実行されません。
minecraft:entity_transformed このイベントは、別のエンティティがこのエンティティに変身したときに実行されます。
minecraft:on_prime このイベントは、エンティティが起爆されて爆発する準備ができたときに実行されます。