• 【MineCraft】-- 学习Mod制作《有特殊能力的剑》


    基于配置好的开发环境,详情参考上几篇文章。

    下面制作一个有特殊能力的剑,如击中目标凋零效果、生命恢复效果,概率暴击等。


    一、创建物品,配字配图

    1、配字zh_cn.lang、en_us.lang

    1. item.cool_sword.name=Cool Sword
    2. item.cool_sword.desc=Lifesteal
    1. item.cool_sword.name=倚天剑
    2. item.cool_sword.desc=攻击时吸血,附加凋零效果,并有概率暴击

    2、创建json模型

    一键生成json文件,找到GenBlockJson.lua文件

     添加代码:

     GenItem("weapon", "cool_sword");

    运行bat

     下面完成贴图

    可在MC百科找到原版贴图,将贴图改名存进textures文件内,找到对应的分类;

    图片材质尽量为16×16或32×32

    3、新建ItemCoolSword类

    在item对应文件下新建java类

     添加代码

    将DIY的剑继承剑

    1. package com.ZhangXiuyu.first.item.weapon;
    2. import com.ZhangXiuyu.first.item.ItemSwordBase;
    3. public class ItemCoolSword extends ItemSwordBase {
    4. public ItemCoolSword(String name, ToolMaterial material) {
    5. super(name, material);
    6. }
    7. }

    4、加到物品列表

    item文件下找到ModItems类

    添加代码

    	public static final Item COOL_SWORD = new ItemCoolSword("cool_sword",Item.ToolMaterial.DIAMOND);
    

     至此,完成了生成一个继承于剑类的特殊剑,效果跟普通钻石剑一样。

    二、制作吸血效果

    ItemCoolSword类增加

    构造方法内增加

     CommonFunctions.addToEventBus(this);

    新建onAttack方法

    后面将剑造成的效果写到方法的if里面

    1. @SubscribeEvent
    2. public void onAttack(LivingHurtEvent event){
    3. World world = event.getEntity().world;
    4. if(!world.isRemote){
    5. EntityLivingBase hurtOne = event.getEntityLiving();
    6. EntityLivingBase attacker = (EntityLivingBase) event.getSource().getTrueSource();
    7. if(attacker!=null&&attacker.getHeldItemMainhand().getItem()==this){
    8. }
    9. }
    10. }

     接下来制作吸血效果

    治疗:attacker.heal(数量)   1 = 半颗心

    onAttack方法内if添加

    attacker.heal(1);

    三、制作凋零效果

    施加buff、debuff:

    EntityUtil.ApplyBuff(hurtOne,效果,等级-1,秒数);

    例:攻击对敌方增加凋零,对自己增加生命恢复buff。

    其他更多buff可Ctrl+鼠标左键点击MobEffects类,查看效果列表。

    1. EntityUtil.ApplyBuff(hurtOne, MobEffects.WITHER,0,10f);
    2. EntityUtil.ApplyBuff(attacker,MobEffects.REGENERATION,0,10f);

     攻击小白后成功有了生命回复和凋零效果。

    四、制作暴击效果

    1、概率

    if(attacker.getRNG.nextFloat()<概率)

    2、获取伤害值

    event.getAmount()
    

    3、设置新伤害值

    1. event.setAmount(新伤害值)
    2. 翻倍:event.setAmount(event.getAmount()*2);

    例:攻击有二分之十概率伤害翻倍

    1. if(attacker.getRNG().nextFloat()<0.5f){
    2. event.setAmount(event.getAmount()*2f);
    3. }

  • 相关阅读:
    Python-模块系列-zip()函数-range()函数-sum()函数-shuffle() 随机函数
    Python实现整蛊恶搞程序生成exe文件小弹窗祝福发给好兄弟好闺蜜好室友
    基于单片机的导盲拐杖设计
    只需3步,用华为云CodeArts快速搭建一个网上商城
    Redis——Jedis中zset类型使用
    高压 36V 四通道 DMOS 全桥驱动MS3988/3988N
    Git的安装和常用命令&Git与SVN的区别&Gitee远程仓库团队开发代码共享演示
    C# 11 对 ref 和 struct 的改进
    快手资讯|快手推出多档世界杯相关节目
    Self-supervised Video Transformer 阅读
  • 原文地址:https://blog.csdn.net/Tir_zhang/article/details/126283299