Minecraft升级到1.16.5后,3D盔甲的制作方法也跟之前版本稍有不同(主要在第二步、第四步),建议先复习一下往期教程:

Minecraft 1.12.2模组开发(三十七) 3D盔甲

1.在blockbench中制作我们的盔甲的模型和材质

注意修改版本为1.16(Mojmaps)

制作好后导出Java模型

将模型放入armor包中

2.对模型文件添加或修改几个函数

MirandaSuit.java

package com.joy187.re8joymod.common.items.armor;// Made with Blockbench 3.9.3
// Exported for Minecraft version 1.15 - 1.16 with Mojang mappings
// Paste this class into your mod and generate all required importsimport com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.client.renderer.entity.model.BipedModel;
import net.minecraft.client.renderer.model.ModelRenderer;
import net.minecraft.inventory.EquipmentSlotType;public class MirandaSuit extends BipedModel {//和上期一样,bone是模型根目录private final ModelRenderer bone;private final ModelRenderer Body;private final ModelRenderer Body_r1;...(模型机密)private final ModelRenderer Leftfrontlib;public MirandaSuit() {super(1F);texWidth = 128;texHeight = 128;bone = new ModelRenderer(this);bone.setPos(0.0F, 44.0F, 0.0F);Body = new ModelRenderer(this);Body.setPos(0.0F, -24.0F, 0.0F);bone.addChild(Body);Body.texOffs(44, 7).addBox(-6.0F, -19.0F, -6.0F, 12.0F, 12.0F, 11.0F, 0.0F, false);Body.texOffs(44, 7).addBox(-5.0F, -20.0F, -5.0F, 10.0F, 1.0F, 10.0F, 0.0F, false);Body.texOffs(86, 109).addBox(-6.0F, -19.0F, 5.0F, 12.0F, 18.0F, 2.0F, 0.0F, false);Body.texOffs(46, 65).addBox(-6.0F, -7.0F, -6.0F, 11.0F, 8.0F, 9.0F, 0.0F, false);Body_r1 = new ModelRenderer(this);...Leftfrontlib = new ModelRenderer(this);Leftfrontlib.setPos(0.0F, 1.0F, -2.0F);Leftlib.addChild(Leftfrontlib);//添加这句话,说明是胸甲(头盔head,护腿、靴子leftLeg,rightLeg)this.body.addChild(bone);}//这个函数很关键,直接整个复制public final MirandaSuit applyEntityStats(BipedModel defaultArmor){this.leftArmPose = defaultArmor.leftArmPose;this.rightArmPose = defaultArmor.rightArmPose;this.crouching = defaultArmor.crouching;this.head.copyFrom(defaultArmor.head);this.hat.copyFrom(defaultArmor.hat);this.body.copyFrom(defaultArmor.body);this.rightArm.copyFrom(defaultArmor.rightArm);this.leftArm.copyFrom(defaultArmor.leftArm);this.rightLeg.copyFrom(defaultArmor.rightLeg);this.leftLeg.copyFrom(defaultArmor.leftLeg);return this;}//这个函数也很关键,直接整个复制@Overridepublic void copyPropertiesTo(BipedModel p_217148_1_) {super.copyPropertiesTo(p_217148_1_);p_217148_1_.leftArmPose = this.leftArmPose;p_217148_1_.rightArmPose = this.rightArmPose;p_217148_1_.crouching = this.crouching;p_217148_1_.head.copyFrom(this.head);p_217148_1_.hat.copyFrom(this.hat);p_217148_1_.body.copyFrom(this.body);p_217148_1_.rightArm.copyFrom(this.rightArm);p_217148_1_.leftArm.copyFrom(this.leftArm);p_217148_1_.rightLeg.copyFrom(this.rightLeg);p_217148_1_.leftLeg.copyFrom(this.leftLeg);}//这个函数决定盔甲部位,public BipedModel applySlot(EquipmentSlotType slot){bone.visible = false;switch(slot){//这里的CHEST说明我们的盔甲是胸甲,头盔HEAD,护腿LEGS,靴子FEETcase CHEST:bone.visible = true;break;default:break;}return this;}//这个函数也很关键,直接整个复制@Overridepublic void renderToBuffer(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){bone.render(matrixStack, buffer, packedLight, packedOverlay);}//这个函数也很关键,直接整个复制public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {modelRenderer.xRot = x;modelRenderer.yRot = y;modelRenderer.zRot = z;}//这个函数也很关键,直接整个复制private final void copyModelAngles(ModelRenderer in, ModelRenderer out){out.xRot = in.xRot;out.yRot = in.yRot;out.zRot = in.zRot;}
}

3.在armor包中新建一个盔甲物品定义类ArmorMirandaSuit

ArmorMirandaSuit.java

package com.joy187.re8joymod.common.items.armor;import com.joy187.re8joymod.common.init.ModItems;
import net.minecraft.client.renderer.entity.model.BipedModel;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.world.World;public class ArmorMirandaSuit extends ArmorItem {//定义一个我们第二步中的盔甲类private MirandaSuit mirandaSuitModel;//仿照这样写public ArmorMirandaSuit(IArmorMaterial material, EquipmentSlotType equipmentSlot, Item.Properties properties, MirandaSuit armorModel) {super(material, equipmentSlot, properties);this.mirandaSuitModel = armorModel;}@Overridepublic final BipedModel getArmorModel(LivingEntity entity, ItemStack itemStack, EquipmentSlotType armorSlot, BipedModel defaultArmor) {this.mirandaSuitModel.copyPropertiesTo(defaultArmor);//最后EquipmentSlotType是我们穿戴的部位:胸甲CHEST,头盔HEAD,护腿LEGS,靴子FEETreturn mirandaSuitModel.applyEntityStats(defaultArmor).applySlot(EquipmentSlotType.CHEST);}//定义穿上盔甲的效果@OnlyIn(Dist.CLIENT)@Overridepublic void onArmorTick(ItemStack stack, World world, PlayerEntity player) {if(player.getItemBySlot(EquipmentSlotType.CHEST).getItem() == ModItems.MIRANDA_SUIT.get()){player.addEffect(new EffectInstance(Effects.DIG_SPEED,10,3,false,false));player.addEffect(new EffectInstance(Effects.REGENERATION,10,3,true,true));}super.onArmorTick(stack,world, player);}}

4.新建一个盔甲属性类用于存放所有模组的盔甲属性:

CustomArmorMaterial.java

public enum CustomArmorMaterial implements IArmorMaterial {ARMOR_MATERIAL_FRANKSUIT("franksuit", 80, new int[] {8, 13, 20, 12}, 35, SoundEvents.ARMOR_EQUIP_IRON, 7.0F, 0.8F, () -> Ingredient.of(ModItems.MACHINEHEARTS.get())),ARMOR_MATERIAL_MIRANDASUIT("mirandasuit", 150, new int[] {20, 40, 48, 28}, 95, SoundEvents.ARMOR_EQUIP_NETHERITE, 10.0F, 0.8F, () -> Ingredient.of(ModItems.BLACKFEATHER.get())),ARMOR_MATERIAL_MIRANDA1SUIT("miranda1suit", 160, new int[] {20, 49, 40, 28}, 125, SoundEvents.ARMOR_EQUIP_NETHERITE, 15.0F, 0.9F, () -> Ingredient.of(ModItems.BLACKFEATHER.get())),//可以添加续写ARMOR_MATERIAL_DIMI1SUIT("dimi1suit", 120, new int[] {15, 35, 25, 20}, 75, SoundEvents.ARMOR_EQUIP_NETHERITE, 10.0F, 0.6F, () -> Ingredient.of(ModItems.BLACKFEATHER.get()));private static final int[] baseDurability = { 13, 15, 16, 11 };private final String name;private final int durabilityMultiplier;private final int[] armorVal;private final int enchantability;private final SoundEvent equipSound;private final float toughness;private final float knockbackResistance;private Ingredient repairIngredient;/*** Constructor that adds the armormaterial* @param name Armor name* @param durabilityMultiplier Armor durability multiplier* @param armorVal Armor values per body part* @param enchantability Armor enchantability* @param equipSound Armor equipping sound* @param toughness Armor toughness points* @param knockbackResistance Armor knockback resistance* @param repairIngredient Armor repair item*/CustomArmorMaterial(String name, int durabilityMultiplier, int[] armorVal, int enchantability, SoundEvent equipSound, float toughness, float knockbackResistance, Supplier<Ingredient> repairIngredient) {this.name = name;this.durabilityMultiplier = durabilityMultiplier;this.armorVal = armorVal;this.enchantability = enchantability;this.equipSound = equipSound;this.toughness = toughness;this.knockbackResistance = knockbackResistance;this.repairIngredient = repairIngredient.get();}/*** Gets the durability for a certain slot* @param slot Armor slot* @return Base durability times multiplier for that slot*/@Overridepublic int getDurabilityForSlot(EquipmentSlotType slot) {return baseDurability[slot.getIndex()] * durabilityMultiplier;}/*** Gets the defense for a certain slot* @param slot Armor slot* @return Armor value for that slot*/@Overridepublic int getDefenseForSlot(EquipmentSlotType slot) {return this.armorVal[slot.getIndex()];}/*** Gets the enchantability for a certain armor* @return Enchantability value*/@Overridepublic int getEnchantmentValue() {return this.enchantability;}/*** Gets the equip sound for a certain armor* @return Equip sound*/@Overridepublic SoundEvent getEquipSound() {return this.equipSound;}/*** Gets the repair item for a certain armor* @return Repair item*/@Overridepublic Ingredient getRepairIngredient() {return this.repairIngredient;}/*** Gets the name for a certain armor* @return Name*/@Overridepublic String getName() {return this.name;}/*** Gets the toughness value for a certain armor* @return Toughness value*/@Overridepublic float getToughness() {return this.toughness;}/*** Gets the knockback resistance for a certain armor* @return Knockback resistance value*/@Overridepublic float getKnockbackResistance() {return this.knockbackResistance;}
}

5.在ModItems.java中声明我们的盔甲

//盔甲声明 参数:盔甲名称字符串,盔甲属性(上一步中定义,在这里引用),盔甲穿戴部位,盔甲放在哪个物品栏,盔甲类(第二步中的)
public static final RegistryObject<Item> MIRANDA_SUIT = ITEMS.register("mirandasuit",() -> new ArmorMirandaSuit(CustomArmorMaterial.ARMOR_MATERIAL_MIRANDA1SUIT,EquipmentSlotType.CHEST,(new Item.Properties()).tab(RegistryEvents.RE8GROUP),new MirandaSuit()) );

6.找到resources包中assets包

1.assets\minecraft\textures\models\armor中添加盔甲穿戴后贴图

2.assets\你的模组名称文件夹下:

en_us.json中添加物品游戏内英文名称

  "item.re8joymod.mirandasuit":"Miranda's Suit",

在models/item中新建一个模型文件mirandasuit.json

{"parent": "item/generated","textures": {"layer0": "re8joymod:items/mirandasuit"}
}

textures/models/armor包中添加盔甲贴图,textures/items中添加物品手持贴图

6.保存所有文件,刷新项目 -> 启动MC

没有问题~

Minecraft 1.16.5模组开发(三十八) 3D盔甲(新)相关推荐

  1. Minecraft 1.16.5模组开发(三十二) 自定义投掷物品实体

    如果你了解过之前我们的实体开发教程,那么本次的教程会相对比较好理解. Minecraft 1.12.2模组开发(七) 实体(魔改Zombie) 我们本次将参考雪球在MC中制作一个属于我们自己的可投掷实 ...

  2. Minecraft 1.16.5模组开发(四十八) 传送门

    Minecraft 1.18.2模组 传送门教程 我们今天在模组中实现一个传送门,让我们可以传送到自己的维度中.(文末附数据包下载链接) 1.在src\main\resources\data中新建一个 ...

  3. Minecraft 1.16.5模组开发(三十) 自定义成就系统(advancements)

    我们本次将尝试在模组中加入属于自己的成就系统 1.打开Minecraft成就生成制作网站进行成就的制作 我的世界成就系统制作网站 在data包下新建advancement文件夹 -> 在文件夹中 ...

  4. Minecraft 1.16.5模组开发(三十四) 自定义载具

    想在MC中开车吗?今天我们在MC中制作一辆车. 由于车辆是一个生物实体,所以要首先了解MC中的实体:我的世界实体教程 1.首先我们要制作一个车辆实体的模型(blockbench) 下载地址: 将模型导 ...

  5. Minecraft 1.16.5模组开发(二十八) 自定义生态群系(biome)

    今天我们尝试在MC中制作一个属于自己的生态群系 1.进入网站,选择Worldgen->Biome Generator进行空间维度的设定与制作: Minecraft 1.15,1.16,1.17自 ...

  6. Minecraft 1.16.5模组开发(三十一) 自定义建筑生成(structure) (新)

    如果你学习过我们之前在1.12.2的建筑生成教程,那么对本次的教程的理解可能会相对轻松. 往期回顾 Minecraft 1.12.2模组开发(十四) 建筑生成 (structure generatio ...

  7. Minecraft 1.16.5模组开发(五十) 书籍词典 (Guide Book)

    诸如冰与火之歌.深渊国度等模组,玩家往往可以通过使用模组中的参考书籍来达到快速上手的效果. 冰与火之歌异兽手记冰与火之歌异兽手记冰与火之歌异兽手记 我们今天在模组中实现一本模组参考书籍,方便其他玩家游 ...

  8. Minecraft 1.12.2模组开发(三十九) 反应器(TileEntity方块实体)

    说到方块实体(TileEntity),可以理解为一种功能性方块,比如熔炉,箱子,附魔台等. 我们今天来做一个类似于熔炉的反应器 熔炉逻辑: 放入燃料-> 放入物品 -> 获取产出物品 1. ...

  9. Minecraft 1.16.5模组开发(五十二) 修改原版生物战利品 (Loot Table)

    我们今天尝试对原版中的一些生物的掉落物进行修改 1.我们本次修改的是原版中Zombie的掉落物,所以我们需要找到原版Zombie的战利品表: zombie.json {"type" ...

最新文章

  1. 如何破解压缩文件密码-省时省力的方法
  2. 科学界最牛的合影在这,能认全的都是大神!
  3. checkio的日子(3)
  4. 交换机背板带宽公式计算
  5. 使用PhantomJS实现网页截图服务
  6. 关于高并发的一些笔记
  7. python工资一般多少-Python工程师工资多少
  8. C++编译器的函数名修饰规则
  9. 数字水印--给我的文件充当保护神
  10. 安捷伦mso8104a示波器电源烧毁故障维修【图文】
  11. Oracle--替代触发器(INSTEAD OF)
  12. 【应用统计学】几种常见的概率分布
  13. Spring Data JPA手动管理事务
  14. java经典随机加减法游戏
  15. 论文阅读:Grad-CAM
  16. Linux 常用小工具
  17. 基于Python文本内容/情感的对微博文本自动二元分类
  18. zoj 3587 Marlon's String(拓展KMP+dp)
  19. CRF用于命名实体识别(快速上手实现)
  20. 17届智能车-湖科逐梦四队硬件开源

热门文章

  1. 医院信息化服务器故障,我院开展医院信息系统故障应急预案演练
  2. 记. ZIP炸弹防御问题
  3. 共享自己电脑硬盘空间还能赚钱?
  4. mysql通用mapper_通用mapper的介绍和入门使用
  5. 输出汉诺塔的移动步骤
  6. 【SAP Hana】X档案:SAP HANA 数据库基础知识
  7. 基于opencv的车辆检测python_使用OpenCV和Python构建自己的车辆检测模型
  8. 华为 CE系列交换机配置radius认证
  9. 自媒体人必备的3款宝藏工具,编辑、剪辑、配音软件都全了
  10. Java中人工智能的框架