Tiện ích mở rộng không cho bạn biết định dạng schematic — 31 trong số 33 tệp .schematic thực ra là phỏng đoán của thứ khác
Năm định dạng, bốn cách đóng gói khối khác nhau, và .schematic được chia sẻ bởi hai trong số đó. Ngửi NBT root tốt hơn là tin vào tên tệp, kèm bằng chứng được đếm cụ thể.
Có năm định dạng schematic đang lưu hành, và tên tệp chỉ là gợi ý chứ không phải sự thật. Trình xem ở đây quyết định một tệp là gì bằng cách nhìn vào bên trong nó, và có lý do đo đếm được cho điều đó.
Năm định dạng, năm phần mở rộng
| phần mở rộng | định dạng |
|---|---|
.nbt | cấu trúc vanilla |
.schem | Sponge |
.schematic | Sponge — theo mặc định |
.litematic | Litematica |
.mcstructure | Bedrock |
Hàng rắc rối là .schematic. Phần mở rộng đó được chia sẻ bởi định dạng MCEdit cổ điển và định dạng của Sponge, và các tệp bị đổi tên bởi những người không biết hoặc không quan tâm.
Đếm trên một kho dữ liệu thực tế: trong 33 tệp .schematic, 31 là MCEdit, một là cấu trúc vanilla và một là Litematica. Vậy nên phỏng đoán mặc định theo phần mở rộng sai với gần như toàn bộ chúng, và hai tệp không phải .schematic theo bất kỳ nghĩa nào — chỉ là bị đặt tên sai.
Cách khắc phục là ngửi NBT root và để thứ mà tệp thực sự là thắng thứ mà nó được gọi:
- có khóa
Regions→ Litematica - có
palettevàblocks→ cấu trúc vanilla - nếu không thì kiểm tra hình dạng MCEdit, rồi quay về phần mở rộng
Bốn cách đóng gói cùng một tập khối
Các định dạng không khác nhau chỉ ở bề ngoài. Mỗi định dạng lưu dữ liệu khối theo một cách thực sự khác biệt, và mỗi lựa chọn đều có hệ quả:
Vanilla .nbt — một danh sách. Mỗi vị trí được lưu là một mục, mỗi mục ghi chỉ số bảng màu. Không khí được lưu như mọi khối khác; chỉ có cấu trúc trống (structure void) bị bỏ qua, nên một công trình rỗng chỉ rẻ nếu bên trong nó đã được đặt cấu trúc trống trước khi lưu.
Sponge .schem — một luồng varint. Chỉ số bảng màu được đóng gói dưới dạng số nguyên có độ rộng thay đổi: bảy bit dữ liệu mỗi byte, bit cao được bật để tiếp tục. Bảng màu nhỏ tốn một byte mỗi khối; bảng màu trên 127 mục bắt đầu tốn hai byte cho các chỉ số cao. Đặc, nhưng tự mô tả.
MCEdit .schematic — một mảng byte phẳng. Một byte mỗi khối, nên tối đa 256 loại khối — đó chính xác là lý do nó có mảng phụ AddBlocks tùy chọn thêm bốn bit id nữa dưới dạng một nibble mỗi khối, để id đạt tới 4.095. Đây là định dạng id số kiểu cũ từ trước block state: các id của nó là số, được phân giải qua một hợp chất SchematicaMapping khi Schematica ghi một cái, và qua bảng id vanilla 1.12 nếu không.
Litematica .litematic — các long được đóng gói theo bit. Các chỉ số được đóng gói đúng max(2, bits needed for the palette) bit mỗi cái, LSB trước, và một mục có thể vắt qua ranh giới giữa hai long. Bảng màu 5 mục dùng 3 bit mỗi khối; bảng màu 300 mục dùng 9 bit.
Mức sàn 2 bit rất quan trọng: ngay cả bảng màu hai khối cũng không nén xuống dưới 2 bit mỗi mục, nên một công trình đơn sắc không nhỏ như toán học gợi ý.
Bedrock là little-endian
.mcstructure là trường hợp lạ ở tầng thấp hơn: Bedrock ghi NBT little-endian trong khi mọi định dạng Java ghi big-endian. Điều đó được quyết định trước khi bất kỳ phân tích định dạng nào diễn ra — đọc các byte với sai endianness và bạn không nhận được một cấu trúc sai, mà là rác hoàn toàn không phân tích được.
Điều này có nghĩa gì trên thực tế
Nếu một schematic không mở được ở đâu đó, câu hỏi đầu tiên không phải là "tệp có bị hỏng không" mà là "tệp này có đúng như tên nó nói không". Một .schematic từ một trang tải xuống có khả năng cao là MCEdit hơn là Sponge, và một công cụ tin vào phần mở rộng sẽ từ chối một tệp hoàn toàn tốt.
Và khi so sánh hai bản xuất của cùng một công trình, sự khác biệt về kích thước chủ yếu là về cách mã hóa chứ không phải nội dung — một .nbt vanilla đã đặt cấu trúc trống của một công trình rỗng và một .litematic đóng gói theo bit của cùng thứ đó đang giải quyết những vấn đề khác nhau.