마인크래프트 사용자명은 정확히 세 가지 종류의 문자로 된 1~16자이고, UUID에는 두 가지 표기가 있다
마인크래프트 사용자명은 1~16자의 문자, 숫자, 밑줄뿐이다. 하이픈도 점도 공백도 없다. 그리고 UUID는 대시가 있든 없든 허용된다 — 그래서 똑같아 보이는 조회가 하나는 실패하고 하나는 성공한다.
스킨을 조회한다는 것은 누군가 입력한 문자열을 Mojang이 인식하는 무언가로 바꾸는 일이며, 그 대상은 딱 두 가지뿐이다. 둘 다 규칙이 명확하고, UUID 쪽에는 "찾을 수 없다"는 신고를 잔뜩 만들어내는 골칫거리가 하나 있다.
사용자명 규칙
^[A-Za-z0-9_]{1,16}$
문자 종류는 세 가지뿐이고 그 외에는 없다: 문자, 숫자, 밑줄. 길이는 1~16.
무엇이 제외되는지가 더 유용한 부분이다:
- 하이픈 없음 — 사람들이 가장 흔하게 시도하는 것
- 점 없음, 공백 없음,
@없음 - 16자를 넘는 것 없음, 빈 문자열도 없음
그래서 서버의 표시 이름, Discord 핸들, 이메일 주소는 이름처럼 보여도 조회되지 않는다. 조회가 실패했는데 문자열에 하이픈이 들어 있다면, 거의 항상 그게 원인이다 — 그리고 하이픈은 사람들이 다른 형식으로 손을 뻗게 만드는 문자다.
UUID 규칙, 그리고 표기가 두 가지인 이유
^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
모든 -?에 주목하자: 각 대시는 선택 사항이다. 다음 둘은 같은 계정이고 둘 다 허용된다:
069a79f4-44e9-4726-a5be-fca90e38aaf5 dashed
069a79f444e94726a5befca90e38aaf5 undashed
16진수 32자리를 8-4-4-4-12로 묶은 형태다. 대소문자도 상관없다 — A-F와 a-f는 둘 다 일치한다.
이게 중요한 이유는 두 형태가 서로 다른 곳에서 나오기 때문이다. usercache.json, 플러그인 설정 파일, Mojang 자체 API는 어느 쪽을 내보낼지 서로 합의하지 않았고 — 플레이어에 대한 /data get는 둘 중 어느 것도 아니라 정수 네 개짜리 배열([I; …])을 출력한다 — 그래서 둘 다 만나게 되고, 한쪽만 받아들이는 도구는 절반의 경우에 고장 난 것처럼 보인다.
-?는 전부 아니면 전무가 아니라 구분자별로 적용되므로, 대시가 일부만 있는 문자열도 통과한다. 이는 엄밀히 맞는 것보다 관대한데, 의도적으로 그렇다: 누군가 대시 하나를 빠뜨렸다고 붙여넣기를 거부하는 건 아무에게도 도움이 되지 않는다.
이름과 UUID를 서로 바꿔 쓸 수 없는 이유
사용자명은 변경하고 재사용할 수 있지만 UUID는 그럴 수 없다. 그래서 사용자명 조회는 "지금 이 이름을 가진 사람이 누구인가"에 답하고, UUID 조회는 "이 특정 계정, 오늘 뭐라고 불리든"에 답한다.
저장해 두는 모든 것 — 화이트리스트, 스코어보드, 데이터팩, 머리 — 에는 UUID가 계속 정확한 쪽이다. 사용자명은 입력하기 편한 쪽이다.
네 가지 애니메이션, 그리고 그것들은 시간에 따른 자세다
뷰어는 idle, walk, run, fly를 제공한다. 이것들은 정지된 자세가 아니라 애니메이션이며, 이는 스킨을 판단할 때 중요하다: 가만히 서 있을 때 잘 읽히는 텍스처도 팔이 흔들리기 시작하면 이상해 보일 수 있는데, 팔의 옆면 — 평면 미리보기에서는 절대 보지 못하는 면 — 이 시야에 들어오기 때문이다.
그것이 바로 앞면과 뒷면을 렌더링하는 데 그치지 않고 스킨을 움직이는 상태로 미리 보는 이유다.