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)