Эта страница поможет тебе написать собственные модели блоков и понять все их параметры и возможности.
Что такое модели блоков?
Модели блоков определяют внешний вид блока — его визуальную составляющую. Они задают текстуру, позицию модели, вращение, масштаб и другие параметры.
Модели хранятся в виде файлов JSON в папке resources.
Структура файла
Каждый файл модели блока имеет определённую структуру. Он начинается с пустых фигурных скобок {}, которые обозначают корневой тег модели. Вот краткая схема структуры блочных моделей:
json
{
"parent": "...",
"ambientocclusion": "true/false",
"display": {
"<position>": {
"rotation": [0.0, 0.0, 0.0],
"translation": [0.0, 0.0, 0.0],
"scale": [0.0, 0.0, 0.0]
}
},
"textures": {
"particle": "...",
"<texture_variable>": "..."
},
"elements": [
{
"from": [0.0, 0.0, 0.0],
"to": [0.0, 0.0, 0.0],
"rotation": {
"origin": [0.0, 0.0, 0.0],
"axis": "...",
"angle": "...",
"rescale": "true/false"
},
"shade": "true/false",
"light_emission": "...",
"faces": {
"<key>": {
"uv": [0, 0, 0, 0],
"texture": "...",
"cullface": "...",
"rotation": "...",
"tintindex": "..."
}
}
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Родитель
json
{
"parent": "..."
}1
2
3
2
3
Загружает другую модель со всеми ее атрибутами из указанного пути, как идентификатор (namespace:path).
Установи этот тег в значение builtin/generated, чтобы использовать модель, созданную на основе указанного изображения (иконки). Вращение можно задавать через blockstates.
Ambient Occlusion (затемнение)
json
{
"ambientocclusion": "true/false"
}1
2
3
2
3
Этот тег указывает, нужно ли использовать ambient occlusion (окружающее затемнение). По умолчанию — true.
Дисплей
json
{
"display": {
"<position>": {
"rotation": [0.0, 0.0, 0.0],
"translation": [0.0, 0.0, 0.0],
"scale": [0.0, 0.0, 0.0]
}
}
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Этот тег отвечает за установку перевода, поворота и масштаба модели в заданной позиции.
Объект position может быть одной из следующих строк, которые определяют, как будет выглядеть модель в разных положениях:
| Значение | Описание |
|---|---|
firstperson_righthand | Правая рука, как видно от первого лица |
firstperson_lefthand | Левая рука, как видно от первого лица |
thirdperson_righthand | Правая рука, как видно от 3-го лица (F5) |
thirdperson_lefthand | Левая рука, как видно от 3-го лица (F5) |
gui | Когда в графическом интерфейсе, например, в инвентаре |
head | При надевании на голову игрока, например, баннера |
ground | Когда на земле |
fixed | При помещении в рамку предмета |
Кроме того, каждая позиция может содержать эти 3 значения в виде массива плавающих значений:
json
{
"rotation": [0.0, 0.0, 0.0],
"translation": [0.0, 0.0, 0.0],
"scale": [0.0, 0.0, 0.0]
}1
2
3
4
5
2
3
4
5
rotation: Three floats. Задает поворот модели по схеме[x, y, z].translation: Three floats. Задает перевод модели по схеме[x, y, z]. Значения должны находиться в диапазоне от-80до80; все, что выходит за пределы этого диапазона, устанавливается на ближайший экстремум.scale: Three floats. Задает масштаб модели по схеме[x, y, z]. Максимальное значение -4, большие значения рассматриваются как4.
Текстуры
json
{
"textures": {
"particle": "...",
"<texture_variable>": "..."
}
}1
2
3
4
5
6
2
3
4
5
6
Тег textures содержит текстуры модели в виде идентификаторов или переменных текстур. Он включает три объекта:
particle: String.particle: строка — определяет текстуру, из которой берутся частицы. Эта же текстура используется как наложение в портале в ад, а также для статичных текстур воды и лавы. Также она является текстурной переменной, к которой можно обратиться как#particle.<texture_variable>: строка — создаёт переменную и назначает ей текстуру. Создает переменную и присваивает ей текстуру. К ней потом можно обратиться через#(например,"top": "namespace:path"→#top).
Элементы
json
{
"elements": [
{
"from": [0.0, 0.0, 0.0],
"to": [0.0, 0.0, 0.0],
"rotation": {
"origin": [0.0, 0.0, 0.0],
"axis": "...",
"angle": "...",
"rescale": "true/false"
},
"shade": "true/false",
"light_emission": "...",
"faces": {
"<face>": {
"uv": [0, 0, 0, 0],
"texture": "...",
"cullface": "...",
"rotation": "...",
"tintindex": "..."
}
}
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Содержит все элементы модели, которые могут быть только кубическими. Если заданы оба тега parent и elements, то тег elements этого файла отменяет тег родительского.
json
{
"from": [0.0, 0.0, 0.0],
"to": [0.0, 0.0, 0.0]
}1
2
3
4
2
3
4
from определяет начальную точку кубоида в формате [x, y, z], относительно нижнего левого угла. to задаёт конечную точку. Обычный блок начинается в [0, 0, 0] и заканчивается в [16, 16, 16]. Значения должны быть в диапазоне от -16 до 32, то есть модель может быть максимум размером 3×3 блока.
json
{
"rotation": {
"origin": [0.0, 0.0, 0.0],
"axis": "...",
"angle": "...",
"rescale": "true/false"
}
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
rotation задаёт вращение элемента и включает: Он содержит еще 4 значения:
origin: Three floats.origin: три числа с плавающей точкой — центр вращения[x, y, z].axis: строка — ось вращения:x,yилиz. Указывает направление вращения и должно быть одним из следующих:x,yиz.angle: Float. Указывает угол поворота.angle: число с плавающей точкой — угол вращения от -45 до 45 градусов.rescale: Boolean. Указывает, следует ли масштабировать грани по всему блоку. По умолчаниюfalse.
json
{
"shade": "true/false"
}1
2
3
2
3
shade определяет, будут ли отрисовываться тени. (По умолчанию имеет значение true).
json
{
"light_emission": "..."
}1
2
3
2
3
light_emission определяет минимальный уровень света, который может получать предмет. Он может варьироваться от 0 до 15. (По умолчанию равен 0).
json
{
"faces": {
"<key>": {
"uv": [0, 0, 0, 0],
"texture": "...",
"cullface": "...",
"rotation": 0,
"tintindex": 0
}
}
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
faces содержит все грани кубоида. Если лицо не задано, оно не будет отображаться. Его ключи (<key>) могут быть одними из: низ, верх, север, юг, запад или восток. Каждый ключ содержит свойства соответствующей грани:
uv: Four integers.uv: четыре целых числа — область текстуры[x1, y1, x2, y2]. Если не указано, значения берутся из позиции элемента. Перестановкаx1иx2(например,0, 0, 16, 16→16, 0, 0, 16) отражает текстуру. Еслиuvне указано, оно генерируется автоматически.texture: строка — ссылка на текстуру в формате#<имя_переменной>. Указывает текстуру лица в виде переменной текстуры, перед которой ставится символ#.cullface: String.cullface: строка — может быть:down,up,north,south,west,east. Указывает, нужно ли рендерить грань, если в указанном положении к ней примыкает блок. Он также определяет сторону блока, с которой будет использоваться уровень освещенности для освещения лица, и, если не установлен, по умолчанию используется сторона.rotation: Integer.rotation: целое число — поворачивает текстуру по часовой стрелке на кратное 90° значение. Вращение не влияет на то, какая часть текстуры используется. Вместо этого это сводится к перестановке выбранных вершин текстуры (выбранных неявно или явно черезuv).tintidex: Integer. Окрашивает текстуру на этом лице с помощью значения оттенка. Значение-1означает, что оттенок не используется. Любой другой номер передается вBlockColorsдля получения значения оттенка, соответствующего этому индексу (возвращает белый цвет, если для блока не задан индекс оттенка).
Источники и ссылки
Более подробное руководство можно найти на странице Minecraft Wiki:
Block Models (Модели блоков) Много информации здесь взято с этой страницы.


