На этой странице вы узнаете, как написать собственные модели предметов и понять все их параметры и возможности.
Что такое модели предметов?
Модели предметов - это, по сути, определение внешнего вида и визуального оформления предмета. Они задают текстуру, перевод, поворот, масштаб и другие атрибуты модели.
Модели хранятся в виде JSON-файлов в вашей папке resources.
Структура файла
Каждый файл модели предмета имеет определенную структуру, которой необходимо следовать. Он начинается с пустых фигурных скобок, которые представляют собой корневой тег модели. Вот краткая схема того, как устроены модели предметов:
json
{
"parent": "...",
"display": {
"<position>": {
"rotation": [0.0, 0.0, 0.0],
"translation": [0.0, 0.0, 0.0],
"scale": [0.0, 0.0, 0.0]
}
},
"textures": {
"<layerN>": "...",
"particle": "...",
"<texture_variable>": "..."
},
"gui_light": "...",
"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
39
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
39
Родитель
json
{
"parent": "..."
}1
2
3
2
3
Загружает другую модель со всеми ее атрибутами из указанного пути, как идентификатор (namespace:path).
Установите этот тег в значение item/generated, чтобы использовать модель, созданную из указанной иконки, или установите его в значение builtin/generated, чтобы использовать модель без перевода, вращения или масштабирования.
Дисплей
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": {
"<layerN>": "...",
"particle": "...",
"<texture_variable>": "..."
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
Тег textures содержит текстуры модели в виде идентификатора или текстурной переменной. Он содержит 3 доп. объекта:
<layerN>: String. Указывает иконку предмета, используемого в инвентаре. Слоев может быть несколько (например, яиц спавна), не более 3-х.particle: String. Определяет текстуру, из которой будут загружаться частицы. Если не определено, используетсяlayer0.<texture_variable>: String. Он создает переменную и присваивает ей текстуру. В дальнейшем на него можно ссылаться с префиксом#(например,"top": "namespace:path"⇒#top)
ВАЖНО
<layerN> работает только в том случае, если parent установлен как item/generated!
GUI Light
json
{
"gui_light": "..."
}1
2
3
2
3
Этот тег определяет направление, с которого освещается модель предмета. Может иметь значение front или side (последнее - по умолчанию)). Если установлено значение front, то модель отображается как плоский элемент, если установлено side, то элемент отображается как блок.
Элементы
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. Устанавливает центр вращения по схеме[x, y z].axis: String. Указывает направление вращения и должно быть одним из следующих:x,yиz.angle: Float. Указывает угол поворота. Варьируется от -45 до 45 с шагом 22,5 градуса.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. Определяет область текстуры, которую нужно использовать по схеме[x1, y1, x2, y2]. Если значение не задано, то по умолчанию оно равно xyz-позиции элемента. Перестановка значенийx1иx2(например, с0, 0, 16, 16на16, 0, 0, 16) переворачивает текстуру. UV необязателен, и если он не указан, то автоматически генерируется на основе позиции элемента.texture: String. Задает текстуру лица в виде переменной текстуры, дополненной#.cullface: String. Может быть:down,up,north,south,westилиeast. Указывает, не нужно ли рендерить грани, если в указанной позиции есть блок, касающийся их. Он также определяет, с какой стороны блока использовать уровень освещенности для освещения лица, и если значение не задано, то по умолчанию используется сторона.rotation: Integer. Поворачивает текстуру на указанное кол-во градусов с шагом 90 градусов. Вращение не влияет на то, какая часть текстуры используется. Вместо этого она представляет собой перестановку выбранных вершин текстуры (выбранных неявно или явно с помощьюuv).tintidex: Integer. Применяет оттенок к текстуре этой грани, используя значение оттенка, указанное в описании модели предмета. Если цвет оттенка не указан (или указан белый), текстура не тонируется.
Источники и ссылки
Вы можете посетить страницу [Модели предметов] (https://minecraft.wiki/w/Model#Item_models) Minecraft Wiki для более подробного описания. Многие сведения здесь взяты с этой страницы.



