Guides / Commands & Data

A extensão não diz o formato do esquema — 31 de 33 arquivos .schematic eram de outro formato

Cinco formatos, quatro maneiras diferentes de empacotar blocos, e .schematic é compartilhado por dois deles. Checar a raiz NBT é melhor do que confiar no nome do arquivo, com evidências contadas.

Existem cinco formatos de esquema em circulação, e o nome do arquivo é uma dica, não um fato. O visualizador aqui decide o que um arquivo é olhando dentro dele, e há uma razão mensurável para isso.

Cinco formatos, cinco extensões

extensãoformato
.nbtestrutura vanilla
.schemSponge
.schematicSponge — por padrão
.litematicLitematica
.mcstructureRocha Matriz

A linha problemática é .schematic. Essa extensão é compartilhada pelo formato clássico do MCEdit e pelo do Sponge, e os arquivos são renomeados por pessoas que não sabem ou não se importam.

Contado em um corpus real: de 33 arquivos .schematic, 31 eram MCEdit, um era uma estrutura vanilla e um era Litematica. Assim, a suposição padrão da extensão está errada para quase todos eles, e dois arquivos não eram .schematic em nenhum sentido — apenas mal nomeados.

A solução é checar a raiz NBT e deixar o que o arquivo é prevalecer sobre o que ele é chamado:

  • uma chave Regions → Litematica
  • palette e blocks → estrutura vanilla
  • caso contrário, o teste de forma MCEdit, depois volta para a extensão

Quatro maneiras de empacotar os mesmos blocos

Os formatos não diferem cosmeticamente. Cada um armazena dados de bloco de uma maneira genuinamente diferente, e cada escolha tem uma consequência:

Estrutura vanilla .nbt — uma lista esparsa. Uma entrada por bloco colocado, cada uma nomeando um índice de paleta. O ar está simplesmente ausente, então uma construção oca é barata.

Sponge .schem — um fluxo varint. Índices de paleta empacotados como inteiros de largura variável: sete bits de carga útil por byte, bit de ordem superior definido para continuar. Paletas pequenas custam um byte por bloco; uma paleta com mais de 127 entradas começa a custar dois para os índices altos. Denso, mas autoexplicativo.

MCEdit .schematic — um array de bytes plano. Um byte por bloco, então máximo de 256 tipos de bloco — que é exatamente por que ele precisa de um array lateral AddBlocks empacotando um nono bit como um nibble por bloco. Este é um formato de ID numérico legado de antes dos estados de bloco, e seus IDs são resolvidos através de um composto SchematicaMapping em vez de serem nomes.

Litematica .litematic — longs empacotados por bits. Os índices são empacotados com exatamente max(2, bits needed for the palette) bits cada, LSB-first, e uma entrada pode ultrapassar o limite entre dois longs. Uma paleta de 5 entradas usa 3 bits por bloco; uma de 300 entradas usa 9.

O piso de 2 bits importa: mesmo uma paleta de dois blocos não comprime abaixo de 2 bits por entrada, então uma construção monocromática não é tão pequena quanto a matemática sugere.

Rocha Matriz é little-endian

.mcstructure é o diferente em um nível inferior: Rocha Matriz escreve NBT little-endian onde todo formato Java escreve big-endian. Isso é decidido antes que qualquer análise de formato aconteça — leia os bytes com a endianness errada e você não obterá uma estrutura errada, você obterá lixo que falha completamente na análise.

O que isso significa na prática

Se um esquema não abrir em algum lugar, a primeira pergunta não é "o arquivo está corrompido", mas "este arquivo é o que seu nome diz". Um .schematic de uma página de download é muito mais provável de ser MCEdit do que Sponge, e uma ferramenta que confia na extensão rejeitará um arquivo perfeitamente bom.

E ao comparar duas exportações da mesma construção, as diferenças de tamanho são principalmente sobre codificação em vez de conteúdo — uma estrutura vanilla esparsa .nbt de uma construção oca e um .litematic empacotado por bits da mesma coisa estão resolvendo problemas diferentes.

Visualizador 3D de esquemas →

More guides

Browse all →

Procurando mais ferramentas de Minecraft?

Um conjunto de geradores, visualizadores e conversores que rodam no navegador — tudo grátis.