Skip to content
RPF 1.4.7/RPT 1.3.4

Система селекторов ​

Селекторы — это 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 объект с таким синтаксисом:

json
{
    "main": {
        "rotation": [ // Вращение
            "1+1",
            0,
            2
        ],
        "translation": [ // Положение
            // То же самое, что и в rotation
        ],
        "scale": [ // Размер
            // То же самое, что и в rotation
        ]
    },
    "offhand": {
        // То же самое, что и в "main"
    }
}

Значения поддерживают математические выражения, а также здесь можно использовать 2 дополнительные переменные игры:

  • drawProgress: Прогресс доставания предмета от 0 до 1
  • rightHand: если предмет в правой руке — то 1, иначе 0

Обратите внимание

Данные трансформации не будут адаптироваться к тому, в какой руке будет держаться предмет. Если вы хотите, чтобы предмет отображался в нужной руке, вам нужно прописать оба типа трансформации для каждой руки вручную

Синтаксис ​

Синтаксис селекторов напоминает модели предметов, но имеет другие типы:

  • rpt:apply применяет объект из value без проверок:
json
{
    "type": "rpt:apply",
    "value": ...
}
  • rpt:component проверяет компонент связанного с текстурой предмета (идея похожа на модель предмета select):
json
{
    "type": "rpt:component",
    "component": "custom_name",
    "cases": [
        {
            "when": "hi",
            "child": {...}
        }
    ],
    "fallback": {...}
}

Если в fallback ничего не указывать, то будет использован пустой сваппер

  • rpt:empty - пустой сваппер
json
{
   "type": "rpt:empty"
}
json
{
   "type": "rpt:expression",
   "value": "1 + 2",
   "cases": [
       {
           "when": 2,
           "child": {...}
       },
       {
           "when": [ "<4" , ">=3" ],
           "all": true,
           "child": {...}
       }
   ],
   "fallback": {...}
}
  • rpt:composite - применить несколько свапперов одновременно
json
{
  "type": "rpt:composite",
  "children": [
      {...},
      {...}
  ]
}

Обратите внимание, что этот тип селектора может работать неккоректно в некоторых случаях: например, для сваппера брони будет отрисованна ТОЛЬКО либо первая либо последнияя текстура. Эту функцию стоит использовать для текстур наложения (в том числе и подзорная труба), потому что это изначально разрабатывалась для них

Выпущено под лицензией MIT.