【発射体エンティティ】

はじめに

発射体エンティティが作れるようになると、投擲アイテムや発射アイテムからの発射物としてカスタムエンティティが使えるようになります。
ここではcomponentsブロックのJSONデータの内容を、「汎用ブロック」と「発射体設定」の2つのパートに分けて発射体エンティティの作り方をご紹介します。

※基本的な部分は▶ダミーエンティティのページでダミーエンティティが実装済みである事を前提に進めていきます。
※「汎用ブロック」とは、上記ページの「コンポーネント定義」の項目でご紹介させて頂いたcomponentsブロックの便宜上の呼称です。

定義ファイルの内容

以下のファイルはダミーエンティティの実装を元に必要な定義を追加したものです。
<ビヘイビアパック>/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_itemcomponentsブロックに以下のprojectileブロックを追加する必要があります(内容は投擲アイテムで設定したものと全く同じです)。
minecraft:projectile
projectile_entity
今回の場合はcustomize:dummy_entityを指定します。

上記で定義した補充アイテムが準備できれば、今度は発射アイテムの以下の部分に補充アイテムを登録する事で発射できるようになります。
minecraft:shooter
ammunition
item
今回の場合はcustomize:dummy_itemを指定します。

多言語設定

カスタムエンティティの場合はen_US.langファイルが規定の言語ファイルになるので以下のファイルに記載する必要があります。
<リソースパック>/texts/en_US.lang
entity.customize:dummy_entity.name=<カスタムエンティティの名前>
item.spawn_egg.entity.customize:dummy_entity.name=<カスタムエンティティのスポーンエッグの名前>
                    

※今回の場合は発射体のエンティティなので必要なければ書かなくてもいいでしょう。

おわりに

ここでご紹介した発射体エンティティの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ブロックに登録すると以下のように発射できるようになります。


ここでご紹介させて頂いた発射体エンティティは、以下のコンテンツでも利用しています。

▶召雷の魔石
▶風の杖
▶暴風の杖
▶繰風弾の杖
▶いかずちの杖
▶はかいのつるぎ
▶光の剣
▶ファンネルユニット
▶ホバーユニット構成アイテム