diff options
Diffstat (limited to 'azalea-client/src/plugins/pong.rs')
| -rw-r--r-- | azalea-client/src/plugins/pong.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/azalea-client/src/plugins/pong.rs b/azalea-client/src/plugins/pong.rs new file mode 100644 index 00000000..827ddfb1 --- /dev/null +++ b/azalea-client/src/plugins/pong.rs @@ -0,0 +1,37 @@ +use bevy_app::{App, Plugin}; +use bevy_ecs::prelude::*; + +use super::packet::{ + config::{ConfigPingEvent, SendConfigPacketEvent}, + game::PingEvent, +}; +use crate::packet::game::SendPacketEvent; + +/// A plugin that replies to [`ClientboundPing`] packets with +/// [`ServerboundPong`]. +/// +/// This works in both the `game` and `config` states. +/// +/// [`ClientboundPing`]: azalea_protocol::packets::game::ClientboundPing +/// [`ServerboundPong`]: azalea_protocol::packets::game::ServerboundPong +pub struct PongPlugin; +impl Plugin for PongPlugin { + fn build(&self, app: &mut App) { + app.add_observer(reply_to_game_ping) + .add_observer(reply_to_config_ping); + } +} + +pub fn reply_to_game_ping(trigger: Trigger<PingEvent>, mut commands: Commands) { + commands.trigger(SendPacketEvent::new( + trigger.entity(), + azalea_protocol::packets::game::ServerboundPong { id: trigger.0.id }, + )); +} + +pub fn reply_to_config_ping(trigger: Trigger<ConfigPingEvent>, mut commands: Commands) { + commands.trigger(SendConfigPacketEvent::new( + trigger.entity(), + azalea_protocol::packets::config::ServerboundPong { id: trigger.0.id }, + )); +} |
