马铠 1.21 Fabric
本篇教程的视频
本篇教程的源代码
Github地址:TutorialMod-HorseArmor-1.21
介绍
马铠在游戏中也是一种盔甲类物品,它可以装备在马身上,提供护甲值
这个也是盔甲类物品的衍生,只是它是为我们的动物准备的
并且在1.21的版本中,还加入了狼铠,前面我们在讲盔甲的时候也提到过一个BODY部位的东西,这个量是给狼铠的基础护甲值
然而,目前因为狼铠只有一种材质,它在源代码中是硬编码的,要想新增新的狼铠,我个人认为是要等它和马铠一样,拥有不同材质的时候才好写
现在要写的话就得用Mixin来修改源代码了,待会我们也可以提一下
查看源代码
马铠物品
我们以IRON_HORSE_ARMOR为例,先来看它的注册
1 | public static final Item IRON_HORSE_ARMOR = register( |
它实例化的是AnimalArmorItem,然后这里面的参数是和我们之前写的玩家的盔甲差不多的
ArmorMaterials是和玩家盔甲材质共用的
后面的Type是EQUESTRIAN,这个是马铠的类型,这个是可以直接调用的
false是没有第二层材质
最后是Item.Settings,这个是物品的设置
然后其他的我们就不用看了,我们写的时候就参照这个来写就行了
狼铠物品
虽然本篇教程不会写狼铠,但是我们还是可以看一下它相关的源代码,解释一下为什么要使用Mixin才有可能新增狼铠
1 | public static final Item WOLF_ARMOR = register( |
WOLF_ARMOR的注册和IRON_HORSE_ARMOR一样,只是这里的Type是CANINE,这个是狼铠的类型
然后还有一个maxDamage,这个也是狼铠的耐久值,里面的数字也是乘数,其计算逻辑是和我们前面写的玩家的盔甲一样的,这里就不再赘述
随后我们来看看这个字段它使用在什么地方
1 |
|
这个是WolfEntity的interactMob方法,这个是玩家与狼交互的方法
这里我们就可以发现,这里用的是itemStack.isOf(Items.WOLF_ARMOR),这个是硬编码的,所以我们要新增狼铠的话,就得用Mixin来修改这个源代码
当然,不只是要改这里的代码,还有其他的地方,感兴趣的话可以自行研究,这里就不再赘述
注册马铠
注册物品
那我们现在就来注册一个马铠
1 | public static final Item ICE_ETHER_HORSE_ARMOR = registerItems("ice_ether_horse_armor", |
这个就是我们新增的马铠
ICE_ETHER是我们之前玩家盔甲的材质,直接用就好了
其他的参数是和IRON_HORSE_ARMOR一样的,我们照着写一下就好了
加入物品栏
然后我们把这个物品加入物品栏
1 | entries.add(ModItems.ICE_ETHER_HORSE_ARMOR); |
数据文件
语言文件
1 | translationBuilder.add(ModItems.ICE_ETHER_HORSE_ARMOR, "Ice Ether Horse Armor"); |
这个是物品的名字,我们把它翻译一下
模型文件
1 | itemModelGenerator.register(ModItems.ICE_ETHER_HORSE_ARMOR, Models.GENERATED); |
这个是物品的模型,用GENERATED即可
材质文件
材质文件的路径是resources/assets/tutorialmod/textures/entity/horse/armor
然后材质文件的命名是horse_armor_<材质名>.png,比如这里就是horse_armor_ice_ether.png,它的材质名是后置的











