Skip to content

Commit

Permalink
进一步优化pvp体验,让自己少变红
Browse files Browse the repository at this point in the history
  • Loading branch information
boybook committed Aug 29, 2024
1 parent 752c041 commit f0c9c63
Showing 1 changed file with 21 additions and 16 deletions.
37 changes: 21 additions & 16 deletions src/main/java/cn/nukkit/entity/EntityLiving.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ public boolean attack(EntityDamageEvent source) {

float damage = source.getDamage();
boolean knockback;
boolean hurtAnimation;
boolean hurtAnimationViewers;
boolean hurtAnimationSelf;
long time;
if (notSuicide) {
time = System.currentTimeMillis();
Expand All @@ -185,15 +186,17 @@ public boolean attack(EntityDamageEvent source) {
// 冷却时的伤害补充,不应该造成击退
knockback = false;
// 冷却时的伤害补充,不应该变红、发出音效
hurtAnimation = false;
hurtAnimationViewers = true;
hurtAnimationSelf = false;
} else {
// EC特性:伤害为0的攻击,无冷却,并且造成击退(但是不修改lastHurt,确保有伤害的攻击是继续冷却的)
if (!damageEntity0(source)) {
return false;
}
// 这种情况下也应该变红和音效,以及击退
knockback = true;
hurtAnimation = true;
hurtAnimationViewers = true;
hurtAnimationSelf = false;
}
} else {
if (!damageEntity0(source)) {
Expand All @@ -204,18 +207,28 @@ public boolean attack(EntityDamageEvent source) {
this.nextAllowAttack = time + source.getAttackCooldown() * 50L;
// 正常攻击,变红和击退都安排上
knockback = true;
hurtAnimation = true;
hurtAnimationViewers = true;
hurtAnimationSelf = true;
}
} else {
// 在墙里窒息,应该有变红动画,但是没有击退
hurtAnimation = true;
// 自杀,应该有变红动画,但是没有击退
hurtAnimationViewers = true;
hurtAnimationSelf = true;
knockback = false;
}

// 变红
if (hurtAnimation) {
// 变红(实际上对他人来说,始终能看到变红)
if (hurtAnimationViewers) {
this.onHurt(source);
}
// 如果是玩家,给玩家自己发受伤动画
if (hurtAnimationSelf && this instanceof Player player) {
EntityEventPacket pk = new EntityEventPacket();
pk.eid = this.getId();
pk.event = EntityEventPacket.HURT_ANIMATION;
// 这边只发给自己,因为广播给他人的已经在EntityLiving中发送了
player.dataPacket(pk);
}

if (notSuicide && source instanceof EntityDamageByEntityEvent ev) {
Entity damager = ev.getDamager();
Expand Down Expand Up @@ -277,14 +290,6 @@ protected void onHurt(EntityDamageEvent source) {
pk.eid = this.getId();
pk.event = this.getHealth() < 1 ? EntityEventPacket.DEATH_ANIMATION : EntityEventPacket.HURT_ANIMATION;
Server.broadcastPacket(this.hasSpawned.values(), pk);
// 如果是玩家,给玩家自己发
if (this instanceof Player player) {
EntityEventPacket pk1 = new EntityEventPacket();
pk1.eid = this.getId();
pk1.event = EntityEventPacket.HURT_ANIMATION;
// 这边只发给自己,因为广播给他人的已经在EntityLiving中发送了
player.dataPacket(pk);
}
}

public void knockBack(Entity attacker, double damage, double x, double z) {
Expand Down

0 comments on commit f0c9c63

Please sign in to comment.