本次我们在模组中实现一个可用于飞行的鞘翅。

1.首先参考3D动画盔甲的教程一、二步制作盔甲的模型、动画文件。

2.模型制作完成,接下来需要制作我们的盔甲类

在items包中新建armor包 -> armor包中新建我们的套装类DressArmorItem.java

DressArmorItem.java

package net.joy187.joyggd.item.armor;import net.joy187.joyggd.Main;
import net.joy187.joyggd.init.ItemInit;
import net.joy187.joyggd.item.CustomArmorMaterial;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.*;
import net.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import software.bernie.geckolib3.core.IAnimatable;
import software.bernie.geckolib3.core.manager.AnimationData;
import software.bernie.geckolib3.core.manager.AnimationFactory;
import software.bernie.geckolib3.item.GeoArmorItem;import javax.annotation.Nullable;
import java.util.List;public class DressArmorItem extends GeoArmorItem implements IAnimatable {private AnimationFactory factory = new AnimationFactory(this);public DressArmorItem(Item.Properties props, CustomArmorMaterial mat) {super(mat, EquipmentSlot.CHEST, props);}public static boolean isUsable(ItemStack stack) {return stack.getDamageValue() < stack.getMaxDamage() - 1;}public InteractionResultHolder<ItemStack> use(Level worldIn, Player playerIn, InteractionHand handIn) {ItemStack itemstack = playerIn.getItemInHand(handIn);EquipmentSlot equipmentslottype = Mob.getEquipmentSlotForItem(itemstack);ItemStack itemstack1 = playerIn.getItemBySlot(equipmentslottype);if (itemstack1.isEmpty()) {playerIn.setItemSlot(equipmentslottype, itemstack.copy());itemstack.setCount(0);return InteractionResultHolder.sidedSuccess(itemstack, worldIn.isClientSide());} else {return InteractionResultHolder.fail(itemstack);}}//是否可以像鞘翅一样飞行@Overridepublic boolean canElytraFly(ItemStack stack, net.minecraft.world.entity.LivingEntity entity) {return ElytraItem.isFlyEnabled(stack);}//飞行时的属性,每隔1s掉一个耐久度@Overridepublic boolean elytraFlightTick(ItemStack stack, net.minecraft.world.entity.LivingEntity entity, int flightTicks) {if (!entity.level.isClientSide && (flightTicks + 1) % 20 == 0) {stack.hurtAndBreak(1, entity, e -> e.broadcastBreakEvent(net.minecraft.world.entity.EquipmentSlot.CHEST));}return true;}//用什么修该物品public boolean isValidRepairItem(ItemStack toRepair, ItemStack repair) {return repair.getItem() == ItemInit.ORE.get();}public EquipmentSlot getEquipmentSlot(ItemStack stack) {return EquipmentSlot.CHEST;}@Overridepublic void registerControllers(AnimationData data) {}@Overridepublic AnimationFactory getFactory() {return factory;}@Overridepublic void appendHoverText(ItemStack stack, Level worldIn, List<Component> tooltip, TooltipFlag flagIn) {tooltip.add(Component.translatable("tooltip.dress"));}
}

之后我们需要在armor包中新建model包->model包中新建我们的盔甲的模型类ModelDress:

ModelDress.java

public class ModelDress extends AnimatedGeoModel<DressArmorItem> {@Overridepublic ResourceLocation getModelResource(DressArmorItem object) {return new ResourceLocation(Main.MOD_ID, "geo/dress.geo.json");}@Overridepublic ResourceLocation getTextureResource(DressArmorItem object) {return new ResourceLocation(Main.MOD_ID, "textures/models/armor/dress.png");}@Overridepublic ResourceLocation getAnimationResource(DressArmorItem animatable) {return new ResourceLocation(Main.MOD_ID, "animations/chandlier.animation.json");}
}

之后我们需要在armor包中新建render包->render包中新建我们的盔甲的渲染类RenderDress:

RenderDress.java

package net.joy187.joyggd.item.armor.render;import net.joy187.joyggd.item.armor.ChandlierArmorItem;
import net.joy187.joyggd.item.armor.model.ModelChandlier;
import software.bernie.geckolib3.renderers.geo.GeoArmorRenderer;public class RenderDress extends GeoArmorRenderer<DressArmorItem> {//渲染盔甲穿在身上的每一个部位的效果public RenderDress() {super(new ModelDress());//这里要和第二步你blockbench中建模的名称一一对应this.headBone = "head";this.bodyBone = "dress";this.rightArmBone = "rightArm";this.leftArmBone = "leftArm";this.rightLegBone = "rightLeg";this.leftLegBone = "leftLeg";this.rightBootBone = "rightBoot";this.leftBootBone = "leftBoot";}}

3.在ClientModEventSubscriber类中将我们的盔甲渲染类进行注册:

ClientModEventSubscriber.java

@Mod.EventBusSubscriber(modid = Main.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ClientModEventSubscriber extends ModEventSubscriber{@SubscribeEventpublic static void registerRenderers(final EntityRenderersEvent.AddLayers event) {//渲染类进行注册GeoArmorRenderer.registerArmorRenderer(DressArmorItem.class, RenderDress::new);}
}

4.在ItemInit类中将我们的盔甲进行声明

ItemInit.java

    public static final RegistryObject<Item> DRESS = ITEMS.register("dress",() -> new DressArmorItem(new Item.Properties().tab(Main.ITEM_TAB).durability(800), CustomArmorMaterial.ARMOR_MATERIAL_DRESS));

5.代码部分结束,之后参考教程3D动画盔甲第六步进行资源包制作。

6.保存所有文件 -> 进行测试:

从高处跳下,空格进行飞行!

Minecraft 1.19.2 Forge模组开发 12.自定义鞘翅相关推荐

  1. Minecraft 1.19.2 Forge模组开发 05.矿石生成

    我们本次尝试在主世界生成模组中自定义的矿石 1.由于1.19的版本出现了深板岩层的矿石,我们要在BlockInit类中声明一个矿石的两种岩层形态: BlockInit.java package com ...

  2. Minecraft 1.19.2 Forge模组开发 04.动画效果物品

    我们本次实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Fo ...

  3. Minecraft 1.19.2 Forge模组开发 10.3D动画盔甲

    Minecraft 1.16.5模组开发3D盔甲 Minecraft 1.12.2模组开发3D盔甲 Minecraft 1.18.2模组开发3D动画盔甲 我们本次在1.19.2的版本中实现具有动画效果 ...

  4. Minecraft 1.19.2 Forge模组开发 08.生物生成

    Minecraft 1.18.2 生物生成 我们今天尝试在1.19中生成模组中的生物 效果演示效果演示效果演示 1.在你的项目主类中的commonSetup方法中添加模组中生物的生成规则(可参考文末M ...

  5. Minecraft 1.19.2 Forge模组开发 02.物品栏+方块+物品

    今天是1024程序员日,我们尝试在1.19.2的模组中实现物品栏.方块和物品 1.在项目主类Main.java中添加物品栏声明,同时将物品和方块的类进行注册: Main.java package co ...

  6. Minecraft 1.19.2 Forge模组开发 03.动画生物实体

    1.12.2动画生物实体教程 1.16.5动画生物实体教程 1.18.2动画生物实体教程 效 果 展 示 效果展示 效果展示 我们本次尝试在1.19.2中添加一个能够具有各种动画效果动作的生物实体. ...

  7. Minecraft 1.19.2 Forge模组开发 07.拼图建筑(jigsaw)

    如果你看过之前的Minecraft 1.19.2建筑生成的话,想必会更好理解这篇教程. 效果演示效果演示效果演示 1.我们本期准备生成的建筑分为4块,所以首先需要用4个结构方块将整个建筑包括起来: 2 ...

  8. Minecraft 1.19.2 Fabric模组开发 13.自定义村民

    我们本次在模组中实现一个自定义村民并与其进行交易 效果演示 效果演示 效果演示 1.1.19版本村民职业获取需要一个所谓的职业方块,所以我们要先准备一个方块给村民进行职业获取: 在BlockInit中 ...

  9. Minecraft 1.19.2 Forge模组开发 06.建筑生成

    1.12.2自定义建筑生成 1.16.5自定义建筑生成 1.18.2自定义建筑生成 我们本次尝试在主世界生成一个自定义的建筑. 效 果 展 示 效果展示 效果展示 由于版本更新缘故,1.19的建筑生成 ...

最新文章

  1. Github热榜:2021年33篇最酷AI论文综述!多位华人作者入选
  2. cygwin编译生成hello world_自己动手实现Lua:虚拟机、编译器、标准库(一)——搭建开发环境...
  3. Mongodb WiredTiger存储引擎特性
  4. python统计分析--3.线性回归四种算法
  5. 【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)
  6. mysql网络异常_mysql运行过程中因网络或者数据库原因导致的异常
  7. python3.5怎么打开一个文件,Python3.5入门学习记录-File
  8. ejb stateless 包含在哪个包_微信评论能发表情包的那三天,今年最火表情包已有定论?!...
  9. WPS怎么转成PPT文件
  10. 机器人运动学轨迹跟踪控制(Matlab实现)
  11. 【手写源码-设计模式17】-迭代器模式-基于客户与商品数据遍历
  12. 通用电源模块的测试方法及性能指标
  13. android ca,Android CA证书安装流程
  14. 如何快速统计任意一条线段的长度?
  15. sdn 华硕二级路由_Mesh分布式路由器,能否改善全屋WiFi信号覆盖问题,路由组网分享...
  16. armbian系统实现服务器重启后自动运行指令及解决rc.local和rc-local.service出现的错误
  17. Basler相机外部触发设置(Halcon)
  18. 电影网站 php asp,大站长电影网址大全 ASP版 v20180507
  19. 中国(温州)数安港“2022数据智能夏令营”圆满收官!
  20. 【电子科学系保研】-- 西安交通大学保研之旅

热门文章

  1. SynthWave '84 - VS Code theme小白安装教程
  2. 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解
  3. CSS实现实心三角形和空心三角形
  4. 网址大全(hao123和2345)
  5. Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
  6. java-net-php-python-4java个人博客系统计算机毕业设计程序
  7. 知识问答 - 名侦探柯南
  8. 各种电机原理动态图(直流电机是切割磁力线产生感应电动势,交流电机是改变线圈中的磁场强度产生感应电动势,旋转磁场)
  9. Qt学习之路-简易画板4(鼠标点击拖动图形功能)
  10. win10鼠标不受控制乱动_win10 控制面板在哪里?