Conceitos

Propriedades

Todos os blocos são de um tipo base. Dirt, Stairs e Leaves são exemplos de tipos base. Mas, para diferenciar esses tipos base, cada bloco tem um conjunto de diferentes propriedades, que contêm um conjunto limitado de valores (ex: podzol dirt, brick stairs, oak leaves). Um bloco pode ter várias propriedades (como east-facing, brick stairs).

Examples of block properties

minecraft:dirt[snowy=false,variant=default]
minecraft:dirt[snowy=true,variant=default]
minecraft:dirt[snowy=false,variant=grassless]
minecraft:dirt[snowy=true,variant=grassless]
minecraft:planks[variant=oak]
minecraft:planks[variant=spruce]
minecraft:planks[variant=birch]
minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=up]
minecraft:redstone_wire[east=side,north=up,power=0,south=up,west=up]
minecraft:redstone_wire[east=none,north=up,power=0,south=up,west=up]
minecraft:redstone_wire[east=up,north=side,power=0,south=up,west=up]

Algumas propriedades, no entanto, são efémeras – só existem durante a execução do jogo. Os valores destas propriedades não são escritos no ficheiro porque podem ser detetados automaticamente. Por exemplo, no caso de um fio de redstone, o estar ligado ou não pode ser detetado com base no ambiente (há alguma alavanca que esteja ligada?). Neste caso, a propriedade power de minecraft:redstone_wire, como demonstrado acima, é uma propriedade efémera.

Para já, o Minecraft ainda guarda os dados dos blocos num formato antigo com 12 bit para tipo de base (4096 tipos de base possíveis) e 4 bits para “metadados” (16 valores possíveis por cada tipo de base). No entanto, as propriedades não apontam diretamente para os metadados, por causa dos standards antigos. Por exemplo, o bloco fornalha, consiste em dois tipos de base (a fundir ou inativa), cada um não utilizando quaisquer metadados. Por outro lado, os blocos de madeira usam completamente os seus metadados, mas como as combinações das propriedades excedem o limite de 16 (pensa nos tipos de árvores e na direção), estes blocos tem de ser divididos em dois tipos de base.

No futuro, só haverá um número de 16 bits (65536 combinações possíveis de tipo de base + propriedades). Os blocos vão receber um ID automaticamente e este ID será armazenado no ficheiro de gravação do mundo. Isto é ilustrado abaixo:

0 => minecraft:dirt[snowy=false,variant=default] 1 => minecraft:dirt[snowy=true,variant=default] 2 => minecraft:dirt[snowy=false,variant=grassless] 3 => minecraft:dirt[snowy=true,variant=grassless] 4 => minecraft:planks[variant=oak] 5 => minecraft:planks[variant=spruce] etc.

Dados de Tile Entity

Com 65536 combinações possíveis, não é possível armazenar muita informação como um inventário, por isso há mais uma forma de alguns blocos terem mais dados: tile entities.

Tile entities são objetos do Java (como uma classe Chest). Normalmente, o código do Minecraft acedia aos dados de uma tile entity obtendo a sua instância e depois chamando-lhe métodos ou campos, como um objeto normal (world.getTileEntity(position).getInventory()). Quando é preciso guardar tile entities no ficheiro de gravação, estas são armazenadas no formato NBT.

Dica

Algumas coisas, tais como pinturas, são na realidade entidades.

No entanto, as tile entities também podem alterar o rendering para não se parecerem com um bloco normal, apesar de isto ser geralmente ineficiente e causar uma queda na taxa de frames do cliente.