Концепты

Свойства

Все блоки имеют базовый тип. Примеры основных типов включают грязь, лестницы, и листья. Тем не менее, базоывае типы отличаются, каждый блок имеет множество различных свойств, каждое из которых может принимать ограниченный набор значений (например, подзолистая грязь, кирпичные сутпеньки, Дубовые листья). Блок может иметь несколько свойств (например, смотреть на восток, кирпичные ступеньки).

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]

Некоторые свойства эфемерны, – они существуют только когда игра запущена. Их параметры не сохраняются в файл, потому что их значения могут быть заданы автоматически, как например редстоун-сигнал, включен ли он, или нет, это основано на окружении (есть ли рядом включенный рычаг?). В данном случае описано значение power свойства minecraft:redstone_wire, как показано выше является эфемерным.

На момент написания данной статьи Minecraft еще сохранил блок данных в старом формате, - 12 бит для базового типа (4096 возможных базовых типов) и 4 битах для «метаданных» (16 возможных значений в базовом типе). Тем не менее, свойства не отображаются непосредственно в metadata в связи с несколькими причинами: например, блок печи состоит из двух базовых типов (в момент спокойствия/плавки), каждый из них не использует metadata вообще. Еще случай: брёвна используют metadata, потому, что сочетание свойств превышает 16 возможных значений (полагаю, что тип дерева и направление), брёвна в таком случае должны были быть разделены на два базовых типа.

В будущем, будет только одно 16-битное число (65536 возможных комбинаций базового типа + свойств). Блоки будут получать ID автоматически, и уже в таком виде будут записываться в файл сохранения мира. Это показано далее:

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.

Хранение данных в Tile Entity

С 65536 возможных комбинаций, невозможно хранить большое количество информации, например, инвентарь, так что существует другой способ хранения данных блока - tile entities.

Сущности в виде блоков (tile entities) являются объектами Java (например, класс сундука Chest). Обычно доступ к информации, хранящейся в tile entities, через код Minecraft осуществляется путём получения экземпляра этой сущности, а затем обращения к методам и полям, как при работе с обычным объектом (world.getTileEntity(position).getInventory()). Если tile entities необходимо сохранить в файл мира, они сохраняются в формате NBT.

Совет

Некоторые вещи, как картины, на самом деле - сущности (entity).

Сущности могут также переопределять прорисовку (рендеринг) блоков, поэтому они не всегда выглядят как обычный блок, как правило, это неэффективно и вызывает падение FPS.