【発射体エンティティ】
はじめに
発射体エンティティが作れるようになると、投擲アイテムや発射アイテムからの発射物としてカスタムエンティティが使えるようになります。
ここでは
※基本的な部分は▶ダミーエンティティのページでダミーエンティティが実装済みである事を前提に進めていきます。
※「汎用ブロック」とは、上記ページの「コンポーネント定義」の項目でご紹介させて頂いた
ここでは
components
ブロックのJSONデータの内容を、「汎用ブロック」と「発射体設定」の2つのパートに分けて発射体エンティティの作り方をご紹介します。※基本的な部分は▶ダミーエンティティのページでダミーエンティティが実装済みである事を前提に進めていきます。
※「汎用ブロック」とは、上記ページの「コンポーネント定義」の項目でご紹介させて頂いた
components
ブロックの便宜上の呼称です。定義ファイルの内容
以下のファイルはダミーエンティティの実装を元に必要な定義を追加したものです。
<ビヘイビアパック>/entities/dummy_entity.json
上記のコメントのように、大きく分けて「汎用ブロック」と「発射体設定」の2つのパートに分けています。
以下ではパート分けしたそれぞれの内容をみていきます。
<ビヘイビアパック>/entities/dummy_entity.json
{ "format_version": "1.17.10", "minecraft:entity": { "description": { "identifier": "customize:dummy_entity", "is_spawnable": false, "is_summonable": true }, "components": { // 汎用ブロック -----START "minecraft:breathable": { "breathes_solids": true, "breathes_water": true }, "minecraft:collision_box": { "width": 0.0, "height": 0.0 }, "minecraft:pushable": { "is_pushable": false, "is_pushable_by_piston": false }, "minecraft:physics": { "has_collision": true, "has_gravity": true, "push_towards_closest_space": true }, // 汎用ブロック -----END // 発射体設定 -----START "minecraft:projectile": { "on_hit": { "impact_damage": { "damage": [ 1, 4 ], "knockback": true, "semi_random_diff_damage": false, "destroy_on_hit": false }, "stick_in_ground": { "shake_time" : 0.35 } }, "hit_sound": "bow.hit", "power": 1.6, "gravity": 0.05 } // 発射体設定 -----END } } }
上記のコメントのように、大きく分けて「汎用ブロック」と「発射体設定」の2つのパートに分けています。
以下ではパート分けしたそれぞれの内容をみていきます。
汎用ブロック
・minecraft:breathable
射出場所によっては色んなところで着弾する事があり得るので、エンティティが呼吸できるブロック、あるいは場所を設定しています。- breathes_solids(=true)
- 固形ブロック内で呼吸できます。
- breathes_water(=true)
- 水の中で呼吸できます。
これを設定しておかないと射出場所によってはすぐにデスポーンしてしまう事があるので注意が必要です。
・minecraft:collision_box
ここでは衝突判定が作動しないように高さ・幅共にゼロで設定しています。- height(=0.0)
- 高さなし。
- width(=0.0)
- 幅なし。
・minecraft:pushable
上記のcollision_box
が設定されている場合に限りますが、モブ等によって押し出される事があるので無効になるように設定しています。- is_pushable(=false)
- モブ等からの押し出しは無効。
- is_pushable_by_piston(=false)
- ピストンによる押し出しは無効。
・minecraft:physics
物理法則を設定しています。- has_collision(デフォルト:true)
-
trueの場合、オブジェクトと衝突します。
- has_gravity(デフォルト:true)
-
trueの場合、重力の影響を受けます。
- push_towards_closest_space(デフォルト:false)
- trueの場合、ブロックに埋まった時に最も近い空き領域に押し出されます。
発射体設定
・minecraft:projectile
- on_hit
-
発射物の着弾時の動作を指定します。
- impact_damage
-
発射物のヒット時のダメージに関する設定を行います。
- damage(=[1, 4])
-
ダメージの量を数値、あるいは配列(最小値、最大値)で指定します。
- knockback(=true)
-
trueの場合、ノックバックが発生します。
- semi_random_diff_damage(=false)
-
trueの場合、
damage
と速度に基づいてダメージがランダム化されます。
- destroy_on_hit(=false)
- trueの場合、発射物がヒット時に削除されます。
- stick_in_ground
-
発射物が地面に突き刺さるようにする場合、指定します。
- shake_time(=0.35)
- 着弾時に揺れる時間(恐らく秒数)を指定します。
- hit_sound(="bow.hit")
-
発射物の着弾時のサウンドを指定します。
<リソースパック>/sounds.json
内のindividual_event_sounds
ブロックの項目から選択します。
- power(=1.6)
-
発射物の速度を指定します。
- gravity(=0.05)
-
発射物に適用される重力を指定します。
値が大きいほど落下速度が速くなります。
発射体としてアイテムに登録
このままでは発射体として機能しないので、以下それぞれのアイテムに定義を追加する必要があります。
そして今回作成した発射体エンティティは補充アイテムに登録する必要があります。
仮に▶ダミーアイテムのページでご紹介させて頂いたダミーアイテムを補充アイテムとして使う場合、
上記で定義した補充アイテムが準備できれば、今度は発射アイテムの以下の部分に補充アイテムを登録する事で発射できるようになります。
投擲アイテムで使う場合
▶投擲アイテムのページでご紹介させて頂いたprojectile
ブロックを以下の内容に置き換える事で、今回ご紹介した発射体エンティティを投擲できるようになります。
- minecraft:projectile
-
- projectile_entity
-
今回の場合は
customize:dummy_entity
を指定します。
発射アイテムで使う場合
投擲アイテムの場合と比べると少し複雑になりますが、補充アイテム(発射時にアイテムスロット上で消費するアイテム)と▶発射アイテムのページでご紹介させて頂いた発射アイテムにそれぞれ定義を追加する必要があります。そして今回作成した発射体エンティティは補充アイテムに登録する必要があります。
仮に▶ダミーアイテムのページでご紹介させて頂いたダミーアイテムを補充アイテムとして使う場合、
customize:dummy_item
のcomponents
ブロックに以下のprojectile
ブロックを追加する必要があります(内容は投擲アイテムで設定したものと全く同じです)。- minecraft:projectile
-
- projectile_entity
-
今回の場合は
customize:dummy_entity
を指定します。
上記で定義した補充アイテムが準備できれば、今度は発射アイテムの以下の部分に補充アイテムを登録する事で発射できるようになります。
- minecraft:shooter
-
- ammunition
-
- item
-
今回の場合は
customize:dummy_item
を指定します。
多言語設定
カスタムエンティティの場合は
<リソースパック>/texts/en_US.lang
※今回の場合は発射体のエンティティなので必要なければ書かなくてもいいでしょう。
en_US.lang
ファイルが規定の言語ファイルになるので以下のファイルに記載する必要があります。<リソースパック>/texts/en_US.lang
entity.customize:dummy_entity.name=<カスタムエンティティの名前> item.spawn_egg.entity.customize:dummy_entity.name=<カスタムエンティティのスポーンエッグの名前>
※今回の場合は発射体のエンティティなので必要なければ書かなくてもいいでしょう。
おわりに
ここでご紹介した発射体エンティティの
例えばエンダーマイトに適用する場合、JSONファイルには以下のように追加します。
※黄色の部分が今回追加した場所です。
<ビヘイビアパック>/entities/endermite.json
これを投擲アイテムの
![]()
ここでご紹介させて頂いた発射体エンティティは、以下のコンテンツでも利用しています。
▶召雷の魔石
▶風の杖
▶暴風の杖
▶繰風弾の杖
▶いかずちの杖
▶はかいのつるぎ
▶光の剣
▶ファンネルユニット
▶ホバーユニット構成アイテム
minecraft:projectile
ブロックの項目は、既存のエンティティにも適用する事ができます。例えばエンダーマイトに適用する場合、JSONファイルには以下のように追加します。
※黄色の部分が今回追加した場所です。
<ビヘイビアパック>/entities/endermite.json
{ "format_version": "1.17.10", "minecraft:entity": { "description": { "identifier": "minecraft:endermite", "spawn_category": "monster", "is_spawnable": true, "is_summonable": true, "is_experimental": false }, "components": { ・ ・ ・ "minecraft:projectile": { "on_hit": { "impact_damage": { "damage": [ 1, 4 ], "knockback": true, "semi_random_diff_damage": false, "destroy_on_hit": false }, "stick_in_ground": { "shake_time" : 0.35 } }, "hit_sound": "bow.hit", "power": 1.6, "gravity": 0.05 } ・ ・ ・ } } }
これを投擲アイテムの
projectile
ブロックに登録すると以下のように発射できるようになります。ここでご紹介させて頂いた発射体エンティティは、以下のコンテンツでも利用しています。
▶召雷の魔石
▶風の杖
▶暴風の杖
▶繰風弾の杖
▶いかずちの杖
▶はかいのつるぎ
▶光の剣
▶ファンネルユニット
▶ホバーユニット構成アイテム