оптимизация blockstate модели

Версия Minecraft
1.12.2
API
Forge
51
8
5
Привет, мне нужно менять мою модель блока в зависимости от условий, сначала я хотел просто заменять блок на другой, у которого другая модель, тем самым для игрока просто меняется модель и все, но все же душа больше лежит к изменению моделей с помощью состояний и у меня возникло пару вопросов. Сколько максимум состояний может быть у блока? Приведенный код ниже повлияет как-то негативно на оптимизацию и вообще, что о нем думаете? Может как-то упростить логику можно?

JSON:
{
 
{
  "variants": {
    "normal": {"model": "endo_null_boots"},
    "facing=north,level=true,type=t45,wear=helmet": { "model": "endo_t45_helmet", "y": 0 },
    "facing=east,level=true,type=t45,wear=helmet": { "model": "endo_t45_helmet", "y": 90 },
    "facing=south,level=true,type=t45,wear=helmet": { "model": "endo_t45_helmet", "y": 180 },
    "facing=west,level=true,type=t45,wear=helmet": { "model": "endo_t45_helmet", "y": 270 },
    "facing=north,level=true,type=t45,wear=chestplate": { "model": "endo_t45_chestplate", "y": 0 },
    "facing=east,level=true,type=t45,wear=chestplate": { "model": "endo_t45_chestplate", "y": 90 },
    "facing=south,level=true,type=t45,wear=chestplate": { "model": "endo_t45_chestplate", "y": 180 },
    "facing=west,level=true,type=t45,wear=chestplate": { "model": "endo_t45_chestplate", "y": 270 },
    "facing=north,level=true,type=t45,wear=leggings": { "model": "endo_t45_leggings", "y": 0 },
    "facing=east,level=true,type=t45,wear=leggings": { "model": "endo_t45_leggings", "y": 90 },
    "facing=south,level=true,type=t45,wear=leggings": { "model": "endo_t45_leggings", "y": 180 },
    "facing=west,level=true,type=t45,wear=leggings": { "model": "endo_t45_leggings", "y": 270 },
    "facing=north,level=true,type=t45,wear=boots": { "model": "endo_t45_boots", "y": 0 },
    "facing=east,level=true,type=t45,wear=boots": { "model": "endo_t45_boots", "y": 90 },
    "facing=south,level=true,type=t45,wear=boots": { "model": "endo_t45_boots", "y": 180 },
    "facing=west,level=true,type=t45,wear=boots": { "model": "endo_t45_boots", "y": 270 },

    "facing=north,level=true,type=t51,wear=helmet": { "model": "endo_t51_helmet", "y": 0 },
    "facing=east,level=true,type=t51,wear=helmet": { "model": "endo_t51_helmet", "y": 90 },
    "facing=south,level=true,type=t51,wear=helmet": { "model": "endo_t51_helmet", "y": 180 },
    "facing=west,level=true,type=t51,wear=helmet": { "model": "endo_t51_helmet", "y": 270 },
    "facing=north,level=true,type=t51,wear=chestplate": { "model": "endo_t51_chestplate", "y": 0 },
    "facing=east,level=true,type=t51,wear=chestplate": { "model": "endo_t51_chestplate", "y": 90 },
    "facing=south,level=true,type=t51,wear=chestplate": { "model": "endo_t51_chestplate", "y": 180 },
    "facing=west,level=true,type=t51,wear=chestplate": { "model": "endo_t51_chestplate", "y": 270 },
    "facing=north,level=true,type=t51,wear=leggings": { "model": "endo_t51_leggings", "y": 0 },
    "facing=east,level=true,type=t51,wear=leggings": { "model": "endo_t51_leggings", "y": 90 },
    "facing=south,level=true,type=t51,wear=leggings": { "model": "endo_t51_leggings", "y": 180 },
    "facing=west,level=true,type=t51,wear=leggings": { "model": "endo_t51_leggings", "y": 270 },
    "facing=north,level=true,type=t51,wear=boots": { "model": "endo_t51_boots", "y": 0 },
    "facing=east,level=true,type=t51,wear=boots": { "model": "endo_t51_boots", "y": 90 },
    "facing=south,level=true,type=t51,wear=boots": { "model": "endo_t51_boots", "y": 180 },
    "facing=west,level=true,type=t51,wear=boots": { "model": "endo_t51_boots", "y": 270 },

    "facing=north,level=true,type=x01,wear=helmet": { "model": "endo_x01_helmet", "y": 0 },
    "facing=east,level=true,type=x01,wear=helmet": { "model": "endo_x01_helmet", "y": 90 },
    "facing=south,level=true,type=x01,wear=helmet": { "model": "endo_x01_helmet", "y": 180 },
    "facing=west,level=true,type=x01,wear=helmet": { "model": "endo_x01_helmet", "y": 270 },
    "facing=north,level=true,type=x01,wear=chestplate": { "model": "endo_x01_chestplate", "y": 0 },
    "facing=east,level=true,type=x01,wear=chestplate": { "model": "endo_x01_chestplate", "y": 90 },
    "facing=south,level=true,type=x01,wear=chestplate": { "model": "endo_x01_chestplate", "y": 180 },
    "facing=west,level=true,type=x01,wear=chestplate": { "model": "endo_x01_chestplate", "y": 270 },
    "facing=north,level=true,type=x01,wear=leggings": { "model": "endo_x01_leggings", "y": 0 },
    "facing=east,level=true,type=x01,wear=leggings": { "model": "endo_x01_leggings", "y": 90 },
    "facing=south,level=true,type=x01,wear=leggings": { "model": "endo_x01_leggings", "y": 180 },
    "facing=west,level=true,type=x01,wear=leggings": { "model": "endo_x01_leggings", "y": 270 },
    "facing=north,level=true,type=x01,wear=boots": { "model": "endo_x01_boots", "y": 0 },
    "facing=east,level=true,type=x01,wear=boots": { "model": "endo_x01_boots", "y": 90 },
    "facing=south,level=true,type=x01,wear=boots": { "model": "endo_x01_boots", "y": 180 },
    "facing=west,level=true,type=x01,wear=boots": { "model": "endo_x01_boots", "y": 270 },

    "facing=north,level=true,type=x02,wear=helmet": { "model": "endo_x02_helmet", "y": 0 },
    "facing=east,level=true,type=x02,wear=helmet": { "model": "endo_x02_helmet", "y": 90 },
    "facing=south,level=true,type=x02,wear=helmet": { "model": "endo_x02_helmet", "y": 180 },
    "facing=west,level=true,type=x02,wear=helmet": { "model": "endo_x02_helmet", "y": 270 },
    "facing=north,level=true,type=x02,wear=chestplate": { "model": "endo_x02_chestplate", "y": 0 },
    "facing=east,level=true,type=x02,wear=chestplate": { "model": "endo_x02_chestplate", "y": 90 },
    "facing=south,level=true,type=x02,wear=chestplate": { "model": "endo_x02_chestplate", "y": 180 },
    "facing=west,level=true,type=x02,wear=chestplate": { "model": "endo_x02_chestplate", "y": 270 },
    "facing=north,level=true,type=x02,wear=leggings": { "model": "endo_x02_leggings", "y": 0 },
    "facing=east,level=true,type=x02,wear=leggings": { "model": "endo_x02_leggings", "y": 90 },
    "facing=south,level=true,type=x02,wear=leggings": { "model": "endo_x02_leggings", "y": 180 },
    "facing=west,level=true,type=x02,wear=leggings": { "model": "endo_x02_leggings", "y": 270 },
    "facing=north,level=true,type=x02,wear=boots": { "model": "endo_x02_boots", "y": 0 },
    "facing=east,level=true,type=x02,wear=boots": { "model": "endo_x02_boots", "y": 90 },
    "facing=south,level=true,type=x02,wear=boots": { "model": "endo_x02_boots", "y": 180 },
    "facing=west,level=true,type=x02,wear=boots": { "model": "endo_x02_boots", "y": 270 },

    "facing=north,level=true,type=x03,wear=helmet": { "model": "endo_x03_helmet", "y": 0 },
    "facing=east,level=true,type=x03,wear=helmet": { "model": "endo_x03_helmet", "y": 90 },
    "facing=south,level=true,type=x03,wear=helmet": { "model": "endo_x03_helmet", "y": 180 },
    "facing=west,level=true,type=x03,wear=helmet": { "model": "endo_x03_helmet", "y": 270 },
    "facing=north,level=true,type=x03,wear=chestplate": { "model": "endo_x03_chestplate", "y": 0 },
    "facing=east,level=true,type=x03,wear=chestplate": { "model": "endo_x03_chestplate", "y": 90 },
    "facing=south,level=true,type=x03,wear=chestplate": { "model": "endo_x03_chestplate", "y": 180 },
    "facing=west,level=true,type=x03,wear=chestplate": { "model": "endo_x03_chestplate", "y": 270 },
    "facing=north,level=true,type=x03,wear=leggings": { "model": "endo_x03_leggings", "y": 0 },
    "facing=east,level=true,type=x03,wear=leggings": { "model": "endo_x03_leggings", "y": 90 },
    "facing=south,level=true,type=x03,wear=leggings": { "model": "endo_x03_leggings", "y": 180 },
    "facing=west,level=true,type=x03,wear=leggings": { "model": "endo_x03_leggings", "y": 270 },
    "facing=north,level=true,type=x03,wear=boots": { "model": "endo_x03_boots", "y": 0 },
    "facing=east,level=true,type=x03,wear=boots": { "model": "endo_x03_boots", "y": 90 },
    "facing=south,level=true,type=x03,wear=boots": { "model": "endo_x03_boots", "y": 180 },
    "facing=west,level=true,type=x03,wear=boots": { "model": "endo_x03_boots", "y": 270 },

    "facing=north,level=false,type=null,wear=null": { "model": "endo_null_boots" },
    "facing=east,level=false,type=null,wear=null": { "model": "endo_null_boots", "y": 90 },
    "facing=south,level=false,type=null,wear=null": { "model": "endo_null_boots", "y": 180 },
    "facing=west,level=false,type=null,wear=null": { "model": "endo_null_boots", "y": 270 },
    "facing=north,level=true,type=null,wear=null": { "model": "endo_null_leggings" },
    "facing=east,level=true,type=null,wear=null": { "model": "endo_null_leggings", "y": 90 },
    "facing=south,level=true,type=null,wear=null": { "model": "endo_null_leggings", "y": 180 },
    "facing=west,level=true,type=null,wear=null": { "model": "endo_null_leggings", "y": 270 }
  }
}
 
Последнее редактирование:
Сколько максимум состояний может быть у блока?
По нормальному не больше 16 вроде? Но есть еще такая херня, как актуальные состояния

Приведенный код ниже повлияет как-то негативно на оптимизаци
Это настройка модели блока json - на оптимизацию вообще не повлияет
Оно "запекается" до финальной модели к-ю нужно рендерить на этапе загрузки ресурспака
 
Последнее редактирование:
По нормальному не больше 16 вроде? Но есть еще такая херня, как актуальные состояния


Это настройка модели блока json - на оптимизацию вообще не повлияет
Оно "запекается" до финальной модели к-ю нужно рендерить на этапе загрузки ресурспака
как мне тогда динамически изменять модель блока? у меня 20+ моделей. Придется заменять блок на другой блок с другой моделью?
 
У меня в деревах в общей сложности около 70-ти состояний/моделей, и всё работает.
Но вот был опыт создания 1000 состояний, и вот тогда лагало ацки.
Думаю, тут просто нужно экспериментировать.
 
Придется заменять блок на другой блок с другой моделью?
Замени варианты брони (t45, t51) с общего блока, на конкретные. Заменять блок в мире однократно - не очень дорогая операция, не надо так сильно страшится. Тем более, что ты в любом случае заменяешь блок, только не другим блоком, а вариантом; что, по сути, одно и то же.
level=true можно убрать, наверное, раз он везде true.
И вот у тебя и выходит по 4 (направление) * 4 (слот брони) = 16 состояний на каждую броню.

Максимальное кол-во состояния, вроде бы, не ограничено? По крайней мере, никто не будет пихать по 1000-2000 состояний в один блок, это просто банально глупо. Лучше уж тогда сделать TileEntity/Entity.
 
Назад
Сверху