azalea_inventory/item/
consume_effect.rs

1use azalea_buf::AzBuf;
2use azalea_core::codec_utils::is_default;
3use azalea_registry::{
4    HolderSet,
5    builtin::{ConsumeEffectKind, MobEffect, SoundEvent},
6    identifier::Identifier,
7};
8use serde::Serialize;
9
10use crate::components::MobEffectInstance;
11
12#[derive(AzBuf, Clone, Debug, PartialEq, Serialize)]
13#[serde(rename_all = "snake_case", tag = "type")]
14pub enum ConsumeEffect {
15    ApplyEffects {
16        #[serde(skip_serializing_if = "is_default")]
17        effects: Vec<MobEffectInstance>,
18        #[serde(skip_serializing_if = "is_default")]
19        probability: f32,
20    },
21    RemoveEffects {
22        #[serde(skip_serializing_if = "is_default")]
23        effects: HolderSet<MobEffect, Identifier>,
24    },
25    ClearAllEffects,
26    TeleportRandomly {
27        #[serde(skip_serializing_if = "is_default")]
28        diameter: f32,
29    },
30    PlaySound {
31        sound: SoundEvent,
32    },
33}
34
35impl From<ConsumeEffect> for ConsumeEffectKind {
36    fn from(effect: ConsumeEffect) -> Self {
37        match effect {
38            ConsumeEffect::ApplyEffects { .. } => ConsumeEffectKind::ApplyEffects,
39            ConsumeEffect::RemoveEffects { .. } => ConsumeEffectKind::RemoveEffects,
40            ConsumeEffect::ClearAllEffects => ConsumeEffectKind::ClearAllEffects,
41            ConsumeEffect::TeleportRandomly { .. } => ConsumeEffectKind::TeleportRandomly,
42            ConsumeEffect::PlaySound { .. } => ConsumeEffectKind::PlaySound,
43        }
44    }
45}