/attribute: Giá trị gốc so với các yếu tố điều chỉnh, và tại sao giá trị của bạn cứ bị đặt lại
Đặt giá trị gốc là vĩnh viễn còn đặt yếu tố điều chỉnh thì không — trừ khi bạn chọn sai thao tác. Ba thao tác, thứ tự xếp chồng, và cái bẫy vị trí.
/attribute trông giống như một lệnh với ba lệnh con. Thực chất đây là hai hệ thống khác nhau nhưng lại có chung tên, và việc nhầm lẫn chúng là lý do khiến các giá trị cứ bị đặt lại.
Giá trị gốc so với yếu tố điều chỉnh
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base setghi đè giá trị của thực thể. Nó duy trì qua các lần tải lại và không bị loại bỏ bởi bất cứ thứ gì ngoại trừ mộtbase setkhác.modifier addthêm một điều chỉnh tạm thời lên trên. Nó có một ID và có thể bị loại bỏ bằng ID đó.
Nếu thay đổi của bạn biến mất khi đăng nhập lại, bạn đã sử dụng một yếu tố điều chỉnh và có thứ gì đó đã xóa nó. Nếu thay đổi của bạn không biến mất, bạn đã sử dụng base set và cần base reset.
Ba thao tác và thứ tự áp dụng
| Thao tác | Thực hiện | Áp dụng |
|---|---|---|
add_value | giá trị + n | đầu tiên |
add_multiplied_base | giá trị + (gốc × n) | thứ hai |
add_multiplied_total | tổng tích lũy × (1 + n) | cuối cùng |
Thứ tự là cố định và rất quan trọng. Bắt đầu từ giá trị gốc 20, sau đó add_value 10 và add_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base luôn nhân với giá trị gốc ban đầu, không phải tổng tích lũy — đó là lý do tại sao hai trong số chúng cộng dồn thay vì gộp lại.
ID yếu tố điều chỉnh hiện đã được đặt tên (namespaced)
Các phiên bản cũ hơn sử dụng UUID. Các phiên bản hiện đại sử dụng ID được đặt tên (namespaced id):
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Thêm một yếu tố điều chỉnh thứ hai với cùng ID sẽ thay thế cái đầu tiên thay vì xếp chồng. Đó là cách dự kiến để làm mới một hiệu ứng — bạn không cần phải xóa nó trước.
Yếu tố điều chỉnh trang bị nằm trên vật phẩm, không phải thực thể
Phần thưởng sát thương của một thanh kiếm được phù phép là một thành phần vật phẩm (item component) attribute_modifiers, và nó chỉ áp dụng khi vật phẩm ở đúng vị trí:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slot là bắt buộc và là lỗi thường gặp. Bỏ qua nó và yếu tố điều chỉnh sẽ áp dụng ở mọi vị trí, vì vậy một thanh kiếm trong kho đồ của bạn sẽ tăng cường cho bạn khi nó nằm ở đó.
Các vị trí hợp lệ: mainhand, offhand, head, chest, legs, feet, armor, body, any.
Đọc lại giá trị
/attribute @s minecraft:max_health get
trả về giá trị gốc, không phải tổng hiệu dụng. Để có được tổng bao gồm các yếu tố điều chỉnh, hãy sử dụng execute store result trên bảng điểm (scoreboard) và đọc giá trị đó.
Xây dựng bất kỳ thứ nào trong số này — bao gồm cả dạng thành phần vật phẩm với vị trí đã đặt — trong Trình xây dựng lệnh thực thể & chiến đấu (Entity & Combat Command Builder).