Pumpkin/pumpkin/src/command/commands/cmd_playsound.rs
Alexander Medvedev 6c78567a83 add play sound command
Its simple and there are many arguments missing but its works
2025-01-23 23:40:20 +01:00

50 lines
1.4 KiB
Rust

use async_trait::async_trait;
use pumpkin_data::sound::SoundCategory;
use rand::{thread_rng, Rng};
use crate::command::{
args::{arg_sound::SoundArgumentConsumer, ConsumedArgs, FindArg},
tree::CommandTree,
tree_builder::argument,
CommandError, CommandExecutor, CommandSender,
};
const NAMES: [&str; 1] = ["playsound"];
const DESCRIPTION: &str = "Plays a sound at a position.";
const ARG_SOUND: &str = "sound";
struct SoundExecutor;
#[async_trait]
impl CommandExecutor for SoundExecutor {
async fn execute<'a>(
&self,
sender: &mut CommandSender<'a>,
_server: &crate::server::Server,
args: &ConsumedArgs<'a>,
) -> Result<(), CommandError> {
let sound = SoundArgumentConsumer::find_arg(args, ARG_SOUND)?;
if let Some(player) = sender.as_player() {
let seed = thread_rng().gen::<f64>();
player
.play_sound(
sound as u16,
SoundCategory::Master,
&player.living_entity.entity.pos.load(),
1.0,
1.0,
seed,
)
.await;
}
Ok(())
}
}
pub fn init_command_tree() -> CommandTree {
CommandTree::new(NAMES, DESCRIPTION)
.with_child(argument(ARG_SOUND, SoundArgumentConsumer).execute(SoundExecutor))
}