本篇教程由作者设定未经允许禁止转载。
开头首先说明:这只是修改炎葬伤害的一种思路,如果你有更好的方案不妨发出来
在修改炎葬伤害前首先要知道,炎葬是直接继承的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造成伤害