Концепты

Свойства

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

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 возможных комбинаций базового типа + свойства). Блокам будет автоматически присвоен идентификатор, и это назначение будет храниться в файле сохранения мира. Это проиллюстрировано ниже:

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 themselves are Java objects (like a Chest class). Normally, Minecraft code would access data in a tile entity by getting its instance and then calling it methods or fields, like a regular object (world.getTileEntity(position).getInventory()). When tile entities need to be written to the save file, they are stored in the NBT format.

Совет

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

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