Minecraft 1.19.2 Forge模组开发 12.自定义鞘翅
本次我们在模组中实现一个可用于飞行的鞘翅。
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.自定义鞘翅相关推荐
- Minecraft 1.19.2 Forge模组开发 05.矿石生成
我们本次尝试在主世界生成模组中自定义的矿石 1.由于1.19的版本出现了深板岩层的矿石,我们要在BlockInit类中声明一个矿石的两种岩层形态: BlockInit.java package com ...
- Minecraft 1.19.2 Forge模组开发 04.动画效果物品
我们本次实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Fo ...
- 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的版本中实现具有动画效果 ...
- Minecraft 1.19.2 Forge模组开发 08.生物生成
Minecraft 1.18.2 生物生成 我们今天尝试在1.19中生成模组中的生物 效果演示效果演示效果演示 1.在你的项目主类中的commonSetup方法中添加模组中生物的生成规则(可参考文末M ...
- Minecraft 1.19.2 Forge模组开发 02.物品栏+方块+物品
今天是1024程序员日,我们尝试在1.19.2的模组中实现物品栏.方块和物品 1.在项目主类Main.java中添加物品栏声明,同时将物品和方块的类进行注册: Main.java package co ...
- Minecraft 1.19.2 Forge模组开发 03.动画生物实体
1.12.2动画生物实体教程 1.16.5动画生物实体教程 1.18.2动画生物实体教程 效 果 展 示 效果展示 效果展示 我们本次尝试在1.19.2中添加一个能够具有各种动画效果动作的生物实体. ...
- Minecraft 1.19.2 Forge模组开发 07.拼图建筑(jigsaw)
如果你看过之前的Minecraft 1.19.2建筑生成的话,想必会更好理解这篇教程. 效果演示效果演示效果演示 1.我们本期准备生成的建筑分为4块,所以首先需要用4个结构方块将整个建筑包括起来: 2 ...
- Minecraft 1.19.2 Fabric模组开发 13.自定义村民
我们本次在模组中实现一个自定义村民并与其进行交易 效果演示 效果演示 效果演示 1.1.19版本村民职业获取需要一个所谓的职业方块,所以我们要先准备一个方块给村民进行职业获取: 在BlockInit中 ...
- Minecraft 1.19.2 Forge模组开发 06.建筑生成
1.12.2自定义建筑生成 1.16.5自定义建筑生成 1.18.2自定义建筑生成 我们本次尝试在主世界生成一个自定义的建筑. 效 果 展 示 效果展示 效果展示 由于版本更新缘故,1.19的建筑生成 ...
最新文章
- Github热榜:2021年33篇最酷AI论文综述!多位华人作者入选
- cygwin编译生成hello world_自己动手实现Lua:虚拟机、编译器、标准库(一)——搭建开发环境...
- Mongodb WiredTiger存储引擎特性
- python统计分析--3.线性回归四种算法
- 【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)
- mysql网络异常_mysql运行过程中因网络或者数据库原因导致的异常
- python3.5怎么打开一个文件,Python3.5入门学习记录-File
- ejb stateless 包含在哪个包_微信评论能发表情包的那三天,今年最火表情包已有定论?!...
- WPS怎么转成PPT文件
- 机器人运动学轨迹跟踪控制(Matlab实现)
- 【手写源码-设计模式17】-迭代器模式-基于客户与商品数据遍历
- 通用电源模块的测试方法及性能指标
- android ca,Android CA证书安装流程
- 如何快速统计任意一条线段的长度?
- sdn 华硕二级路由_Mesh分布式路由器,能否改善全屋WiFi信号覆盖问题,路由组网分享...
- armbian系统实现服务器重启后自动运行指令及解决rc.local和rc-local.service出现的错误
- Basler相机外部触发设置(Halcon)
- 电影网站 php asp,大站长电影网址大全 ASP版 v20180507
- 中国(温州)数安港“2022数据智能夏令营”圆满收官!
- 【电子科学系保研】-- 西安交通大学保研之旅
热门文章
- SynthWave '84 - VS Code theme小白安装教程
- 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解
- CSS实现实心三角形和空心三角形
- 网址大全(hao123和2345)
- Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
- java-net-php-python-4java个人博客系统计算机毕业设计程序
- 知识问答 - 名侦探柯南
- 各种电机原理动态图(直流电机是切割磁力线产生感应电动势,交流电机是改变线圈中的磁场强度产生感应电动势,旋转磁场)
- Qt学习之路-简易画板4(鼠标点击拖动图形功能)
- win10鼠标不受控制乱动_win10 控制面板在哪里?