steel_core/entity/mob_effect/
absorption.rs1use super::MobEffectBehavior;
4use crate::entity::LivingEntity;
5use crate::world::World;
6
7pub struct AbsorptionBehavior;
10
11const ABSORPTION_PER_LEVEL: f32 = 4.0;
13
14impl MobEffectBehavior for AbsorptionBehavior {
15 fn should_apply_effect_tick_this_tick(&self, _tick_count: i32, _amplifier: i32) -> bool {
16 true
17 }
18
19 fn apply_effect_tick(&self, _world: &World, user: &dyn LivingEntity, _amplifier: i32) -> bool {
20 user.get_absorption_amount() > 0.0
21 }
22
23 fn on_effect_started(&self, user: &dyn LivingEntity, amplifier: i32) {
26 let amount = ABSORPTION_PER_LEVEL * (1 + amplifier) as f32;
27 user.set_absorption_amount(user.get_absorption_amount().max(amount));
28 }
29}