/attribute: ค่าฐานเทียบกับตัวปรับแต่ง และทำไมค่าของคุณถึงรีเซ็ตอยู่เรื่อย
การตั้งค่าฐานเป็นแบบถาวร แต่การตั้งตัวปรับแต่งไม่ใช่ — เว้นแต่คุณจะเลือก operation ผิด สาม operation ลำดับการซ้อนทับ และกับดักของ slot
/attribute ดูเหมือนเป็นคำสั่งเดียวที่มีสามคำสั่งย่อย แต่จริง ๆ แล้วมันคือสองระบบที่บังเอิญใช้ชื่อร่วมกัน และการสับสนระหว่างสองระบบนี้คือสาเหตุที่ค่าของคุณเด้งกลับอยู่เรื่อย
ค่าฐานเทียบกับตัวปรับแต่ง
/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>
สาม operation และลำดับที่มันถูกนำไปใช้
| Operation | ทำอะไร | ถูกนำไปใช้ |
|---|---|---|
add_value | ค่า + n | ก่อนสุด |
add_multiplied_base | ค่า + (ฐาน × n) | ที่สอง |
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 ถูกบวกเข้าไปแล้ว — ไม่ใช่คูณยอดรวมที่วิ่งอยู่ — ซึ่งเป็นเหตุผลที่ตัวปรับแต่งสองตัวแบบนี้ซ้อนกันแบบบวกแทนที่จะทบต้น
ตอนนี้ id ของตัวปรับแต่งใช้ namespace แล้ว
เวอร์ชันเก่าใช้ UUID เวอร์ชันใหม่ใช้ namespaced id:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
การเพิ่มตัวปรับแต่งตัวที่สองที่มี id เดียวกันจะล้มเหลวด้วยข้อความ "Modifier … is already present" แทนที่จะซ้อนทับหรือแทนที่ ถ้าต้องการรีเฟรชบัฟ ให้ modifier remove มันก่อน
ตัวปรับแต่งจากอุปกรณ์อยู่บนไอเทม ไม่ใช่บนเอนทิตี
โบนัสความเสียหายของดาบคือ item component attribute_modifiers และมันจะทำงานเฉพาะเมื่อไอเทมอยู่ใน slot ที่ถูกต้องเท่านั้น:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
การลืมใส่ slot คือความผิดพลาดที่พบบ่อยที่สุด ค่าเริ่มต้นของมันคือ any ดังนั้นตัวปรับแต่งจะทำงานในทุก slot ของอุปกรณ์ — ดาบจะบัฟคุณจากมือรอง หรือจาก slot เกราะ ไม่ใช่แค่จากมือหลัก
slot ที่ใช้ได้: mainhand, offhand, hand, head, chest, legs, feet, armor, body, saddle, any
การอ่านค่ากลับ
/attribute @s minecraft:max_health get
จะคืนค่ายอดรวมที่แท้จริง ซึ่งรวมตัวปรับแต่งเข้าไปด้วย ส่วน /attribute @s minecraft:max_health base get จะคืนแค่ค่าฐาน
สร้างสิ่งใดก็ตามเหล่านี้ — รวมถึงรูปแบบ item component ที่ตั้ง slot ไว้แล้ว — ได้ใน Entity & Combat Command Builder