• 【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. }

  • 相关阅读:
    火遍全网的杠精哥配音怎么制作?
    欧洲版“OpenAI”——Mistral 举办的 AI 大模型马拉松
    IPv6知识概述 - ND协议
    Android WebSocket
    【机器学习】红酒数据集和加利福尼亚的房价数据的随机森林算法详解
    Python 多进程和多线程【彻底搞懂篇】
    java webservice超时时间设置方法
    2023 年和 2024 年人工智能和机器学习会议清单
    Natapp内网穿透
    [b01lers2020]Welcome to Earth
  • 原文地址:https://blog.csdn.net/Tir_zhang/article/details/126283299