当你想要有一个跟原版的刷怪蛋,染色皮革盔甲一样,随着NBT改变颜色的物品时,你就需要像下面一样注册一个彩色渲染
首先,让我们看看原版是怎么实现的,在ItemRender类里面我们看到了这么个对象 ItemColor ,在renderQuadList方法中,会调用这个对象的getColor方法,拿到一个颜色,然后把这个颜色作为这个面的遮罩。
ItemColor类内默认注册了很多原版物品,好在这里有一个Forge提供的钩子可以给开发者把自己模组的物品添加进去
net.minecraftforge.client.ForgeHooksClient.onItemColorsInit(itemcolors, pColors);
现在我们只需要订阅这个事件RegisterColorHandlersEvent.Item evt来实现这个功能
1 | .EventBusSubscriber(value = Dist.CLIENT, modid = Utils.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) |
可以通过事件的register方法,使用ItemColor类内部的register方法,来把模组物品注册进去
这个方法有两个参数(ItemColor itemColor, ItemLike… items)
在示例中,第二个参数是要注册的物品,可以写多个Item对象
我们通过lambda表达式新建了一个ItemColor对象作为第一个参数,这里的pTintIndex指的是材质里的层
1 | { |
在这个danmaku.json中,我们看到有两个材质文件,他们分别对应着pTintIndex=0和pTintIndex=1
在示例中,我们看到,当pTintIndex == 0时返回-1,当pTintIndex != 0时,返回了DanmakuItem类里的getColor方法
也就是说,会对第二个贴图danmaku_out进行染色
这时候,我们就可以在DanmakuItem类里定义一个getColor方法,返回物品NBT中的颜色参数
1 | public int getColor(ItemStack itemStack) { |
到现在,我们就完成了对模组物品的特定层数的贴图的自定义颜色渲染