Skip to main content

steel_core/entity/consume_effect/
remove_effects.rs

1//! `RemoveStatusEffectsConsumeEffect` behavior (e.g. honey bottle removing Poison).
2
3use std::sync::Arc;
4
5use steel_registry::consume_effect::{ConsumeEffectData, RemoveStatusEffectsConsumeEffect};
6
7use super::ConsumeEffectBehavior;
8use crate::entity::LivingEntity;
9use crate::world::World;
10
11/// Mirrors vanilla `RemoveStatusEffectsConsumeEffect.apply`.
12pub struct RemoveEffectsBehavior;
13
14impl ConsumeEffectBehavior for RemoveEffectsBehavior {
15    fn apply(&self, effect: &ConsumeEffectData, _world: &Arc<World>, user: &dyn LivingEntity) {
16        let Some(remove) = effect.downcast_ref::<RemoveStatusEffectsConsumeEffect>() else {
17            return;
18        };
19        for active in user.active_mob_effects() {
20            if remove.effects().contains(active.effect()) {
21                user.remove_mob_effect(active.effect());
22            }
23        }
24    }
25}