Skip to main content

steel_protocol/packets/game/
c_remove_mob_effect.rs

1//! Clientbound remove mob effect packet.
2
3use steel_macros::{ClientPacket, WriteTo};
4use steel_registry::mob_effect::MobEffectRef;
5use steel_registry::packets::play::C_REMOVE_MOB_EFFECT;
6
7/// Sent when the client should remove an entity mob effect.
8#[derive(ClientPacket, WriteTo, Clone, Debug)]
9#[packet_id(Play = C_REMOVE_MOB_EFFECT)]
10pub struct CRemoveMobEffect {
11    #[write(as = VarInt)]
12    pub entity_id: i32,
13    /// Holder-registry mob effect id.
14    #[write(as = VarInt)]
15    pub effect_id: i32,
16}
17
18impl CRemoveMobEffect {
19    #[must_use]
20    pub fn new(entity_id: i32, effect: MobEffectRef) -> Self {
21        Self {
22            entity_id,
23            effect_id: effect.packet_holder_id(),
24        }
25    }
26}
27
28#[cfg(test)]
29mod tests {
30
31    use steel_registry::init_vanilla_registry;
32    use steel_registry::vanilla_mob_effects;
33
34    use super::*;
35
36    #[test]
37    fn remove_mob_effect_uses_raw_holder_registry_id() {
38        init_vanilla_registry();
39
40        let packet = CRemoveMobEffect::new(42, vanilla_mob_effects::SPEED);
41
42        assert_eq!(packet.effect_id, 0);
43    }
44}