steel_registry/
chicken_sound_variant.rs1use rustc_hash::FxHashMap;
2use simdnbt::ToNbtTag;
3use simdnbt::owned::NbtTag;
4use steel_utils::Identifier;
5
6use crate::sound_event::SoundEventRef;
7
8#[derive(Debug)]
10pub struct ChickenSoundVariant {
11 pub key: Identifier,
12 pub baby_sounds: ChickenAge,
13 pub adult_sounds: ChickenAge,
14}
15#[derive(Debug)]
16pub struct ChickenAge {
17 pub ambient_sound: SoundEventRef,
18 pub death_sound: SoundEventRef,
19 pub hurt_sound: SoundEventRef,
20 pub step_sound: SoundEventRef,
21}
22
23impl ToNbtTag for &ChickenAge {
24 fn to_nbt_tag(self) -> NbtTag {
25 use simdnbt::owned::{NbtCompound, NbtTag};
26 let mut adult = NbtCompound::new();
27 let s = self.ambient_sound.key.to_string();
28 adult.insert("ambient_sound", s.as_str());
29 let s = self.death_sound.key.to_string();
30 adult.insert("death_sound", s.as_str());
31 let s = self.hurt_sound.key.to_string();
32 adult.insert("hurt_sound", s.as_str());
33 let s = self.step_sound.key.to_string();
34 adult.insert("step_sound", s.as_str());
35 NbtTag::Compound(adult)
36 }
37}
38
39impl ToNbtTag for &ChickenSoundVariant {
40 fn to_nbt_tag(self) -> NbtTag {
41 use simdnbt::owned::{NbtCompound, NbtTag};
42 let mut compound = NbtCompound::new();
43 compound.insert("adult_sounds", self.adult_sounds.to_nbt_tag());
44 compound.insert("baby_sounds", self.baby_sounds.to_nbt_tag());
45 NbtTag::Compound(compound)
46 }
47}
48
49pub type ChickenSoundVariantRef = &'static ChickenSoundVariant;
50
51pub struct ChickenSoundVariantRegistry {
52 chicken_sound_variants_by_id: Vec<ChickenSoundVariantRef>,
53 chicken_sound_variants_by_key: FxHashMap<Identifier, usize>,
54 allows_registering: bool,
55}
56
57impl ChickenSoundVariantRegistry {
58 #[must_use]
59 pub fn new() -> Self {
60 Self {
61 chicken_sound_variants_by_id: Vec::new(),
62 chicken_sound_variants_by_key: FxHashMap::default(),
63 allows_registering: true,
64 }
65 }
66}
67
68crate::impl_standard_methods!(
69 ChickenSoundVariantRegistry,
70 ChickenSoundVariantRef,
71 chicken_sound_variants_by_id,
72 chicken_sound_variants_by_key,
73 allows_registering
74);
75
76crate::impl_registry!(
77 ChickenSoundVariantRegistry,
78 ChickenSoundVariant,
79 chicken_sound_variants_by_id,
80 chicken_sound_variants_by_key,
81 chicken_sound_variants
82);