/attribute: 基本値と修飾子、そして値がリセットされ続ける理由
基本値の設定は永続的ですが、修飾子の設定はそうではありません。ただし、間違った操作を選択した場合を除きます。3つの操作、スタック順序、そしてスロットの落とし穴について説明します。
/attributeは3つのサブコマンドを持つ1つのコマンドのように見えます。しかし、実際には名前を共有しているだけで、2つの異なるシステムです。これらを混同することが、値が元に戻ってしまう原因です。
基本値と修飾子
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base setはエンティティ自身の値を書き換えます。これはリロード後も永続し、他のbase set以外によって削除されることはありません。modifier addは一時的な調整を重ねます。これにはIDがあり、そのIDによって削除できます。
ログアウトすると変更が消える場合、修飾子を使用しており、何かがそれをクリアしています。変更が消えない場合、base setを使用しており、base resetが必要です。
3つの操作と適用順序
| 操作 | 内容 | 適用順序 |
|---|---|---|
add_value | 値 + n | 最初 |
add_multiplied_base | 値 + (基本値 × n) | 2番目 |
add_multiplied_total | 累積合計 × (1 + n) | 最後 |
順序は固定されており、重要です。基本値20から始まり、次にadd_value 10とadd_multiplied_total 0.5を適用します。
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_baseは常に元の基本値を乗算し、累積合計ではありません。そのため、2つのadd_multiplied_baseは複合的ではなく、加算的にスタックします。
修飾子IDは名前空間付きになりました
以前のバージョンではUUIDを使用していました。最新バージョンでは名前空間付きIDを使用します。
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
同じIDを持つ2番目の修飾子を追加すると、スタックするのではなく、最初の修飾子が置き換えられます。これはバフを更新するための意図された方法であり、最初に削除する必要はありません。
装備修飾子はエンティティではなくアイテムに存在します
エンチャントされた剣のダメージボーナスはattribute_modifiersのアイテムコンポーネントであり、適切なスロットにアイテムがある場合にのみ適用されます。
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slotは必須であり、よくある間違いです。これを省略すると、修飾子はすべてのスロットに適用されるため、インベントリにある剣がそこにある間、あなたを強化します。
有効なスロット: mainhand、offhand、head、chest、legs、feet、armor、body、any。
値の読み取り
/attribute @s minecraft:max_health get
は基本値を返し、有効な合計ではありません。修飾子を含む合計を取得するには、スコアボードでexecute store resultを使用し、それを読み取ります。
これらのいずれか(スロットが設定されたアイテムコンポーネント形式を含む)は、エンティティ&戦闘コマンドビルダーで作成できます。