アドオン作成 - エンティティ
目次は右上の「≡」から!
ファイル・フォルダの場所
ビヘイビアパックの「entities」フォルダにファイルを置きます。
ビヘイビア
┣ manifest.json
┣ pack_icon.json
┗ entities
┗ 〇〇.json
作成の手順
エンティティ本体に加えてテクスチャも追加するので、ビヘイビアとリソース両方が必要になります。
① entitiesフォルダに定義JSONを新規作成する
(+ EntityEvを作成)
② テクスチャの追加
③ ジオメトリの追加
④ Anim(Res)の追加
⑤ AniCon(Res)追加
⑥ RenConの追加
⑦ EntityClient定義JSONを作成
注
Anim: Animationの略
AniCon:
AnimationControllerの略
RenCon:
RenderControllerの略
(Res):「リソースパックの」
エンティティを定義するJSON
● 基本構造
Dat
entities/my_entity.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":{
// ActProp
},
"aliases": {
// エイリアス
},
"scripts": {
"animate": [
// EntityEv名
]
},
"animations": {
// EntityEv
}
},
"permutations": [
// Perms
],
"component_groups": {
// CompGrps
},
"components": {
// コンポーネント
},
"events": {
// イベント
}
}
}
各プロパティについて:
プロパティ名 | 簡単な説明 |
"identifier" | このエンティティのID |
"is_spawnable" | スポーンエッグをクリエイティブインベントリに追加するかどうか |
"is_summonable" | コマンドで/summonできるかどうか |
"is_experimental" | 試験的かどうか(基本的にfalseでいい) |
"runtime_identifier" | 性質を継承するエンティティのID |
コンポーネント
このエンティティの性質はコンポーネントによって決まります。一つひとつのコンポーネントは
"minecraft:〇〇": {
// 0個以上のプロパティ
}
という形をしています。
イベント 上級
● 形態の変化とCompGrp
"components"に書かれた「コンポーネント」はそのエンティティのデフォルトの性質になります。
たとえば、ゾンビは子どもや大人など複数の形態を持ちますが、同じエンティティなので共通する性質(デフォルトの性質)があります。
そのような共通の性質は"components"に書きます。
一方、子ども/大人のように形態によって変わる性質がある場合は、その性質を切り替えられるようにする必要があります。
そこで、"component_groups"の
「ComponentGroup (略:CompGrp)」を利用します。
"component_groups": {
"group_a": {
// 形態Aのコンポーネント
},
"group_b": {
// 形態Bのコンポーネント
}
}
CompGrpを切り替えるには"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"を追加
}
}
イベントは特定のコンポーネントによって発生させることができます。
● EvFunc
一つひとつのイベントでは「EventFunction (略:EvFunc)」を用いて何を起こすかを指定します。
CompGrpを追加したり削除したりする"add"、"remove"もEvFuncです。
エンティティのEvFuncは以下の通りです:
名前 | 簡単な説明 |
"add" | CompGrpを追加する |
"remove" | CompGrpを削除する |
"run_command" | コマンドを実行する |
"set_actor_property" | ActPropの値を変更する |
"sequence" | 複数のEvFuncを実行する |
"randomize" | 指定した中からランダムに実行 |
"trigger" | イベントを実行 |
EntityEv 上級
より複雑な挙動を実現するためにEntityEvというものが利用できます。
詳しい説明は別記事に書いたのでここではエンティティ本体との紐づけかたを説明します。
"scripts": {
"animate": [
"~#M(83ffd9)ex1M#~"
]
},
"animations": {
"~#M(83ffd9)ex1M#~": "(EntityEvのID)"
}
"animations"で紐づけるEntityEvに、各自で名前をつけて(例では"ex1")、IDと紐づけます。
次に、その名前を"scripts"の"animate"で指定します。
上記のように、単に指定するだけならそのエンティティから毎tick実行されます。
"scripts": {
"animate": [
~#M(83ffd9){ "ex1": "(Molang式)" }M#~
]
},
"animations": {
"ex1": "(EntityEvのID)"
}
また、このようにしてMolang式とともに指定すると、Molang式の条件を満たしたときだけ処理されるようになります。
ActProp 上級
「ActorProperty (略:ActProp)」はエンティティが変数を持てるようにすることができます。
"minecraft:variant"コンポーネントとCompGrpを用いてほとんど同じことができますが、
数値の種類が膨大なとき、数値以外の変数をもつとき、グループを用いるには小規模であるとき(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:(プロパティ名)": ~#C(cf0000)(値)C#~
}
}
● Perm
「Permutation (略:Perm)」
でCompGrpのようにプロパティの値によってエンティティの形態(=Perm)を変化させることができます。
"permutations": [
~#r{ // 1つの形態(=Perm)
%% "components": {
%% // コンポーネント
%% },
%% "condition": "(Molang式)"
%%}r#~
]
"condition"のMolang式でプロパティを基にした条件式を書き、
その条件が満たされたとき(=プロパティが特定の値になったとき)のみ同オブジェクト内(赤枠内)の"components"に書かれたコンポーネントが適用されます。
パーミュテーションを複数にするときは、赤枠部分を増やします:
"permutations": [
~#r{ // Perm1
%% "components": {
%% // Perm1のコンポーネント
%% },
%% "condition": "(Molang式)"
%%},r#~
~#r{ // Perm2
%% "components": {
%% // Perm2のコンポーネント
%% },
%% "condition": "(Molang式)"
%%}r#~
]
できないこと
- 当たり判定(CollisionBox)が複雑なモブ(蛇など)