Minecraft Wiki
Rose (texture) JE1
Essa página descreve o conteúdo que existe apenas em versões desatualizadas da Edição Java. 
Isso foi substituído pelo Formato de arquivo de região em Beta 1.3 e o Formato de arquivo anvil nas versões atuais.
Information icon
Esse recurso é exclusivo para Edição Java. 

Infdev introduziu um novo desafio de armazenamento de dados durante o desenvolvimento: o terreno gerado no infdev tem o potencial de ter quase 235 petabytes, ou seja, 240.640 terabytes, em tamanho quando armazenado na memória, devido ao tamanho do mapa (vários vezes a área da superfície da Terra). Portanto, para reduzir o tamanho do arquivo e o uso de memória, Notch decidiu dividir o terreno em chunks de 16×128×16 e armazená-los em disco quando não estiverem visíveis. Além disso, o terreno só é gerado quando está dentro da distância de desenho da câmera do jogador, reduzindo significativamente o tamanho do salvamento, já que a maioria dos jogadores só poderá pesquisar uma pequena fração do mapa em um período de tempo razoável. Alpha usa essa técnica, e tanto Beta quanto o Minecraft 1.0 ainda usam o conceito geral por causa de seu sucesso.

A primeira versão a usar este formato foi a Infdev 20100327.

Em Minecraft Beta 1.3, este formato foi substituído pelo Formato de arquivo de região, onde os chunks são armazenados em grupos de 32×32 em arquivos de região.

O formato de salvamento foi usado para todas as versões entre inf-20100327 e Beta 1.2_02 inclusive, com a importante exceção de inf-20100624, que usou um novo formato de salvamento que foi imediatamente descartado devido para criar arquivos de mundo absolutamente massivos.

Estrutura de pastas do mundo[]

Um nível Alpha é na verdade uma única pasta contendo pelo menos um arquivo chamado level.dat. Há também um arquivo session.lock para garantir que apenas um Minecraft abra o nível de uma vez.

A pasta de nível pode ter até 64 subpastas, cada uma com até 64 subpastas adicionais cada. Essas pastas contêm os arquivos de chunks que contêm o terreno e as entidades do nível. Cada arquivo de fragmento é identificado por sua posição de fragmento xPos e zPos. As várias partes do nome do arquivo de fragmento são obtidas tomando a representação base36 do xPos e zPos. Os nomes das pastas nas quais o arquivo de bloco é colocado são encontrados pegando xPos e zPos, módulo 64 (ou bit a bit AND com 63) e convertendo para base36. As coordenadas negativas devem ser interpretadas como números positivos, bit a bit, via complemento de dois. Portanto, -13 é tratado como 243 (se seu tamanho for um byte).

Como exemplo, para encontrar o chunk na posição (-13, 44):

  • O nome da primeira pasta é base36(-13% 64). Isso é base36(243% 64 = 51) que é "1f".
  • O nome da segunda pasta é base36(44% 64). Este é base36(44) que é "18".
  • O nome do arquivo chunk é "c". + base36(-13) + "." + base36(44) + ".dat". Isso é avaliado como "c.-d.18.dat"
  • Assim, o chunk em (-13, 44) é armazenado em "1f/18/c.-d.18.dat"

Cada chunk lembra sua posição independentemente dos nomes de arquivos e pastas. Veja abaixo para descobrir como ler a posição de um pedaço dos dados do arquivo.

Dimensões[]

As dimensões são salvas da mesma forma que os mundos normais, mas em vez de misturar os arquivos do mundo dentro da pasta de salvamento, os arquivos são armazenados em subpastas adicionais com sua própria região e dados de bloco. Seus nomes começam com DIM, seguidos pelo ID da dimensão.

Estes IDs de dimensão foram usados na versão Alfa:

ID Pasta Dimensão
0 saves/[World]/ Mundo normal (Overworld), sempre armazenado na pasta mundo sem DIM
-1 saves/[World]/DIM-1/ O Nether, adicionado com a Halloween Update

session.lock formato[]

session.lock contém a data e hora de quando o mundo foi tocado pela última vez. O arquivo tem oito bytes de comprimento e contém um único inteiro com sinal de 64 bits no formato big endian. O valor desse inteiro é o timestamp, armazenado como o número de milissegundos decorridos desde 1970, em UTC.

Ao contrário dos arquivos de bloqueio típicos, session.lock garante que o ÚLTIMO programa a abrir um mundo seja aquele que o possui. O processo é mais ou menos assim:

  1. programa abre session.lock
  2. programa grava timestamp em session.lock
  3. programa monitora session.lock quanto a alterações
  4. se o conteúdo de session.lock mudar, o programa aborta e desiste de seu bloqueio no mundo.

level.dat formato[]

O arquivo level.dat é um arquivo GZip NBT que armazena dados de nível global (hora do dia, saúde do jogador, inventário, velocidade e posição dentro o mapa, etc). Mais importante ainda, ele armazena a Random Seed que o gerador de terreno usa para gerar mais terrenos em tempo real.

Este arquivo tem esta estrutura:

  • A marca raiz.
    •  Data: Dados de nível global.
      •  LastPlayed: Armazena o timestamp Unix (em milissegundos) quando o jogador salvou o jogo.
      •  SizeOnDisk: Tamanho estimado do mundo inteiro em bytes.
      •  RandomSeed: Número aleatório fornecendo a Random Seed para o terreno.
      •  SpawnX: Coordenada X da posição de spawn do nível.
      •  SpawnY: Coordenada Y da posição de spawn do nível.
      •  SpawnZ: Coordenada Z da posição de spawn do nível.
      •  Time: Armazena a "hora do dia" atual em ticks. Existem 20 tiques por segundo na vida real e 24.000 ticks pelo ciclo dia/noite do Minecraft, tornando o ciclo completo de 20 minutos. 0 é o início de dia, 12000 é o início de Pôr do sol, 13800 é o início de noite, 22200 é o início do amanhecer, e 24000 é o dia novamente. O valor armazenado em level.dat é sempre crescente e pode ser maior que 24000, mas a "hora do dia" é sempre módulo 24000 do valor do campo "Hora".
      •  Player: O jogador singleplayer do nível.
        •  Dimension: A dimensão em que o jogador está. 0 é o Overworld, e -1 é O Nether.
        •  Pos: Lista de 3 TAG_Doubles para a posição X, Y e Z do jogador.
        •  Rotation: Lista de 2 TAG_Floats para o Yaw e Pitch da visão do jogador.
        •  Motion: Lista de 3 TAG_Doubles para o movimento X, Y e Z em metros por tick.
        •  OnGround: 1 ou 0 (true/false) - verdadeiro se o jogador estiver no chão.
        •  FallDistance: Até onde o jogador caiu.
        •  Health: O número de pontos de vida que o jogador tem. 20 são 10 corações.
        •  AttackTime: Número de ticks que o jogador fica imune a ataques.
        •  HurtTime: Número de ticks que o jogador está vermelho por ser atacado.
        •  DeathTime: Número de ticks pelos quais o jogador esteve morto - usado para controlar a animação da morte.
        •  Air: O número de ticks antes que o jogador comece a se afogar. Começa em 300.
        •  Fire: Quando negativo, o número de ticks antes que o jogador possa pegar fogo. Quando positivo, o número de ticks antes do fogo se extinguir.
        •  Score: A pontuação do jogador. A pontuação nunca foi utilizada em Alpha ou mesmo beta, portanto, esse valor é irrelevante.
        •  Inventory: Lista de TAG_Compounds que representam os itens no inventário do jogador.
          • Um item de inventário.
            •  Slot: O slot em que o item está.
            •  id: O item ID.
            •  Damage: O valor data do item, ou valor de dano para ferramentas.
            •  Count: O número deste item na pilha. Faixa -128 a 127. Valores menores que 2 não são exibidos no jogo.

Formato do chunk[]

Arquivos de chunks, conforme descrito acima, são arquivos GZip'd NBT. Eles têm essa estrutura:

  • A marca raiz.
    •  Level: Os dados de nível neste chunk.
      •  xPos: A coordenada do bloco X.
      •  zPos: A coordenada do bloco Z.
      •  TerrainPopulated: 1 ou 0 (true/false) - verdadeiro se o Minecraft gerou recursos especiais neste chunk, como árvores, flores, minérios, masmorras.
      •  LastUpdate: O tick quando o bloco foi atualizado pela última vez.
      •  Blocks: 32768 bytes de Block IDs, 8 bits por bloco.
      •  Data: 16384 bytes de Block Data, 4 bits por bloco.
      •  BlockLight: 16384 bytes de Block Light, 4 bits por bloco.
      •  SkyLight: 16384 bytes de Sky Light, 4 bits por bloco.
      •  HeightMap: 256 bytes de informações do mapa de altura, 8 bits por coluna XZ. Usado para acelerar os cálculos de luz do céu.
      •  Entities: Lista de TAG_Compounds, um para cada entidade no bloco.
      •  TileEntities: Lista de TAG_Compounds, um para cada entidade tile no chunk.

Veja também[]