--- a/net/minecraft/world/effect/MobEffectUtil.java +++ b/net/minecraft/world/effect/MobEffectUtil.java @@ -47,18 +_,31 @@ public static List addEffectToPlayersAround( ServerLevel level, @Nullable Entity source, Vec3 pos, double radius, MobEffectInstance effect, int duration ) { + // CraftBukkit start + return MobEffectUtil.addEffectToPlayersAround(level, source, pos, radius, effect, duration, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.UNKNOWN); + } + + public static List addEffectToPlayersAround(ServerLevel level, @Nullable Entity source, Vec3 pos, double radius, MobEffectInstance effect, int duration, org.bukkit.event.entity.EntityPotionEffectEvent.Cause cause) { + // Paper start - Add ElderGuardianAppearanceEvent + return addEffectToPlayersAround(level, source, pos, radius, effect, duration, cause, null); + } + + public static List addEffectToPlayersAround(ServerLevel level, @Nullable Entity source, Vec3 pos, double radius, MobEffectInstance effect, int duration, org.bukkit.event.entity.EntityPotionEffectEvent.Cause cause, @Nullable java.util.function.Predicate playerPredicate) { + // Paper end - Add ElderGuardianAppearanceEvent + // CraftBukkit end Holder effect1 = effect.getEffect(); - List players = level.getPlayers( - serverPlayer -> serverPlayer.gameMode.isSurvival() - && (source == null || !source.isAlliedTo(serverPlayer)) - && pos.closerThan(serverPlayer.position(), radius) - && ( - !serverPlayer.hasEffect(effect1) - || serverPlayer.getEffect(effect1).getAmplifier() < effect.getAmplifier() - || serverPlayer.getEffect(effect1).endsWithin(duration - 1) - ) - ); - players.forEach(serverPlayer -> serverPlayer.addEffect(new MobEffectInstance(effect), source)); + List players = level.getPlayers((entityplayer) -> { + // Paper start - Add ElderGuardianAppearanceEvent + boolean condition = entityplayer.gameMode.isSurvival() && (source == null || !source.isAlliedTo((Entity) entityplayer)) && pos.closerThan(entityplayer.position(), radius) && (!entityplayer.hasEffect(effect1) || entityplayer.getEffect(effect1).getAmplifier() < effect.getAmplifier() || entityplayer.getEffect(effect1).endsWithin(duration - 1)); + if (condition) { + return playerPredicate == null || playerPredicate.test(entityplayer); // Only test the player AFTER it is true + } else { + return false; + } + // Paper end - Add ElderGuardianAppearanceEvent + }); + + players.forEach(serverPlayer -> serverPlayer.addEffect(new MobEffectInstance(effect), source, cause)); // CraftBukkit return players; } }