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