Formato de nível da Edição Java Classic

De Minecraft Wiki
Ir para: navegação, pesquisa
Paeonia (texture) JE1.png
Essa página descreve o conteúdo que existe apenas em versões desatualizadas de Minecraft. 
Esse recurso costumava estar no jogo, mas foi removido
Information icon.svg
Esse recurso é exclusivo para Edição Java. 

O formato de nível da Edição Java Classic foi usado por todas as variedades de Minecraft Classic. Foi comprimido com gzip e continha um cabeçalho curto seguido por objetos Java serializados. Os níveis de um jogador tinham a extensão ".mine". Os níveis usados pelo servidor Classic Creative foram nomeados "server_level.dat". O arquivo pode ser copiado para salvar o conteúdo, o que ajudou a proteger as construções contra griefers ou para usar o arquivo para map editingedição de mapa.

Como o formato deste nível depende da maneira como o Java serializa os objetos, a maneira mais fácil de trabalhar com ele é por meio do próprio servidor Classic, minecraft-server.jar. Código de amostra foi fornecido para mostrar como construir um editor sobre minecraft-server.jar.

Formato de arquivo

When uncompressed, the format of the file was as follows:

Posição Tamanho (bytes) Name Posição
0 4 Magic ID Um Magic ID é um número constante usado para identificar o formato de arquivo do Minecraft. O valor atual é 0x271bb788.
4 1 Version Number A Version Number representa o formato atual usado para salvar o nível. O valor atual é 2.
5 Variável Classe Java serializada com.mojang.minecraft.level.Level Mais informações sobre o formato de serialização usado por Java estão disponíveis no manual, no entanto, a maneira mais fácil de editar o arquivo é usar o classes fornecido aqui com o oficial minecraft-server.jar arquivo.

Acessando a matriz de bytes

A parte mais interessante de um nível era a matriz de blocos. Cada byte neste array definiu um tipo de bloco em um local correspondente no mundo. Geralmente, havia duas opções para acessar a matriz de bytes de blocos:

O jogador poderia desserializar o arquivo compactado .dat diretamente de volta em uma instância de um objeto Level dentro do Java, tendo acesso à instância do objeto Level exatamente da mesma forma que o Minecraft Server. Isso permitiria ao jogador definir os blocos, dimensões, ponto de desova e outros aspectos do mapa diretamente, chamando os métodos no objeto Level instanciado. A descompactação manual não é necessária antes do carregamento, porque o Java pode compactar e descompactar arquivos gzipados instantaneamente. Para carregar o arquivo de dados de volta em uma instância da classe Level, o jogador precisaria da definição da classe para a classe Level. Isso foi incluído com o arquivo minecraft-server.jar. Um exemplo disso pode ser visto em Recursos de desenvolvimento/Exemplo de classe de edição de nível do Minecraft Classic.

Outros leram e modificaram os dados do mapa simplesmente acessando a matriz bruta de bytes no arquivo de arquivo de dados. Para fazer isso, o jogador deve descompactá-lo, fazer alterações nos bytes onde a matriz de bytes está armazenada e, em seguida, compactá-lo novamente. Como o jogador estava editando em bruto, eles precisavam manter os primeiros 344 (14E em HEX) bytes intactos. Os próximos 256x256x64 bytes eram onde a matriz de bytes foi armazenada. Além disso, também era possível alterar as coordenadas do local de geração desta forma se o jogador soubesse onde olhar: havia valores inteiros começando no byte 284 e, portanto, sobrescrever os próximos 12 bytes (3 inteiros) permitiria ao jogador alterar o local de geração.

(Isenção de responsabilidade: pode ser alterado conforme o Java muda)