เหตุใด Minecraft จึงลงทะเบียน TAG_String โดยไม่มีเครื่องหมายคำพูด
ฉันได้ทดลองใช้ตัวปรับแต่งแอตทริบิวต์กับรายการต่างๆ สิ่งที่น่าสนใจคือตัวปรับแต่งแอตทริบิวต์แต่ละตัวต้องใช้ UUID ดังนั้นฉันจึงจัดเตรียมหมายเลขหนึ่งด้วยตัวเองโดยเพียงแค่เจาะตัวเลขสุ่มบนแป้นหมายเลขแป้นพิมพ์ของฉัน
ฉันรู้ว่าใน NBT UUID จะถูกเก็บไว้ใน Integer Array ซึ่งมีรูปแบบดังนี้:
[I;1,2,3,4,5,6]
และนี่คือคำสั่งที่เสร็จสมบูรณ์สองคำสั่งของฉัน (ซึ่งน้อยที่สุดเท่าที่จะทำได้):
give @p diamond_sword{AttributeModifiers:[{AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:1,Operation:0,UUID:[I;385638563,384738473,018492747,395785936]}]} 1
give @p diamond_sword{AttributeModifiers:[{AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:1,Operation:0,UUID:[I;828748274,736284721,276385632,174612674]}]} 1
หากคุณไม่ต้องการที่จะซับซ้อนขนาดนั้นฉันได้ลดขั้นต่ำลงแล้วโดยใช้คำสั่งเหล่านี้โดยใช้แท็กที่ผู้ใช้กำหนดเอง
give @p dirt{MyIntArray:[I;123,345,567,789]}
give @p dirt{MyIntArray:[I;123,456,789,012]}
ในทั้งสองตัวอย่างข้างต้นหนึ่งในนั้นทำให้เกิดข้อผิดพลาด อื่น ๆ ไม่ได้ แต่ทั้งหมดที่ฉันทำคือป้อนตัวเลขที่แตกต่างกัน อะไรคือปัญหา?
คำตอบ
นี่เป็นพฤติกรรมที่น่าสนใจบางอย่างที่ฉันพบขณะตอบคำถามนี้ ฉันต้องการแบ่งปันสิ่งที่พบในโพสต์นี้ ให้มันเป็นแนวทางในการใช้ NBT
พิจารณาCanDestroy
คำพูดง่ายๆ เมื่อคุณนึกถึงมันจะมีลักษณะดังนี้:
/give @s minecraft:diamond_pickaxe{CanDestroy:["minecraft:dirt"]}
แต่บางโพ สต์ก็ไม่มีเครื่องหมายคำพูดรอบค่า /give @s dirt{CanDestroy:[dirt]}
ลองใช้คำสั่งของพวกเขาตัวอย่างเช่น: ได้ผลหรือไม่?
น่าแปลกที่ใช่
เห็นได้ชัดว่าคุณไม่จำเป็นต้องพิมพ์เครื่องหมายคำพูดโดยรอบหากสตริงของคุณประกอบด้วยอักขระต่อไปนี้เท่านั้น (ไม่รวมช่องว่าง):
+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
ยกเว้นอย่างหนึ่งคือหากเข้ารับการรักษาเป็นจำนวนซึ่งจะนับสำหรับรายการเช่น12b
, และ512s
82664
แต่หากมีการจัดรูปแบบตัวเลขไม่ถูกต้องและพอดีกับหมวดหมู่สตริงที่ไม่มีเครื่องหมายคำพูดข้างต้นก็จะทำได้แม้ว่าคุณจะไม่ต้องการก็ตาม คนหน้าคล้ายหมายเลขต่อไปนี้จะกลายเป็นสตริง:
- ตัวเลขที่มีศูนย์นำหน้า: (
012b
,04582s
)
ในการแก้ปัญหาให้ลบเลขศูนย์นำหน้าออกจากตัวเลขของคุณ: (12b
,4582s
) - ตัวเลขที่อยู่นอกช่วงของประเภทข้อมูลของคุณ: (
255b
,2177548418058
)
ในการแก้ไขตรวจสอบให้แน่ใจว่าระบุประเภทข้อมูลที่ถูกต้อง: (255
,2177548418058l
)