データパック作成中#3 ノックバックとダメージ
コマンドで飛び道具やボスを作っているとある問題に直面すると思います。 ノックバックとダメージをどうするか。 私も直面したので考えてみます。 ダメージ 敵やプレイヤーにダメージを与える方法は多分Effectを使うのが一般的です。 一番最初に思いつくのは即時ダメージですが、レベル0でも6ダメージも与えてしまします。 effect give @s minecraft:instant_damage 1 0 これは銃など小さなダメージをたくさん与えたいときに不便です。 ウィザー効果だとどうでしょう。 effect give @s minecraft:wither 1 1 これはレベル1で1ダメージだけ与えられます。 しかし、HPバーが黒くなるほか、高レベルだと1秒間に受けるダメージの量ではなく数が増えるので、見た目が悪い。 そこで使うのはArea Effect Cloud。これはエフェクトの効果時間をtick単位で指定できます。 この性質を使って一瞬だけウィザー効果を与えることで、HPバーが黒くならずダメージを与えることができます。 /summon area_effect_cloud ~ ~ ~ {Duration:6,Effects:[{Id:20b,Amplifier:31b,Duration:1,ShowParticles:0b}]} しかし、これにも欠点があります。なんと1ダメージしか与えられません。まさかの。 というわけで次。即時ダメージに耐性を重ね掛けしてダメージ量をコントロールする方法。 耐性は、効果レベル×20%ダメージを軽減し、 即時ダメージは 3×2^効果レベル のダメージを与えます。 例えば1.2ダメージを与えたいときは、 effect give @s instant_damage 1 0 effect give @s resistance 1 3 とします。 この方法の欠点は、整数ぴったりのダメージを与えるのが難しい点と、耐性が他のダメージも軽減してしまう点ですね。 まぁその辺は妥協してもいいかもしれません。 追記:即時ダメージを使うときに注意があります。 アンデットには代わりに即時回復を使わないとダメージが入らない ウィッチは魔法ダメージを軽減するので4倍のダメージを与えないといけない 追記その2 : /attributeを使えば解決と思っていた時期...