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///
9/// Vanilla: `ClientboundRemoveMobEffectPacket`.
10#[derive(ClientPacket, WriteTo, Clone, Debug)]
11#[packet_id(Play = C_REMOVE_MOB_EFFECT)]
12pub struct CRemoveMobEffect {
13    #[write(as = VarInt)]
14    pub entity_id: i32,
15    /// Holder-registry mob effect id.
16    #[write(as = VarInt)]
17    pub effect_id: i32,
18}
19
20impl CRemoveMobEffect {
21    #[must_use]
22    pub fn new(entity_id: i32, effect: MobEffectRef) -> Self {
23        Self {
24            entity_id,
25            effect_id: effect.packet_holder_id(),
26        }
27    }
28}
29
30#[cfg(test)]
31mod tests {
32
33    use steel_registry::init_vanilla_registry;
34    use steel_registry::vanilla_mob_effects;
35
36    use super::*;
37
38    #[test]
39    fn remove_mob_effect_uses_raw_holder_registry_id() {
40        init_vanilla_registry();
41
42        let packet = CRemoveMobEffect::new(42, vanilla_mob_effects::SPEED);
43
44        assert_eq!(packet.effect_id, 0);
45    }
46}