基于前面搭建的环境继续。
下面完成一个附魔书制作,并且附魔武器后有雷击效果。
对象构造时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:玩家登录
public static final ModEnchantmentBase THUNDER = new ModEnchantmentBase("dawnbreakforest.thunder", Enchantment.Rarity.COMMON, EnumEnchantmentType.WEAPON, mainHand);
enchantment.dawnbreakforest.thunder=Thunder
enchantment.dawnbreakforest.thunder=中苏之力
至此有了附魔书,但是这个附魔书没有实际作用。
在enchantments/events下新建
- @Mod.EventBusSubscriber(modid = IdlFramework.MODID)
- public class ModEnchantmentEvents {
- @SubscribeEvent
- public 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));//召唤雷
- }
- }
- }
- }
至此完成附魔书雷击效果。