확장자가 스키마틱 형식을 알려주지 않습니다 — .schematic 파일 33개 중 31개는 다른 형식으로 추정되었습니다
다섯 가지 형식, 네 가지 다른 블록 압축 방식, 그리고 .schematic은 그중 두 가지 형식에서 공유됩니다. NBT 루트를 분석하는 것이 파일 이름을 신뢰하는 것보다 낫다는 증거가 있습니다.
현재 유통되는 스키마틱 형식은 다섯 가지이며, 파일 이름은 사실이라기보다는 힌트에 가깝습니다. 여기서 뷰어는 파일 내부를 들여다보고 파일의 형식을 결정하며, 여기에는 측정된 이유가 있습니다.
다섯 가지 형식, 다섯 가지 확장자
| 확장자 | 형식 |
|---|---|
.nbt | 바닐라 구조물 |
.schem | 스펀지 |
.schematic | 스펀지 — 기본값 |
.litematic | Litematica |
.mcstructure | 기반암 |
문제는 .schematic 행입니다. 이 확장자는 클래식 MCEdit 형식과 스펀지 형식에서 공유되며, 사람들은 알지 못하거나 신경 쓰지 않고 파일 이름을 변경합니다.
실제 코퍼스에서 집계한 결과: 33개의 .schematic 파일 중 31개는 MCEdit, 1개는 바닐라 구조물, 1개는 Litematica였습니다. 따라서 확장자의 기본 추정은 거의 모든 경우에 틀렸으며, 두 파일은 어떤 의미에서도 .schematic이 아니었고, 단지 잘못 명명되었을 뿐입니다.
해결책은 NBT 루트를 분석하여 파일의 실제 형식이 이름보다 우선하도록 하는 것입니다:
Regions키 → Litematicapalette및blocks→ 바닐라 구조물- 그 외에는 MCEdit 형태 테스트를 거쳐, 확장자로 폴백(fallback)
동일한 블록을 압축하는 네 가지 방법
형식은 외관상 다르지 않습니다. 각 형식은 블록 데이터를 실제로 다른 방식으로 저장하며, 각 선택에는 결과가 따릅니다:
바닐라 .nbt — 희소 목록. 배치된 블록당 하나의 항목이 있으며, 각 항목은 팔레트 인덱스를 지정합니다. 공기는 단순히 존재하지 않으므로, 속이 빈 구조물은 비용이 저렴합니다.
스펀지 .schem — 가변 길이 정수(varint) 스트림. 팔레트 인덱스가 가변 길이 정수로 압축됩니다: 바이트당 7비트의 페이로드(payload)가 있으며, 최상위 비트(high bit)는 계속됨을 나타냅니다. 작은 팔레트는 블록당 1바이트가 들고, 127개 이상의 항목을 가진 팔레트는 높은 인덱스에 대해 2바이트가 들기 시작합니다. 밀집되어 있지만 자체 설명적입니다.
MCEdit .schematic — 평면 바이트 배열. 블록당 1바이트이므로 최대 256가지 블록 유형을 가집니다 — 이것이 바로 블록당 니블(nibble)로 아홉 번째 비트를 압축하는 AddBlocks 보조 배열이 필요한 이유입니다. 이것은 블록 상태 이전의 레거시 숫자 ID 형식이며, 해당 ID는 이름이 아닌 SchematicaMapping 복합 태그를 통해 해결됩니다.
Litematica .litematic — 비트 압축 롱(long) 정수. 인덱스는 정확히 max(2, bits needed for the palette) 비트씩 압축되며, 최하위 비트(LSB) 우선 방식입니다. 하나의 항목이 두 개의 롱 정수 경계를 넘어갈 수도 있습니다. 5개 항목 팔레트는 블록당 3비트를 사용하고, 300개 항목 팔레트는 9비트를 사용합니다.
2비트의 하한선이 중요합니다: 두 블록 팔레트조차도 항목당 2비트 미만으로 압축되지 않으므로, 단색 구조물은 수학적으로 예상되는 것만큼 작지 않습니다.
기반암은 리틀 엔디안입니다
.mcstructure은 낮은 수준에서 유일하게 다른 형식입니다: 기반암은 리틀 엔디안 NBT를 사용하며, 모든 자바 형식은 빅 엔디안을 사용합니다. 이는 어떤 형식 파싱이 일어나기 전에 결정됩니다 — 잘못된 엔디안으로 바이트를 읽으면 잘못된 구조를 얻는 것이 아니라, 전혀 파싱되지 않는 쓰레기 데이터를 얻게 됩니다.
이것이 실제로 의미하는 바
스키마틱이 어딘가에서 열리지 않는다면, 첫 번째 질문은 "파일이 손상되었는가"가 아니라 "이 파일이 이름이 말하는 것인가"입니다. 다운로드 페이지의 .schematic는 스펀지보다 MCEdit일 가능성이 훨씬 높으며, 확장자를 신뢰하는 도구는 완벽하게 좋은 파일을 거부할 것입니다.
그리고 동일한 구조물의 두 가지 내보내기를 비교할 때, 크기 차이는 대부분 내용보다는 인코딩에 관한 것입니다 — 속이 빈 구조물의 희소한 바닐라 .nbt과 동일한 구조물의 비트 압축 .litematic은 서로 다른 문제를 해결하고 있습니다.