azalea_inventory/item/
consume_effect.rs

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