MC Toolkit

ガイド / コマンドとデータ

/attribute: 基本値と修飾子の違い、そして値がリセットされ続ける理由

基本値の設定は永続的で、修飾子の設定はそうではありません — ただし操作を間違えなければ。3つの操作、適用順序、そしてスロットの落とし穴について。修飾子には固有のIDがあり、そのIDを指定して個別に削除できます。

/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 が必要か、あるいは追加した修飾子に modifier remove <id> が必要です。

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 は、add_value 修飾子が加算された後の基本値に掛け算します — 実行中の合計ではなく — そのため、2つを重ねると複利ではなく加算的に積み重なります。

修飾子IDは名前空間付きになりました

古いバージョンではUUIDを使用していました。現代のバージョンでは名前空間付きIDを使用します:

/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value

同じIDで2つ目の修飾子を追加すると、スタックしたり置き換わったりするのではなく、「Modifier … is already present」で失敗します。バフを更新するには、まず modifier remove してください。

装備の修飾子はエンティティではなくアイテムに存在します

剣のダメージボーナスは attribute_modifiers のアイテムコンポーネントであり、アイテムが正しいスロットにある間だけ適用されます:

/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
  operation:"add_value",slot:"mainhand",id:"my:bonus"}]]

slot を省略するのがよくある間違いです。 デフォルトは any なので、修飾子はすべての装備スロットで適用されます — 剣がメインハンドだけでなく、オフハンドや防具スロットからでもバフをかけてしまいます。

有効なスロット: mainhand、offhand、hand、head、chest、legs、feet、armor、body、saddle、any。

値を読み戻す

/attribute @s minecraft:max_health get

は修飾子を含む実効合計を返します。/attribute @s minecraft:max_health base get は基本値のみを返します。

これらすべて — スロットを設定したアイテムコンポーネント形式も含めて — はEntity & Combat Command Builderで作成できます。

エンティティ & 戦闘コマンドビルダー →

その他のガイド

すべて見る →