SPIGOT-6639: During an EntityDamageEvent with damage from blocks, damaging any entity throws an error

This commit is contained in:
DerFrZocker 2022-01-23 09:06:06 +11:00 committed by md_5
parent 74a5cc8a78
commit 3a8161fe41
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11

View File

@ -893,7 +893,12 @@ public class CraftEventFactory {
} else if (source == DamageSource.LAVA) { } else if (source == DamageSource.LAVA) {
EntityDamageEvent event = (new EntityDamageByBlockEvent(blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, modifiers, modifierFunctions)); EntityDamageEvent event = (new EntityDamageByBlockEvent(blockDamage, entity.getBukkitEntity(), DamageCause.LAVA, modifiers, modifierFunctions));
event.setCancelled(cancelled); event.setCancelled(cancelled);
Block damager = blockDamage;
blockDamage = null; // SPIGOT-6639: Clear blockDamage to allow other entity damage during event call
callEvent(event); callEvent(event);
blockDamage = damager; // SPIGOT-6639: Re-set blockDamage so that other entities which are also getting damaged have the right cause
if (!event.isCancelled()) { if (!event.isCancelled()) {
event.getEntity().setLastDamageCause(event); event.getEntity().setLastDamageCause(event);
} else { } else {
@ -916,7 +921,11 @@ public class CraftEventFactory {
} }
EntityDamageEvent event = new EntityDamageByBlockEvent(damager, entity.getBukkitEntity(), cause, modifiers, modifierFunctions); EntityDamageEvent event = new EntityDamageByBlockEvent(damager, entity.getBukkitEntity(), cause, modifiers, modifierFunctions);
event.setCancelled(cancelled); event.setCancelled(cancelled);
blockDamage = null; // SPIGOT-6639: Clear blockDamage to allow other entity damage during event call
callEvent(event); callEvent(event);
blockDamage = damager; // SPIGOT-6639: Re-set blockDamage so that other entities which are also getting damaged have the right cause
if (!event.isCancelled()) { if (!event.isCancelled()) {
event.getEntity().setLastDamageCause(event); event.getEntity().setLastDamageCause(event);
} else { } else {