はじめに
発射体エンティティが作れるようになると、投擲アイテムや発射アイテムからの発射物としてカスタムエンティティが使えるようになります。
基本的な部分は以下のページでダミーエンティティが実装済みである事を前提にしています。
以降ではcomponents
ブロックのJSONデータの内容を、「汎用ブロック」と「発射体設定」の2つのパートに分けて発射体エンティティの作り方をご紹介します。
「汎用ブロック」とは、上記ページの>> コンポーネント定義の項目でご紹介させて頂いたcomponents
ブロックの便宜上の呼称です。
定義ファイルの内容
以下のファイルはダミーエンティティの実装を元に必要な定義を追加したものです。
{
"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
を指定します。
多言語設定
カスタムエンティティの場合はen_US.lang
ファイルが規定の言語ファイルになるので以下のファイルに記載する必要があります。
entity.customize:dummy_entity.name=<カスタムエンティティの名前>
item.spawn_egg.entity.customize:dummy_entity.name=<カスタムエンティティのスポーンエッグの名前>
今回の場合は発射体のエンティティなので必要なければ書かなくてもいいでしょう。
おわりに
ここでご紹介した発射体エンティティのminecraft:projectile
ブロックの項目は、既存のエンティティにも適用する事ができます。
例えばエンダーマイトに適用する場合、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
ブロックに登録すると以下のように発射できるようになります。
ここでご紹介させて頂いた発射体エンティティは、以下のコンテンツでも利用しています。