【1.14】物品头部/背包/手持显示不同材质/模型

通过在display中放缩不同轴至0可以实现手持物在背包和各种人称视角显示不同材质。但是实际上,在背包中我们无需放缩,只需要将方块旋转到合适的角度即可覆盖背面材质。另一方面,头盔或者帽子的模型材质至少有5个面,若要实现背包显示材质不同只能为底部,此时通过旋转即可实现背包和头部显示不同材质/模型。

然而,如果我们将这个物品手持(已缩小y轴至0),我们会发现该物品的的顶部和底部材质重叠了。如要解决这个问题,我们可以编写两个不同的模型,通过CustomModelData来区分,然后在手部/头部时检测范围并修改CustomModelData。

注意我们无法使用各种原有的头盔,因修改CustomModelData只能修改其物品材质模型而不能修改其在头部的显示材质模型。这里我们使用雕刻过的南瓜。

资源包中:
resources/assets/minecraft/model/item/carved_pumpkin

{
"parent": "block/orientable",
"textures": {
"top": "block/pumpkin_top",
"front": "block/carved_pumpkin",
"side": "block/pumpkin_side"
},
"overrides": [
{ "predicate": { "custom_model_data": 12 }, "model": "craftingpp:decor/glass_helmet"},
{ "predicate": { "custom_model_data": 112 }, "model": "craftingpp:decor/glass_helmet1"}
]
}

resources/assets/craftingpp/model/decor/glass_helmet

{
"parent": "block/block",
"display": {
"gui": {
"rotation": [ -90, 0, 0 ]
}
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down":  { "uv": [ 0, 0,16,16 ], "texture": "#down", "cullface": "down" },
"up":         { "uv": [ 4, 0, 8, 4 ], "texture": "#hat" },
"north": { "uv": [ 4, 4, 8, 8 ], "texture": "#hat", "cullface": "north" },
"south": { "uv": [12, 4,16, 8 ], "texture": "#hat", "cullface": "south" },
"west":  { "uv": [ 8, 4,12, 8 ], "texture": "#hat", "cullface": "west" },
"east":  { "uv": [ 0, 4, 4, 8 ], "texture": "#hat", "cullface": "east" }
}
}
],
"textures": {
"hat": "craftingpp:decor/glass_helmet",
"down": "craftingpp:decor/glass_helmet_down"
}
}

resources/assets/craftingpp/model/decor/glass_helmet1

{
"parent": "item/generated",
"textures": {
"layer0": "craftingpp:decor/glass_helmet_down"
}
}

然后我们画好
glass_helmet.png 
glass_helmet_down 

接下来是数据包,这里只列出主要的几个指令
主函数

execute as @a[nbt={Inventory:[{Slot:103b,id:"minecraft:carved_pumpkin"}]}] run function cpp:decor/hat
execute as @a[nbt={SelectedItem:{id:"minecraft:carved_pumpkin"}}] run function cpp:decor/hat1
execute as @a[nbt={Inventory:[{Slot:-106b,id:"minecraft:carved_pumpkin"}]}] run function cpp:decor/hat2

cpp:decor/hat

execute store result score #temp value run data get entity @s Inventory[{Slot:103b}].tag.CustomModelData
execute if score #temp value matches 111..123 store result entity @s Inventory[{Slot:103b}].tag.CustomModelData int 1 run scoreboard players remove #temp value 100

cpp:decor/hat1

execute store result score #temp value run data get entity @s SelectedItem.tag.CustomModelData
execute if score #temp value matches 11..23 store result entity @s SelectedItem.tag.CustomModelData int 1 run scoreboard players add #temp value 100

cpp:decor/hat2

execute store result score #temp value run data get entity @s Inventory[{Slot:-106b}].tag.CustomModelData
execute if score #temp value matches 11..23 store result entity @s Inventory[{Slot:-106b}].tag.CustomModelData int 1 run scoreboard players add #temp value 100

这样,当南瓜进入头部时,将其CustomModelData 减少100,使用其对应的方块材质,而底部仍然为对应的物品材质。当进入手部时,将其CustomModelData 增加100,使用其对应的物品材质,以保证各个视角材质一致。

最后,从图中可以看出,旋转方块和直接使用物品材质有细微差别,亮度上有所差异。

发表评论

您必须 登录 才能发表留言!