valence_server/
op_level.rs

1use bevy_app::prelude::*;
2use bevy_ecs::prelude::*;
3use derive_more::Deref;
4use valence_protocol::packets::play::EntityStatusS2c;
5use valence_protocol::WritePacket;
6
7use crate::client::{Client, UpdateClientsSet};
8
9pub struct OpLevelPlugin;
10
11impl Plugin for OpLevelPlugin {
12    fn build(&self, app: &mut App) {
13        app.add_systems(PostUpdate, update_op_level.in_set(UpdateClientsSet));
14    }
15}
16
17#[derive(Component, Clone, PartialEq, Eq, Default, Debug, Deref)]
18pub struct OpLevel(u8);
19
20impl OpLevel {
21    pub fn get(&self) -> u8 {
22        self.0
23    }
24
25    /// Sets the op level. Value is clamped to `0..=3`.
26    pub fn set(&mut self, lvl: u8) {
27        self.0 = lvl.min(3);
28    }
29}
30
31fn update_op_level(mut clients: Query<(&mut Client, &OpLevel), Changed<OpLevel>>) {
32    for (mut client, lvl) in &mut clients.iter_mut() {
33        client.write_packet(&EntityStatusS2c {
34            entity_id: 0,
35            entity_status: 24 + lvl.0,
36        });
37    }
38}