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