本篇教程由作者设定未经允许禁止转载。

开头首先说明:这只是修改炎葬伤害的一种思路,如果你有更好的方案不妨发出来

在修改炎葬伤害前首先要知道,炎葬是直接继承的Item而不是SwordItem,在测试后发现使用setDamage和item.modifyAttribute时都会报错,也就是说这算是封死了通过改属性来改炎葬伤害的方法,但是我们仍可以使用别的方法来改伤害。

我们可以使用forge事件来修改伤害,脚本如下

ForgeEvents.onEvent('net.minecraftforge.event.entity.living.LivingHurtEvent', LivingHurtEvent => {
    global.livingHurt(LivingHurtEvent);
});
global.livingHurt = event => {
  let { amount, source, entity } = event
  let { player } = source
  if (player && source.getType() == 'player'){
      if (player.getMainHandItem() == 'cataclysm:the_incinerator' || player.getOffHandItem() == 'cataclysm:the_incinerator'){
     event.setAmount(amount * 5)
     }
  }
}

接下来解释脚本

ForgeEvents.onEvent('net.minecraftforge.event.entity.living.LivingHurtEvent', LivingHurtEvent => {
    global.livingHurt(LivingHurtEvent);
});

是为forge事件套入global,使该事件可以被热重载

let { amount, source, entity } = event

这个是把amount(数值),source(伤害来源),entity(实体)从event中解构出来

let { player } = source

这个则是把玩家从伤害来源中解构出,可以换成

let player = source.player
if (player && source.getType() == 'player')

这个的作用为检测伤害来源是否为玩家,如果是玩家则继续执行下面的代码,如果不是玩家则返回

if (player.getMainHandItem() == 'cataclysm:the_incinerator' || player.getOffHandItem() == 'cataclysm:the_incinerator')

这行代码的作用是判断玩家主手玩家是否为炎葬

event.setAmount(amount * 5)

这行代码的作用则是修改伤害值,具体伤害可以修改括号中的,其中amount为原伤害值,如果你想改成加数值则是把* 5换成+x

x为添加的数值

当然,我们也可以使用实体受伤事件,以下将讲解使用实体受伤事件造成额外伤害的思路

首先要和forge事件一样判断伤害来源是否为玩家,然后判断玩家主手物品,接着取消实体无敌帧,最后使用event.attack造成伤害