Đầu người chơi theo username: profile component hoạt động thế nào và vì sao đầu bị trống
Đầu lưu ảnh chụp skin tại một thời điểm, không phải liên kết trực tiếp. Đây là profile component, lý do đầu cũ hiện skin cũ và vai trò của việc tra UUID.
Việc tạo Đầu người chơi nghe có vẻ chỉ cần một đối số. Đúng là vậy, nhưng những gì được lưu trữ lại không như mọi người mong đợi, và điều đó giải thích hầu hết các điều kỳ lạ liên quan đến đầu.
Lệnh
/give @p player_head[profile="Notch"]
Thành phần profile đã thay thế NBT SkullOwner cũ. Các đoạn mã sử dụng {SkullOwner:"Notch"} là từ phiên bản trước 1.20.5 và hiện không còn tác dụng.
Những gì thực sự được lưu trữ
Đầu không lưu username để tải lại skin về sau. Khi vật phẩm được tạo, server phân giải tên thành UUID và ảnh chụp texture tại thời điểm đó, rồi ghi dữ liệu vào vật phẩm:
"profile": {
"name": "Notch",
"id": [I; …],
"properties": [{ "name": "textures", "value": "<base64>" }]
}
Hai hệ quả:
- Đầu tạo từ một năm trước vẫn hiện skin của năm đó. Người chơi đổi skin không cập nhật những đầu đã tồn tại trong thế giới. Đây không phải lỗi và không có cơ chế tự làm mới.
- Đầu hoạt động ngoại tuyến. Sau khi được đưa vào, không cần Lời gọi API của Mojang để hiển thị, đó là lý do tại sao đầu vẫn tồn tại trên các máy chủ chế độ ngoại tuyến trong khi
/give ... profile="Name"không phân giải được ở đó.
Tại sao một cái đầu trống hoặc hiển thị Steve
Theo thứ tự khả năng:
- Tên không phân giải được. Máy chủ chế độ ngoại tuyến, hoặc API không thể truy cập được khi lệnh chạy. Không có gì để đưa vào, vì vậy bạn nhận được một cái đầu mặc định.
- Tên không tồn tại. Mojang không trả về gì cho các tài khoản đã bị xóa hoặc chưa bao giờ đăng ký.
- Chunk chưa được tải lại. Cái đầu phân giải không đồng bộ; đôi khi bạn cần nhìn đi chỗ khác rồi nhìn lại.
Chờ đợi hiếm khi có tác dụng — nếu hồ sơ không được đưa vào khi tạo, nó sẽ vẫn trống. Hãy tạo lại cái đầu.
Đầu tùy chỉnh sử dụng kết cấu, không phải tên
Đầu trang trí — đồ nội thất, thức ăn hay đầu mob trong danh mục — không có chủ sở hữu. Chúng chỉ chứa properties với blob base64 trỏ tới URL texture. Vì vậy có thể chia sẻ chúng bằng một lệnh /give dài và chúng không hỏng khi người chơi đổi tên.
Base64 giải mã thành một JSON nhỏ chứa một textures.SKIN.url trên textures.minecraft.net. Không có gì khác trong đó quan trọng đối với việc hiển thị.
Định dạng UUID
Tồn tại hai dạng và chúng không thể hoán đổi cho nhau trong mọi ngữ cảnh:
trimmed 069a79f444e94726a5befca90e38aaf5
dashed 069a79f4-44e9-4726-a5be-fca90e38aaf5
Các lệnh và NBT thường muốn dạng có dấu gạch ngang hoặc một mảng số nguyên. Các API web thường trả về dạng đã cắt bớt. Việc chuyển đổi giữa chúng là cơ học — chèn dấu gạch ngang sau 8, 12, 16 và 20 ký tự.
Tạo một cái đầu từ tên người dùng, duyệt các danh mục đầu trang trí, hoặc chuyển đổi giữa các định dạng UUID trong Công cụ Đầu người chơi & Tên người dùng.