หัวผู้เล่นตามชื่อผู้ใช้: ส่วนประกอบโปรไฟล์ทำงานอย่างไรและทำไมหัวถึงว่างเปล่า
หัวผู้เล่นจะเก็บสแนปช็อตสกิน ไม่ใช่ลิงก์แบบเรียลไทม์ นี่คือส่วนประกอบโปรไฟล์ เหตุผลที่หัวเก่าแสดงสกินผิด และวิธีที่การค้นหา UUID เข้ามาเกี่ยวข้อง
การให้หัวผู้เล่นดูเหมือนควรจะเป็นอาร์กิวเมนต์เดียว แต่มันไม่ใช่สิ่งที่คนส่วนใหญ่คาดหวัง และนั่นอธิบายความผิดปกติส่วนใหญ่ที่เกี่ยวข้องกับหัวผู้เล่น
คำสั่ง
/give @p player_head[profile="Notch"]
ส่วนประกอบ profile เข้ามาแทนที่ NBT SkullOwner แบบเก่า โค้ดที่ใช้ {SkullOwner:"Notch"} เป็นของเวอร์ชันก่อน 1.20.5 และไม่ทำงานแล้วในปัจจุบัน
สิ่งที่ถูกจัดเก็บจริง
หัวผู้เล่น ไม่ได้ เก็บชื่อผู้ใช้และดึงสกินในภายหลัง เมื่อสร้างหัวผู้เล่น เซิร์ฟเวอร์จะแปลงชื่อเป็น UUID และ สแนปช็อตพื้นผิว แล้วนำไปฝังในไอเท็ม:
"profile": {
"name": "Notch",
"id": [I; …],
"properties": [{ "name": "textures", "value": "<base64>" }]
}
ผลที่ตามมาสองประการ:
- หัวผู้เล่นที่สร้างเมื่อปีที่แล้วจะแสดงสกินของปีนั้น การที่ผู้เล่นเปลี่ยนสกินของตนเองไม่ได้อัปเดตหัวผู้เล่นที่มีอยู่ในโลกแล้ว นี่ไม่ใช่ข้อผิดพลาดและไม่มีการรีเฟรช
- หัวผู้เล่นทำงานแบบออฟไลน์ได้ เมื่อถูกฝังแล้ว ไม่จำเป็นต้องมีการเรียก API ของ Mojang เพื่อเรนเดอร์ ซึ่งเป็นเหตุผลว่าทำไมหัวผู้เล่นจึงอยู่รอดได้บนเซิร์ฟเวอร์โหมดออฟไลน์ ในขณะที่
/give ... profile="Name"ไม่สามารถแก้ไขได้ที่นั่น
ทำไมหัวผู้เล่นถึงว่างเปล่าหรือแสดงเป็น Steve
เรียงตามลำดับความน่าจะเป็น:
- ชื่อไม่สามารถแก้ไขได้ เซิร์ฟเวอร์โหมดออฟไลน์ หรือ API ไม่สามารถเข้าถึงได้เมื่อคำสั่งทำงาน ไม่มีอะไรจะฝัง คุณจึงได้ค่าเริ่มต้น
- ชื่อไม่มีอยู่จริง Mojang จะไม่ส่งคืนข้อมูลใดๆ สำหรับบัญชีที่ถูกลบหรือไม่ได้ลงทะเบียน
- ไม่ได้โหลดชังก์ใหม่ หัวผู้เล่นจะถูกแก้ไขแบบอะซิงโครนัส บางครั้งคุณต้องมองไปทางอื่นแล้วกลับมามองใหม่
การรอคอยไม่ค่อยช่วยอะไร หากโปรไฟล์ไม่ได้ถูกฝังตั้งแต่ตอนสร้าง มันก็จะยังคงว่างเปล่า ให้หัวผู้เล่นใหม่อีกครั้ง
หัวผู้เล่นแบบกำหนดเองใช้พื้นผิว ไม่ใช่ชื่อ
หัวผู้เล่นตกแต่ง เช่น เฟอร์นิเจอร์ อาหาร หัวม็อบจากแค็ตตาล็อก ไม่มีเจ้าของ พวกมันมีเพียงค่าพื้นผิว properties พร้อมกับข้อมูลไบนารี Base64 ที่ชี้ไปยัง URL ของพื้นผิว นั่นคือเหตุผลว่าทำไมพวกมันจึงสามารถแชร์ได้ด้วยคำสั่งให้เพียงคำสั่งเดียวที่ยาว และทำไมพวกมันจึงไม่เคยเสียเมื่อผู้เล่นเปลี่ยนชื่อ
Base64 จะถอดรหัสเป็น JSON ขนาดเล็กที่มี textures.SKIN.url บน textures.minecraft.net ไม่มีสิ่งอื่นใดในนั้นที่สำคัญสำหรับการเรนเดอร์
รูปแบบ UUID
มีสองรูปแบบและไม่สามารถใช้แทนกันได้ในทุกบริบท:
trimmed 069a79f444e94726a5befca90e38aaf5
dashed 069a79f4-44e9-4726-a5be-fca90e38aaf5
คำสั่งและ NBT โดยทั่วไปต้องการรูปแบบที่มีขีดคั่นหรืออาร์เรย์จำนวนเต็ม API บนเว็บมักจะส่งคืนแบบตัดออก การแปลงระหว่างกันเป็นไปโดยอัตโนมัติ — แทรกขีดคั่นหลังจากอักขระตัวที่ 8, 12, 16 และ 20
ให้หัวผู้เล่นจากชื่อผู้ใช้ เรียกดูแค็ตตาล็อกหัวผู้เล่นตกแต่ง หรือแปลงระหว่างรูปแบบ UUID ใน เครื่องมือหัวผู้เล่นและชื่อผู้ใช้