Minecraft 1.16.5模组开发(三十八) 3D盔甲(新)
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盔甲(新)相关推荐
- Minecraft 1.16.5模组开发(三十二) 自定义投掷物品实体
如果你了解过之前我们的实体开发教程,那么本次的教程会相对比较好理解. Minecraft 1.12.2模组开发(七) 实体(魔改Zombie) 我们本次将参考雪球在MC中制作一个属于我们自己的可投掷实 ...
- Minecraft 1.16.5模组开发(四十八) 传送门
Minecraft 1.18.2模组 传送门教程 我们今天在模组中实现一个传送门,让我们可以传送到自己的维度中.(文末附数据包下载链接) 1.在src\main\resources\data中新建一个 ...
- Minecraft 1.16.5模组开发(三十) 自定义成就系统(advancements)
我们本次将尝试在模组中加入属于自己的成就系统 1.打开Minecraft成就生成制作网站进行成就的制作 我的世界成就系统制作网站 在data包下新建advancement文件夹 -> 在文件夹中 ...
- Minecraft 1.16.5模组开发(三十四) 自定义载具
想在MC中开车吗?今天我们在MC中制作一辆车. 由于车辆是一个生物实体,所以要首先了解MC中的实体:我的世界实体教程 1.首先我们要制作一个车辆实体的模型(blockbench) 下载地址: 将模型导 ...
- Minecraft 1.16.5模组开发(二十八) 自定义生态群系(biome)
今天我们尝试在MC中制作一个属于自己的生态群系 1.进入网站,选择Worldgen->Biome Generator进行空间维度的设定与制作: Minecraft 1.15,1.16,1.17自 ...
- Minecraft 1.16.5模组开发(三十一) 自定义建筑生成(structure) (新)
如果你学习过我们之前在1.12.2的建筑生成教程,那么对本次的教程的理解可能会相对轻松. 往期回顾 Minecraft 1.12.2模组开发(十四) 建筑生成 (structure generatio ...
- Minecraft 1.16.5模组开发(五十) 书籍词典 (Guide Book)
诸如冰与火之歌.深渊国度等模组,玩家往往可以通过使用模组中的参考书籍来达到快速上手的效果. 冰与火之歌异兽手记冰与火之歌异兽手记冰与火之歌异兽手记 我们今天在模组中实现一本模组参考书籍,方便其他玩家游 ...
- Minecraft 1.12.2模组开发(三十九) 反应器(TileEntity方块实体)
说到方块实体(TileEntity),可以理解为一种功能性方块,比如熔炉,箱子,附魔台等. 我们今天来做一个类似于熔炉的反应器 熔炉逻辑: 放入燃料-> 放入物品 -> 获取产出物品 1. ...
- Minecraft 1.16.5模组开发(五十二) 修改原版生物战利品 (Loot Table)
我们今天尝试对原版中的一些生物的掉落物进行修改 1.我们本次修改的是原版中Zombie的掉落物,所以我们需要找到原版Zombie的战利品表: zombie.json {"type" ...
最新文章
- 如何破解压缩文件密码-省时省力的方法
- 科学界最牛的合影在这,能认全的都是大神!
- checkio的日子(3)
- 交换机背板带宽公式计算
- 使用PhantomJS实现网页截图服务
- 关于高并发的一些笔记
- python工资一般多少-Python工程师工资多少
- C++编译器的函数名修饰规则
- 数字水印--给我的文件充当保护神
- 安捷伦mso8104a示波器电源烧毁故障维修【图文】
- Oracle--替代触发器(INSTEAD OF)
- 【应用统计学】几种常见的概率分布
- Spring Data JPA手动管理事务
- java经典随机加减法游戏
- 论文阅读:Grad-CAM
- Linux 常用小工具
- 基于Python文本内容/情感的对微博文本自动二元分类
- zoj 3587 Marlon's String(拓展KMP+dp)
- CRF用于命名实体识别(快速上手实现)
- 17届智能车-湖科逐梦四队硬件开源