Система селекторов
Селекторы — это json файлы, которые могут выбирать и применять объекты. На данный момент их существует 2 типа:
- Текстурные свапперы (
rpt/swappers) - Трансформации от первого лица (
rpt/first_person)
Текстурные свапперы
Текстурные свапперы (далее просто свапперы) позволяют подменять некоторые текстуры в игре в зависимости от связанного с ним предмета.
На момент написания свапперы могут менять 3 вида текстур:
- Броня игрока (
textures\entity\equipment\humanoid) - Стекло подзорной трубы
- Текстуру наложения (в ванилле есть только Вырезанная Тыква)
Файлы свапперов должны находиться в assets\namespace\rpt\swappers. От неё нужно положить json файл сваппера в том же пути, что и текстура, которую вы хотите заменить (например, для алмазной внешней брони это будет от корня набора assets\minecraft\rpt\swappers\textures\entity\equipment\humanoid\diamond.json)
Объект Сваппера — это путь до текстуры (например, namespace:full/path/to/texture.png)
Обратите внимание
Хотя и можно чисто технически указать fallback для свапперов (об этом в "Синтаксис"), но они будут игнорироваться, чтобы другие наборы тоже смогли работать. Пожалуйста, не старайтесь их использовать!
Трансформации от первого лица
Трансформации от первого лица позволяют переопределять то, как будут располагаться предметы на вашем экране, когда вы смотрите на них от первого лица. Применимо для любого предмета.
Файлы трансформаций находятся в assets\namespace\rpt\first_person. В неё нужно положить json файл в том же пространстве имён и с тем же названием, что и модель предмета из компонента предмета, который вы хотите изменить (например, для алмаза это будет assets\minecraft\rpt\first_person\diamond.json)
Объект трансформации — это json объект с таким синтаксисом:
{
"main": {
"rotation": [ // Вращение
"1+1",
0,
2
],
"translation": [ // Положение
// То же самое, что и в rotation
],
"scale": [ // Размер
// То же самое, что и в rotation
]
},
"offhand": {
// То же самое, что и в "main"
}
}Значения поддерживают математические выражения, а также здесь можно использовать 2 дополнительные переменные игры:
drawProgress: Прогресс доставания предмета от 0 до 1rightHand: если предмет в правой руке — то 1, иначе 0
Обратите внимание
Данные трансформации не будут адаптироваться к тому, в какой руке будет держаться предмет. Если вы хотите, чтобы предмет отображался в нужной руке, вам нужно прописать оба типа трансформации для каждой руки вручную
Синтаксис
Синтаксис селекторов напоминает модели предметов, но имеет другие типы:
rpt:applyприменяет объект изvalueбез проверок:
{
"type": "rpt:apply",
"value": ...
}rpt:componentпроверяет компонент связанного с текстурой предмета (идея похожа на модель предметаselect):
{
"type": "rpt:component",
"component": "custom_name",
"cases": [
{
"when": "hi",
"child": {...}
}
],
"fallback": {...}
}Если в fallback ничего не указывать, то будет использован пустой сваппер
rpt:empty- пустой сваппер
{
"type": "rpt:empty"
}rpt:expression- выражения. Те же переменные, что и в разделе Математические выражения
{
"type": "rpt:expression",
"value": "1 + 2",
"cases": [
{
"when": 2,
"child": {...}
},
{
"when": [ "<4" , ">=3" ],
"all": true,
"child": {...}
}
],
"fallback": {...}
}rpt:composite- применить несколько свапперов одновременно
{
"type": "rpt:composite",
"children": [
{...},
{...}
]
}Обратите внимание, что этот тип селектора может работать неккоректно в некоторых случаях: например, для сваппера брони будет отрисованна ТОЛЬКО либо первая либо последнияя текстура. Эту функцию стоит использовать для текстур наложения (в том числе и подзорная труба), потому что это изначально разрабатывалась для них
