azalea/
auto_respawn.rs

1use azalea_client::{
2    packet::{death_event_on_0_health, game::DeathEvent},
3    respawn::{PerformRespawnEvent, perform_respawn},
4};
5use bevy_app::Update;
6use bevy_ecs::prelude::*;
7
8use crate::app::{App, Plugin};
9
10/// A plugin that makes [`DeathEvent`]s send [`PerformRespawnEvent`]s.
11#[derive(Clone, Default)]
12pub struct AutoRespawnPlugin;
13impl Plugin for AutoRespawnPlugin {
14    fn build(&self, app: &mut App) {
15        app.add_systems(
16            Update,
17            auto_respawn
18                .before(perform_respawn)
19                .after(death_event_on_0_health),
20        );
21    }
22}
23
24fn auto_respawn(
25    mut events: EventReader<DeathEvent>,
26    mut perform_respawn_events: EventWriter<PerformRespawnEvent>,
27) {
28    for event in events.read() {
29        perform_respawn_events.send(PerformRespawnEvent {
30            entity: event.entity,
31        });
32    }
33}