play sound send animation helpers

This commit is contained in:
MeexReay 2025-05-08 10:21:26 +03:00
parent a1b0da37d9
commit 363ecba90c
2 changed files with 61 additions and 3 deletions

View File

@ -38,6 +38,44 @@ pub fn send_entity_event(
client.write_packet(&packet) client.write_packet(&packet)
} }
pub fn send_entity_animation(
receiver: Arc<ClientContext>,
entity_id: i32,
animation: u8,
) -> Result<(), ServerError> {
let mut packet = Packet::empty(clientbound::play::ENTITY_ANIMATION);
packet.write_varint(entity_id)?;
packet.write_byte(animation)?;
receiver.write_packet(&packet)?;
Ok(())
}
pub fn play_sound(receiver: Arc<ClientContext>, sound: String) -> Result<(), ServerError> {
let mut packet = Packet::empty(clientbound::play::ENTITY_SOUND_EFFECT);
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_micros() as i64;
packet.write_varint(0)?;
packet.write_string(&sound)?;
packet.write_boolean(false)?; // is fixed range
// packet.write_float(0.0)?; // fixed range
packet.write_varint(receiver.entity_info().entity_id)?;
packet.write_varint(0)?; // sound category (0 - master)
packet.write_float(1.0)?; // volume
packet.write_float(1.0)?; // pitch
packet.write_long(timestamp)?; // seed
receiver.write_packet(&packet)?;
Ok(())
}
pub fn sync_player_pos( pub fn sync_player_pos(
client: Arc<ClientContext>, client: Arc<ClientContext>,
x: f64, x: f64,

View File

@ -3,8 +3,8 @@ use std::{sync::Arc, thread, time::Duration};
use config::handle_configuration_state; use config::handle_configuration_state;
use helper::{ use helper::{
send_entity_event, send_game_event, send_keep_alive, send_system_message, set_center_chunk, play_sound, send_entity_event, send_game_event, send_keep_alive, send_system_message,
sync_player_pos, unload_chunk, set_center_chunk, sync_player_pos, unload_chunk,
}; };
use rust_mc_proto::{DataReader, DataWriter, Packet}; use rust_mc_proto::{DataReader, DataWriter, Packet};
use uuid::Uuid; use uuid::Uuid;
@ -335,6 +335,7 @@ pub fn handle_play_state(
send_player(client.clone(), player.clone())?; send_player(client.clone(), player.clone())?;
send_player(player.clone(), client.clone())?; send_player(player.clone(), client.clone())?;
send_rainbow_message(&player, format!("{} joined the game", player_name))?; send_rainbow_message(&player, format!("{} joined the game", player_name))?;
play_sound(player.clone(), format!("minecraft:block.bell.use"))?;
} }
thread::spawn({ thread::spawn({
@ -350,6 +351,7 @@ pub fn handle_play_state(
serverbound::play::CLICK_CONTAINER, serverbound::play::CLICK_CONTAINER,
serverbound::play::CHAT_COMMAND, serverbound::play::CHAT_COMMAND,
serverbound::play::SIGNED_CHAT_COMMAND, serverbound::play::SIGNED_CHAT_COMMAND,
serverbound::play::PLAYER_COMMAND,
])?; ])?;
match packet.id() { match packet.id() {
@ -363,15 +365,31 @@ pub fn handle_play_state(
send_rainbow_message(&client, format!("index clicked: {slot}"))?; send_rainbow_message(&client, format!("index clicked: {slot}"))?;
} }
serverbound::play::PLAYER_COMMAND => {
let _ = packet.read_varint()?; // entity id
let action = packet.read_varint()?; // action id
let _ = packet.read_varint()?; // jump boost on horse
if action == 0 {
// press sneak key
for player in client.server.players() {
play_sound(player.clone(), format!("minecraft:block.bell.use"))?;
}
} else if action == 1 {
// release sneak key
}
}
serverbound::play::CHAT_COMMAND | serverbound::play::SIGNED_CHAT_COMMAND => { serverbound::play::CHAT_COMMAND | serverbound::play::SIGNED_CHAT_COMMAND => {
let command = packet.read_string()?; let command = packet.read_string()?;
if command == "gamemode creative" { if command == "gamemode creative" {
send_game_event(client.clone(), 3, 1.0)?; // 3 - Set gamemode send_game_event(client.clone(), 3, 1.0)?; // 3 - Set gamemode
send_rainbow_message(&client, format!("gamemode creative installed"))?; send_rainbow_message(&client, format!("gamemode creative installed"))?;
play_sound(client.clone(), format!("minecraft:block.bell.use"))?;
} else if command == "gamemode survival" { } else if command == "gamemode survival" {
send_game_event(client.clone(), 3, 0.0)?; // 3 - Set gamemode send_game_event(client.clone(), 3, 0.0)?; // 3 - Set gamemode
send_rainbow_message(&client, format!("gamemode survival installed"))?; send_rainbow_message(&client, format!("gamemode survival installed"))?;
play_sound(client.clone(), format!("minecraft:block.bell.use"))?;
} }
} }
serverbound::play::CHAT_MESSAGE => { serverbound::play::CHAT_MESSAGE => {
@ -394,7 +412,8 @@ pub fn handle_play_state(
} }
for player in client.server.players() { for player in client.server.players() {
send_system_message(player, message.clone(), false)?; send_system_message(player.clone(), message.clone(), false)?;
play_sound(player.clone(), format!("minecraft:block.bell.use"))?;
} }
} }
serverbound::play::SET_PLAYER_POSITION => { serverbound::play::SET_PLAYER_POSITION => {
@ -554,6 +573,7 @@ pub fn handle_disconnect(
&player, &player,
format!("{} left the game", client.player_info().unwrap().name), format!("{} left the game", client.player_info().unwrap().name),
)?; )?;
play_sound(player.clone(), format!("minecraft:block.bell.use"))?;
} }
Ok(()) Ok(())