Cleanup damage source a bit (#12106)
This commit is contained in:
@@ -459,7 +459,7 @@
|
||||
+ // CraftBukkit end
|
||||
if (this.level() instanceof ServerLevel serverLevel
|
||||
- && this.hurtServer(serverLevel, this.damageSources().lava(), 4.0F)
|
||||
+ && this.hurtServer(serverLevel, this.damageSources().lava().directBlock(this.level, this.lastLavaContact), 4.0F) // CraftBukkit - we also don't throw an event unless the object in lava is living, to save on some event calls
|
||||
+ && this.hurtServer(serverLevel, this.damageSources().lava().eventBlockDamager(this.level, this.lastLavaContact), 4.0F) // CraftBukkit - we also don't throw an event unless the object in lava is living, to save on some event calls
|
||||
&& this.shouldPlayLavaHurtSound()
|
||||
&& !this.isSilent()) {
|
||||
serverLevel.playSound(
|
||||
@@ -1300,7 +1300,7 @@
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!this.hurtServer(level, this.damageSources().lightningBolt().customEventDamager(lightning), 5.0F)) { // Paper - fix DamageSource API
|
||||
+ if (!this.hurtServer(level, this.damageSources().lightningBolt().eventEntityDamager(lightning), 5.0F)) { // Paper - fix DamageSource API
|
||||
+ return;
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
public boolean skipAttackInteraction(Entity entity) {
|
||||
if (entity instanceof Player player) {
|
||||
+ // CraftBukkit start
|
||||
+ DamageSource source = player.damageSources().playerAttack(player);
|
||||
+ DamageSource source = player.damageSources().generic().eventEntityDamager(entity);
|
||||
+ org.bukkit.event.entity.EntityDamageEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNonLivingEntityDamageEvent(this, source, 1.0F, false);
|
||||
+ if (event.isCancelled()) {
|
||||
+ return true;
|
||||
@@ -14,7 +14,7 @@
|
||||
this.attack = new Interaction.PlayerAction(player.getUUID(), this.level().getGameTime());
|
||||
if (player instanceof ServerPlayer serverPlayer) {
|
||||
- CriteriaTriggers.PLAYER_HURT_ENTITY.trigger(serverPlayer, this, player.damageSources().generic(), 1.0F, 1.0F, false);
|
||||
+ CriteriaTriggers.PLAYER_HURT_ENTITY.trigger(serverPlayer, this, player.damageSources().generic(), 1.0F, (float) event.getFinalDamage(), false); // CraftBukkit // Paper - use correct source and fix taken/dealt param order
|
||||
+ CriteriaTriggers.PLAYER_HURT_ENTITY.trigger(serverPlayer, this, source, 1.0F, (float) event.getFinalDamage(), false); // CraftBukkit // Paper - use correct source and fix taken/dealt param order
|
||||
}
|
||||
|
||||
return !this.getResponse();
|
||||
|
||||
@@ -678,7 +678,7 @@
|
||||
+ event.setCancelled(itemStack == null);
|
||||
+ this.level().getCraftServer().getPluginManager().callEvent(event);
|
||||
+ if (event.isCancelled()) {
|
||||
+ // Set death protection to null as the event was cancelled. Prevent any attempt at ressurection.
|
||||
+ // Set death protection to null as the event was cancelled. Prevent any attempt at resurrection.
|
||||
+ deathProtection = null;
|
||||
+ } else {
|
||||
+ if (!itemInHand.isEmpty() && itemStack != null) { // Paper - only reduce item if actual totem was found
|
||||
@@ -691,7 +691,7 @@
|
||||
- if (this instanceof ServerPlayer serverPlayer) {
|
||||
+ }
|
||||
+ // Paper start - fix NPE when pre-cancelled EntityResurrectEvent is uncancelled
|
||||
+ // restore the previous behavior in that case by defaulting to vanillas totem of undying efect
|
||||
+ // restore the previous behavior in that case by defaulting to vanillas totem of undying effect
|
||||
+ if (deathProtection == null) {
|
||||
+ deathProtection = DeathProtection.TOTEM_OF_UNDYING;
|
||||
+ }
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
if (this.level() instanceof ServerLevel serverLevel) {
|
||||
if (this.level().getBiome(this.blockPosition()).is(BiomeTags.SNOW_GOLEM_MELTS)) {
|
||||
- this.hurtServer(serverLevel, this.damageSources().onFire(), 1.0F);
|
||||
+ this.hurtServer(serverLevel, this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING
|
||||
+ this.hurtServer(serverLevel, this.damageSources().onFire().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.MELTING), 1.0F); // CraftBukkit
|
||||
}
|
||||
|
||||
if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
@Override
|
||||
public void thunderHit(ServerLevel level, LightningBolt lightning) {
|
||||
- this.hurtServer(level, this.damageSources().lightningBolt(), Float.MAX_VALUE);
|
||||
+ this.hurtServer(level, this.damageSources().lightningBolt().customEventDamager(lightning), Float.MAX_VALUE); // CraftBukkit // Paper - fix DamageSource API
|
||||
+ this.hurtServer(level, this.damageSources().lightningBolt().eventEntityDamager(lightning), Float.MAX_VALUE); // CraftBukkit // Paper - fix DamageSource API
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
&& !this.isSprinting();
|
||||
+ flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits
|
||||
if (flag2) {
|
||||
+ damageSource = damageSource.critical(true); // Paper start - critical damage API
|
||||
+ damageSource = damageSource.critical(); // Paper - critical damage API
|
||||
f *= 1.5F;
|
||||
}
|
||||
|
||||
@@ -342,12 +342,14 @@
|
||||
}
|
||||
|
||||
if (flag3) {
|
||||
@@ -1212,43 +_,62 @@
|
||||
@@ -1212,43 +_,64 @@
|
||||
&& (!(livingEntity2 instanceof ArmorStand) || !((ArmorStand)livingEntity2).isMarker())
|
||||
&& this.distanceToSqr(livingEntity2) < 9.0) {
|
||||
float f6 = this.getEnchantedDamage(livingEntity2, f5, damageSource) * attackStrengthScale;
|
||||
+ // CraftBukkit start - Only apply knockback if the damage hits
|
||||
+ if (!livingEntity2.hurtServer((ServerLevel) this.level(), this.damageSources().playerAttack(this).sweep().critical(flag2), f6)) { // Paper - add critical damage API
|
||||
+ // CraftBukkit start - Only apply knockback if the event is not cancelled
|
||||
+ livingEntity2.lastDamageCancelled = false;
|
||||
+ livingEntity2.hurtServer((ServerLevel) this.level(), damageSource.knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK), f6);
|
||||
+ if (livingEntity2.lastDamageCancelled) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if (target.isAlive() && !target.isInvulnerable() && target != owner) {
|
||||
if (owner == null) {
|
||||
- target.hurt(this.damageSources().magic(), 6.0F);
|
||||
+ target.hurt(this.damageSources().magic().customEventDamager(this), 6.0F); // CraftBukkit // Paper - fix DamageSource API
|
||||
+ target.hurt(this.damageSources().magic().eventEntityDamager(this), 6.0F); // CraftBukkit // Paper - fix DamageSource API
|
||||
} else {
|
||||
if (owner.isAlliedTo(target)) {
|
||||
return;
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
serverPlayer1.resetFallDistance();
|
||||
serverPlayer1.resetCurrentImpulseContext();
|
||||
- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl(), 5.0F);
|
||||
+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
|
||||
+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
|
||||
}
|
||||
|
||||
this.playSound(serverLevel, vec3);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
}
|
||||
} else {
|
||||
- flag = var8.hurtServer(serverLevel, this.damageSources().magic(), 5.0F);
|
||||
+ flag = var8.hurtServer(serverLevel, this.damageSources().magic().customEventDamager(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls // Paper - fix DamageSource API
|
||||
+ flag = var8.hurtServer(serverLevel, this.damageSources().magic().eventEntityDamager(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls // Paper - fix DamageSource API
|
||||
}
|
||||
|
||||
if (flag && var8 instanceof LivingEntity livingEntityx) {
|
||||
|
||||
Reference in New Issue
Block a user