diff --git a/patches/server/Fix-PotionSplashEvent-for-water-splash-potions.patch b/patches/server/Fix-PotionSplashEvent-for-water-splash-potions.patch index cad7f00541..46ac8319fb 100644 --- a/patches/server/Fix-PotionSplashEvent-for-water-splash-potions.patch +++ b/patches/server/Fix-PotionSplashEvent-for-water-splash-potions.patch @@ -10,14 +10,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java @@ -0,0 +0,0 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie + } + } + ++ private static final Predicate APPLY_WATER_GET_ENTITIES_PREDICATE = ThrownPotion.WATER_SENSITIVE.or(Axolotl.class::isInstance); // Paper private void applyWater() { AABB axisalignedbb = this.getBoundingBox().inflate(4.0D, 2.0D, 4.0D); - List list = this.level.getEntitiesOfClass(net.minecraft.world.entity.LivingEntity.class, axisalignedbb, ThrownPotion.WATER_SENSITIVE); +- List list = this.level.getEntitiesOfClass(net.minecraft.world.entity.LivingEntity.class, axisalignedbb, ThrownPotion.WATER_SENSITIVE); ++ List list = this.level.getEntitiesOfClass(net.minecraft.world.entity.LivingEntity.class, axisalignedbb, ThrownPotion.APPLY_WATER_GET_ENTITIES_PREDICATE); // Paper + Map affected = new HashMap<>(); // Paper if (!list.isEmpty()) { Iterator iterator = list.iterator(); -@@ -0,0 +0,0 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie + + while (iterator.hasNext()) { + net.minecraft.world.entity.LivingEntity entityliving = (net.minecraft.world.entity.LivingEntity) iterator.next(); ++ // Paper start - Change into single getEntities for axolotls & water sensitive ++ if (entityliving instanceof Axolotl axolotl) { ++ affected.put(axolotl.getBukkitLivingEntity(), 1.0); ++ continue; ++ } ++ // Paper end double d0 = this.distanceToSqr((Entity) entityliving); if (d0 < 16.0D && entityliving.isSensitiveToWater()) { @@ -26,22 +39,33 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + double intensity = 1.0D - Math.sqrt(d0) / 4.0D; + affected.put(entityliving.getBukkitLivingEntity(), intensity); + // entityliving.hurt(DamageSource.indirectMagic(this, this.getOwner()), 1.0F); // Paper - moved down ++ // Paper end } } } +- List list1 = this.level.getEntitiesOfClass(Axolotl.class, axisalignedbb); +- Iterator iterator1 = list1.iterator(); +- +- while (iterator1.hasNext()) { +- Axolotl axolotl = (Axolotl) iterator1.next(); +- +- axolotl.rehydrate(); ++ // Paper start + org.bukkit.event.entity.PotionSplashEvent event = CraftEventFactory.callPotionSplashEvent(this, affected); + if (!event.isCancelled()) { + for (LivingEntity affectedEntity : event.getAffectedEntities()) { + net.minecraft.world.entity.LivingEntity entityliving = ((CraftLivingEntity) affectedEntity).getHandle(); -+ entityliving.hurt(DamageSource.indirectMagic(entityliving, this.getOwner()), 1.0F); ++ if (entityliving instanceof Axolotl axolotl && event.getIntensity(affectedEntity) > 0) { ++ axolotl.rehydrate(); ++ } else { ++ entityliving.hurt(DamageSource.indirectMagic(this, this.getOwner()), 1.0F); ++ } + } -+ } -+ // Paper end -+ - List list1 = this.level.getEntitiesOfClass(Axolotl.class, axisalignedbb); - Iterator iterator1 = list1.iterator(); ++ // Paper end + } + } @@ -0,0 +0,0 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie double d0 = this.distanceToSqr((Entity) entityliving);