steel_core/entity/consume_effect/
play_sound.rs1use std::sync::Arc;
5
6use glam::DVec3;
7use steel_registry::consume_effect::{ConsumeEffectData, PlaySoundConsumeEffect};
8
9use super::ConsumeEffectBehavior;
10use crate::entity::LivingEntity;
11use crate::world::World;
12
13pub struct PlaySoundBehavior;
15
16impl ConsumeEffectBehavior for PlaySoundBehavior {
17 fn apply(&self, effect: &ConsumeEffectData, world: &Arc<World>, user: &dyn LivingEntity) {
18 let Some(play_sound) = effect.downcast_ref::<PlaySoundConsumeEffect>() else {
19 return;
20 };
21 let Some(sound) = play_sound.sound().registry_ref() else {
22 return;
23 };
24 let block_pos = user.block_position();
27 let block_center = DVec3::new(
28 f64::from(block_pos.x()) + 0.5,
29 f64::from(block_pos.y()) + 0.5,
30 f64::from(block_pos.z()) + 0.5,
31 );
32 world.play_sound_at(sound, user.sound_source(), block_center, 1.0, 1.0, None);
33 }
34}