steel_core/entity/consume_effect/
apply_effects.rs1use std::sync::Arc;
6
7use steel_registry::consume_effect::{ApplyStatusEffectsConsumeEffect, ConsumeEffectData};
8
9use super::ConsumeEffectBehavior;
10use crate::entity::LivingEntity;
11use crate::entity::potion_contents::to_runtime_instance;
12use crate::world::World;
13
14pub struct ApplyEffectsBehavior;
17
18impl ConsumeEffectBehavior for ApplyEffectsBehavior {
19 fn apply(&self, effect: &ConsumeEffectData, _world: &Arc<World>, user: &dyn LivingEntity) {
20 let Some(apply) = effect.downcast_ref::<ApplyStatusEffectsConsumeEffect>() else {
21 return;
22 };
23 if rand::random::<f32>() >= apply.probability() {
24 return;
25 }
26 for instance in apply.effects() {
27 user.add_mob_effect(to_runtime_instance(instance, instance.duration()));
28 }
29 }
30}