圧倒的パラメータの量!飛び道具エンティティを制御するコンポーネント「minecraft:projectile」#1

 飛び道具。遠距離攻撃と言ったほうがわかりやすいひともいるでしょうか。実はMinecraftにはそんな飛び道具がたくさんあります。スケルトンが飛ばしてくる矢、ガストが飛ばしてくるファイアボールなどなど……。攻撃が目的じゃないけど、飛び道具として分類されているものもあります。ニワトリが産むタマゴ、周囲にエフェクトをかけるスプラッシュポーションもそうです。とにかくMinecraftでは投げられる・飛ばせるものはみんなprojectile(プロジェクトル)の仲間です。
 今回は、そのプロジェクトルを定義する「minecraft:projectile」というコンポーネントについてまとめてみたいと思います。
 そのコンポーネントについては一応リファレンス(Entities.html)に載っていますが、とっても不親切です……。なかには隠し要素的な感じでリファレンスに載っていなくても使えるパラメータが山ほどあります。もちろんそれは使われているのを見て使い方を判断して(英語もヒントになりますね)自分でも使うんですが、書き方を忘れて、さらにどのエンティティがその要素を持っていたのか忘れてしまっては探すのが面倒です(考えれば見当は着きますが)。
 ということで、どちらかと言えば「何ができるのかわかってからネタを考えるひと」のために、いくつものjsonをまわらずにすむようここへまとめる──そんな理由にしておきましょうか。

長々と文章を書いていては飽きてしまいますね。それではまずは大まかな骨組みを見ておきましょう。

"minecraft:projectile": {
  "on_hit": {
    "arrow_effect": {},
    "catch_fire": {},
    "definition_event": {},
    "douse_fire": {},
    "freeze_on_hit": {},
    "grant_xp": {},
    "impact_damage": {},
    "mob_effect": {},
    "particle_on_hit": {},
    "remove_on_hit": {},
    "spawn_aoe_cloud": {},
    "spawn_chance": {},
    "stick_in_ground": {},
    "teleport_owner": {},
    "thrown_potion": {}
  }
  //other_parameters
}

 ──こんな形をしております。ゴツいですね。まあいらないものは書かなくてもいいので、よほど特殊なプロジェクトルでもない限りとてつもなく長くなることはありません。

on_hitの中身

 問題は、on_hitの中身です。上にもあるように、on_hitの中身は全部集めるとたくさんあることがわかります。そして、そのon_hitの中身にはarrow_effectだったりcatch_fireだったりが入っていますが、またそのさらに中身もぎっしりだったりします。──そこでイチバン厄介なのが、こんなにたくさんあるon_hitの中身については一切リファレンスには載っていないということです。もしリファレンスしか見ていなかったら、知らなかった訳ですから、どこかもったいない感じがします。
 という訳もあってここにまとめて置けば調べるのが楽になるかな、ネタ探しが楽になるかな、と思ったわけです。
 ちなみに、「//other_parameters」のところにはリファレンスに載っているパラメータが続きます。実際には「//other_parameters」なんて書きませんよ!!

 それではここから書き連ねていきましょうか。(アルファベット順にしました!)

☆説明の見かた

□ on_hitの中身のパラメータ(の名前)

・「on_hitの中身」の中身のパラメータ(の名前)

〜カッコのアルファベットの意味〜
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Boo:ブーリアン型。「true」か「false」がはいる。お化けじゃないよ。
Dec:小数。「0.1」とかの小数がはいる。「1」みたいに「.0」を書かなくても動くが、どのパラメータに小数を入れられるのか思い出せるように「1.0」などと書くのがオススメ。
Int:整数。「2」とかの整数がはいる。動作しないなと思ったらここに小数を入れていないか疑ってみよう。
Str:文字列。たとえば、スポーンさせるエンティティの名前とか。
Vec3:「[ a, b, c ]」の形。a,b,cには数字がはいる。

■ arrow_effect

 矢のエフェクトに関するパラメータ。中身は空っぽにして使います。おそらく持っている矢のエフェクトデータ値に応じてエフェクトを反映してくれるものだと思います。内部システムに頼っているところがあるので、エフェクトがつくプロジェクトルを作りたいのなら下にあるmob_effectでつけるのがいいでしょう。

■ catch_fire

 空っぽでも使えます。プロジェクトルが地面に当たったときに火がつくかどうかを定義します。エンティティに当たったときに燃えるかどうかはまた別(impact_damageの中身のcatch_fire参照)なので気をつけましょう。

​・fire_affected_by_griefing(Boo)

「モブによる妨害」の設定に影響されるかどうか。falseにすると、設定がどうであれ地面に当たると火がつきます。

■ definition_event

 プロジェクトルが物にぶつかったときにイベントを起こす場合、このパラメータで定義します。たとえば、ガストのファイアボールは地面に当たったときにイベントでminecraft:explodeコンポーネントを引き出して爆発しています。

・affect_projectile(Boo)

(効能は不明です!ごめんなさい!)
(デフォルトはtrueなので困ったらそれにしておくといいでしょう)

・event_trigger

これにもさらに中身があります。
 ・event(Str)
  引き起こすイベント名がはいります。
 ・target(Str)
  イベントの引き起こし元です。よくわからなかっら"self"を
  入れましょう。

■ douse_fire

 中身は空っぽにして使います。物に当たったとき、周囲の火を消します。水のスプラッシュポーションがそうですね。

■ freeze_on_hit

 ふつうだと絶対見つからないパラメータ。物に当たったとき、周囲の水源を凍らせます。

・size(Dec)

凍らせる範囲。

・shape(Str)

凍らせる範囲の形。"cube"しか見つかっていないのでそれしか使えないと思ってください。

・snap_to_block(Boo)

(効能は不明です!ごめんなさい!)
(デフォルトはtrueなので困ったらそれにしておくといいでしょう)

■ grant_xp

 経験値ビンがもっているパラメータ。物に当たったときに指定した数の経験値オーブを落とします。

・minXP(Int)

落とす経験値オーブの最小個数。「XP」は大文字なので注意!

・max(Int)

落とす経験値オーブの最大個数。「XP」は大文字なので注意!

■ impact_damage

 エンティティに当たったときに与えるダメージについての設定。いちばんよく使う?

・damage(Int)

ダメージの量。ハート1個分は2。

・knockback(Boo)

ノックバックするかどうか。

・semi_random_diff_damage(Boo)

プロジェクトルの速さに比例してダメージをランダムに変えるかどうか。たとえば、弓矢はちゃんと引かずに撃つとスピードが遅くなり、ダメージも少ないですよね。

・destroy_on_hit(Boo)

エンティティに当たったときにそのプロジェクトルが消滅するかどうか。ブロックに当たったときの話は□remove_on_hit参照。

・max_critical_damage(Int)

クリティカルダメージの最大値。semi_random_diff_damageがtrueのときに使うのかも。

・min_critical_damage(Int)

クリティカルダメージの最小値。semi_random_diff_damageがtrueのときに使うのかも。

・power_multiplier(Dec)

(効能は不明です!ごめんなさい!)

・should_bounce(Boo)

(効能は不明です!ごめんなさい!)

・catch_fire(Boo)

エンティティが当たったときにそのエンティティが燃えるかどうか。

・filter(Str)

ダメージを与えられるエンティティのアイデンティファイアを書きます。たとえば雪玉なら"blaze"です。

■ mob_effect

 ウィザーの頭のように、当たったら何かしらエフェクトをつけるというパラメータです。

・effect(Str)

エフェクト名がはいります。おそらくコマンドで打つ名前同じで大丈夫でしょう。

・durationeasy(Int)

イージーモードでのエフェクトの効能時間。

・durationnormal(Int)

ノーマルモードでのエフェクトの効能時間。

・duraationhard(Int)

ハードモードでのエフェクトの効能時間。

・amplifier(Int)

エフェクトの強さ。/effectコマンドでうつ2つ目の数字です。

■ particle_on_hit

 物に当たったときのパーティクルの設定。

・particle_type(Str)

出すパーティクルの種類。使われているものでは、"iconcrack"、"snowballpoof"があります。もしかしたらどんなパーティクルでも使えるというわけではないかもしれないのでそのつもりでいてください。

・num_particle(Int)

パーティクル作りを理解しているひとならわかりやすいと思いますが、「パーティクルの数」と言いようがありません。

・on_entity_hit(Boo)

エンティティに当たったときにパーティクルを出すかどうか。

・on_other_hit(Boo)

エンティティ以外──要するにブロックでしょうか──に当たったときにパーティクルを出すかどうか。

■ remove_on_hit

 中身は空っぽにして使います。プロジェクトルがブロックに当たったときに消滅するかどうか。true/falseじゃなくて、このパラメータを書くか書かないかで切り替えます。

■ spawn_aoe_cloud

 物に当たったときに残留ポーションの雲をスポーンさせるかどうかを設定します。

・radius(Dec)

残留ポーションの雲の半径──すなわち大きさ。

・radius_on_use(Dec)

エンティティにヒットするたびにサイズの変更をする。

・potion(Int)

エフェクトのID。クリエイティブインベントリの順番と同じらしいですよ。

・particle(Str)

残留ポーションの雲を出現させると同時に出すパーティクル。使われてるものでは"dragonbreath"があります。もしかしたらどんなパーティクルでも使えるというわけではないかもしれないのでそのつもりでいてください。

・duration(Int)

エフェクトの効能時間。

・clolor(Vec3)

残留ポーションの雲の色。それぞれの数字は整数で、0から255までで、RGBで指定します。

・affect_owner(Boo)

プロジェクトルを飛ばした主がそのエフェクトを受けるかどうか。

・reapplication_delay(Int)

エフェクトを与える時の遅延。(名前からするに、エフェクトにもう一回かかるときの遅延だと思います。ダメージポーションならダメージの間隔が広くなるのではないでしょうか)

■ spawn_chance

 ニワトリのタマゴのように、物に当たるとエンティティがそこにスポーンするという効果を持たせます。

・first_spawn_chance(Int)

first_spawn_countでエンティティがスポーンする確率。

・second_spawn_chance(Int)

second_spawn_countでエンティティがスポーンする確率。first_spawn_chanceが成功した場合のみ機能するらしいです。

・first_spawn_count(Int)

スポーンする数。(詳しくはわかりません!ごめんなさい!)

・second_spawn_count(Int)

スポーンする数。(詳しくはわかりません!ごめんなさい!)

・spawn_definition(Str)

何をスポーンさせるか。そのままアイデンティファイアがはいる。

・spawn_baby(Boo)

子どもの状態でスポーンするかどうか。子どもの状態が存在するエンティティでないとおそらく意味がありません。

・first_spawn_percent_chance(Dec)

スポーンする確率。(詳しくはわかりません!ごめんなさい!)

■ stick_in_ground

 ブロックに刺さって残るかどうか。空っぽでも使える。

・shake_time(Dec)

(効能は不明です!ごめんなさい!)

■ teleport_owner

 そのプロジェクトルを飛ばした主を着地地点にテレポートさせるかどうか。中身は空っぽにして使います。

■ thrown_potion_effect

 ポーションのエフェクトに関するパラメータ。中身は空っぽにして使います。おそらく持っているポーションのエフェクトデータ値に応じてエフェクトを反映してくれるものだと思います。内部システムに頼っているところがあるので、あまり使うことはないと思います。

 とりあえずこれでon_hitの中身はおしまいです。たくさんありましたね……
 ということでお次はon_hitの外のパラメータです──といきたいところですが、なにせon_hitの中身だけでここまで来てしまいました、長ったらしくてしかたないと思うのでここで一旦切って、#2に回しましょう。

↓次

MinecraftBEアドオン-ヒント倉庫

MimecraftBEのアドオン作りで困ったときにここで解決できるようにと個人によって作られたものです

2コメント

  • 1000 / 1000

  • キンジ

    2020.03.14 08:47

    @キンジfirst_spawn_chance(Int) second_spawn_chance(Int) first_spawn_count(Int) second_spawn_count(Int) は上2つは下二つのそれぞれの確率です それとfirstの確率を通った場合にしかsecondの確率は通らなかった記憶です
  • キンジ

    2020.03.14 08:45

    radius_on_useはエンティティにヒットするたびにサイズの変更をするものだったはずです reapplication_delayはeffectを与える時の遅延じゃないでしょうか