เหตุใด Minecraft จึงลงทะเบียน TAG_String โดยไม่มีเครื่องหมายคำพูด

Aug 20 2020

ฉันได้ทดลองใช้ตัวปรับแต่งแอตทริบิวต์กับรายการต่างๆ สิ่งที่น่าสนใจคือตัวปรับแต่งแอตทริบิวต์แต่ละตัวต้องใช้ 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]}

ในทั้งสองตัวอย่างข้างต้นหนึ่งในนั้นทำให้เกิดข้อผิดพลาด อื่น ๆ ไม่ได้ แต่ทั้งหมดที่ฉันทำคือป้อนตัวเลขที่แตกต่างกัน อะไรคือปัญหา?

คำตอบ

1 ExpertCoder14 Aug 20 2020 at 09:19

นี่เป็นพฤติกรรมที่น่าสนใจบางอย่างที่ฉันพบขณะตอบคำถามนี้ ฉันต้องการแบ่งปันสิ่งที่พบในโพสต์นี้ ให้มันเป็นแนวทางในการใช้ 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)
    ในการแก้ไขตรวจสอบให้แน่ใจว่าระบุประเภทข้อมูลที่ถูกต้อง: ( 2552177548418058l)