基于前面搭建的环境继续。
下面完成一个附魔书制作,并且附魔武器后有雷击效果。
一、监听事件两种情况
成员函数
对象构造时AddToEventBus
如:
函数开头上一行加@SubscribeEvent
如:
静态函数
类开头@Mod.EventBusSubscriber(括号里可写可不写)
如:
函数开头@SubScribeEvent
如:
二、事件共同用法
事件可以设置优先级@SubscribeEvent(priority = EventPriority.Low);
部分事件有“结果”,如生成生物、暴击;
部分事件可以取消,如造成伤害;
部分事件只能监听,如生物跳跃;
不是所有的事情都有事件。
常用事件
1、ItemTooltipEvent:给物品、方块加描述。
方法名前需要加上@SideOnly(Side.CLIENT)
2、AnvilUpdateEvent:设计铁砧配方
3、LivingHurtEvent:生物被攻击事件
4、LivingEvent.LivingUpdateEvent:每秒20次,所有生物
TickEvent.PlayerTickEvent:每秒20次,所有玩家
TickEvent.WorldTickEvent:每秒20次,世界
5、LivingDeathEvent:生物死亡
6、PlayerEvent.PlayerLoggedInEvent:玩家登录
二、引雷附魔书
在ModEnchangtmentInit类添加
public static final ModEnchantmentBase THUNDER = new ModEnchantmentBase("dawnbreakforest.thunder", Enchantment.Rarity.COMMON, EnumEnchantmentType.WEAPON, mainHand);
en_us.lang添加
enchantment.dawnbreakforest.thunder=Thunder
zh_cn.lang添加
enchantment.dawnbreakforest.thunder=中苏之力
至此有了附魔书,但是这个附魔书没有实际作用。
三、附魔书添加实际效果
新建ModEnchantmentEvents类
在enchantments/events下新建
@Mod.EventBusSubscriber(modid = IdlFramework.MODID)
public class ModEnchantmentEvents {@SubscribeEventpublic static void onHit(LivingHurtEvent event){EntityLivingBase hurtOne = event.getEntityLiving();//获取被打生物World world = hurtOne.world;//获取你的世界if(event.isCanceled()||world.isRemote){//没打中或者本地段不执行return;}Entity attacker = event.getSource().getTrueSource();//获取真正攻击者,排除淹死情况if(attacker instanceof EntityLivingBase){//攻击者存在,并且是生物EntityLivingBase trueAttacker = (EntityLivingBase) attacker;//将攻击者类型转化为生物if(ModEnchantmentInit.THUNDER.getLevelOnCreature(trueAttacker) > 0){//攻击附加雷击world.addWeatherEffect(new EntityLightningBolt(world,hurtOne.posX,hurtOne.posY,hurtOne.posZ,true));//召唤雷}}}
}
至此完成附魔书雷击效果。