/attribute: nilai dasar versus pengubah, dan mengapa nilainya terus kembali ke semula
Mengatur nilai dasar bersifat permanen dan mengatur pengubah tidak — kecuali Anda memilih operasi yang salah. Tiga operasi, urutan penumpukan, dan jebakan slot.
/attribute terlihat seperti satu perintah dengan tiga subperintah. Sebenarnya ini adalah dua sistem berbeda yang kebetulan berbagi nama, dan mencampurkannya adalah alasan mengapa nilai terus kembali ke semula.
Nilai dasar versus pengubah
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base setmenulis ulang nilai entitas itu sendiri. Ini bertahan melalui pemuatan ulang dan tidak dihapus oleh apa pun kecualibase setlainnya.modifier addmenambahkan penyesuaian sementara di atasnya. Ini memiliki ID, dan dapat dihapus dengan ID tersebut.
Jika perubahan Anda hilang saat masuk kembali, Anda menggunakan pengubah dan sesuatu menghapusnya. Jika perubahan Anda tidak mau hilang, Anda menggunakan base set dan membutuhkan base reset.
Tiga operasi, dan urutan penerapannya
| Operasi | Fungsi | Diterapkan |
|---|---|---|
add_value | nilai + n | pertama |
add_multiplied_base | nilai + (dasar × n) | kedua |
add_multiplied_total | total berjalan × (1 + n) | terakhir |
Urutannya tetap dan itu penting. Dimulai dari dasar 20, lalu add_value 10 dan add_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base selalu mengalikan basis asli, bukan total berjalan — itulah mengapa keduanya menumpuk secara aditif daripada secara majemuk.
ID pengubah sekarang memiliki namespace
Versi lama menggunakan UUID. Versi modern menggunakan ID dengan namespace:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Menambahkan pengubah kedua dengan ID yang sama menggantikan yang pertama daripada menumpuk. Itu adalah cara yang dimaksudkan untuk menyegarkan buff — Anda tidak perlu menghapusnya terlebih dahulu.
Pengubah peralatan berada pada item, bukan entitas
Bonus kerusakan pedang yang terpesona adalah komponen item attribute_modifiers, dan itu hanya berlaku saat item berada di slot yang tepat:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slot diperlukan dan merupakan kesalahan umum. Hilangkan itu dan pengubah berlaku di setiap slot, jadi pedang di inventaris Anda memberi buff saat berada di sana.
Slot yang valid: mainhand, offhand, head, chest, legs, feet, armor, body, any.
Membaca kembali nilai
/attribute @s minecraft:max_health get
mengembalikan basis, bukan total efektif. Untuk mendapatkan total termasuk pengubah, gunakan execute store result pada papan skor dan baca itu.
Buat salah satu dari ini — termasuk bentuk komponen item dengan set slot — di Entity & Combat Command Builder.