azalea_inventory/item/
consume_effect.rs1use 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}