/attribute: ค่าพื้นฐานเทียบกับตัวปรับแต่ง และทำไมค่าของคุณถึงรีเซ็ตอยู่เสมอ
การตั้งค่าพื้นฐานนั้นถาวร แต่การตั้งค่าตัวปรับแต่งนั้นไม่ถาวร เว้นแต่คุณจะเลือกการดำเนินการผิดพลาด การดำเนินการทั้งสาม ลำดับการซ้อน และกับดักของช่องสล็อต
/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
การดำเนินการทั้งสาม และลำดับการใช้งาน
| การดำเนินการ | ทำอะไร | ใช้งานเมื่อ |
|---|---|---|
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 จะคูณค่าพื้นฐานเดิมเสมอ ไม่ใช่ผลรวมที่กำลังดำเนินการ — ซึ่งเป็นเหตุผลว่าทำไมสองค่านี้จึงซ้อนกันแบบบวกเพิ่มแทนที่จะเป็นแบบทบต้น
ID ตัวปรับแต่งเป็นแบบมีเนมสเปซแล้ว
เวอร์ชันเก่าใช้ UUID เวอร์ชันใหม่ใช้ ID แบบมีเนมสเปซ (namespaced id):
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
การเพิ่มตัวปรับแต่งตัวที่สองที่มี ID เดียวกันจะแทนที่ตัวแรกแทนที่จะซ้อนกัน นี่คือวิธีที่ตั้งใจไว้สำหรับการรีเฟรชบัฟ — คุณไม่จำเป็นต้องลบมันออกก่อน
ตัวปรับแต่งอุปกรณ์อยู่บนไอเทม ไม่ใช่เอนทิตี
โบนัสความเสียหายของดาบที่ร่ายมนตร์เป็นส่วนประกอบไอเทม (item component) 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 บนสกอร์บอร์ดแล้วอ่านค่านั้น
สร้างสิ่งเหล่านี้ — รวมถึงรูปแบบส่วนประกอบไอเทมที่มีการตั้งค่าช่องสล็อต — ได้ใน Entity & Combat Command Builder