wangmcptr
本帖最后由 wangmcptr 于 2019-9-19 15:58 编辑
a8105 发表于 2019-9-19 02:22
第一种方式,使用setHealth,但前提是必须自己触发事件保证对其他插件的兼容,以确保不会出现这个插件无法被控 ...

试了一下第二种方法,还是会受伤害间隔影响,我知道可以设置目标的setNoDamageTicks,但是经过测试,在连续普攻中夹杂这种方式的伤害会使普通次数明显高于正常的攻击次数,所以想问问有什么更好的方法吗,既能随时造成伤害,又不影响普攻给目标带来的短暂无敌时间。

wshycaa
wangmcptr 发表于 2019-9-19 13:36
试了一下第二种方法,还是会受伤害间隔影响,我知道可以设置目标的setNoDamageTicks,但是经过测试,在连 ...

换个思路,这时候你就需要做一个针对于该玩家对单一实体造成伤害间隔的检测了
比如判断该实体收到攻击的事件,如果收到伤害的间隔距离上一次小于某个值且攻击者一样那么取消伤害

a8105
wangmcptr 发表于 2019-9-19 13:36
试了一下第二种方法,还是会受伤害间隔影响,我知道可以设置目标的setNoDamageTicks,但是经过测试,在连 ...

int a=entity.getNoDamageTicks();
entity.setNoDamageTicks(0);

各种伤害代码,例如
able.damage(.........)

entity.setNoDamageTicks(a);

wangmcptr
a8105 发表于 2019-9-19 20:38
int a=entity.getNoDamageTicks();
entity.setNoDamageTicks(0);

就是这么写的,但就是会明显增加普攻次数,不管怎么测试都是这个结果,我开始也想的既然是线程同步不应该出现这种问题,最后也没想明白怎么回事。又试了下第一种方法,又发现了个难以解决的问题,getFinalDamage()本来能获取计算装备后的伤害,但是直接call这个事件再用getFinalDamage()却获取不了,而且给被攻击单位设置了lastDamageCause后死亡信息也只显示某某死了。

a8105
wangmcptr 发表于 2019-9-19 22:16
就是这么写的,但就是会明显增加普攻次数,不管怎么测试都是这个结果,我开始也想的既然是线程同步不应该 ...

如果你是监听EntityDamageByEntityEvent等事件的时候,额外able.damage,自然会这样,你都监听这些事件了,event.setDamage即可,或者采用第一种方式

wangmcptr
a8105 发表于 2019-9-19 22:20
如果你是监听EntityDamageByEntityEvent等事件的时候,额外able.damage,自然会这样,你都监听这些事件了,ev ...

感谢大佬指点,我好好研究研究

第一页 上一页