azalea_core/
data_registry.rs

1use azalea_registry::{
2    DataRegistry, DataRegistryKey, DataRegistryKeyRef,
3    data::{self},
4    identifier::Identifier,
5};
6use simdnbt::owned::NbtCompound;
7
8use crate::registry_holder::{RegistryDeserializesTo, RegistryHolder};
9
10pub trait DataRegistryWithKey: DataRegistry {
11    fn key<'s, 'a: 's>(
12        &'s self,
13        registries: &'a RegistryHolder,
14    ) -> Option<<Self::Key as DataRegistryKey>::Borrow<'s>> {
15        registries
16            .protocol_id_to_identifier(Identifier::from(Self::NAME), self.protocol_id())
17            .map(DataRegistryKeyRef::from_ident)
18    }
19
20    fn key_owned<'s, 'a: 's>(&'s self, registries: &'a RegistryHolder) -> Option<Self::Key> {
21        registries
22            .protocol_id_to_identifier(Identifier::from(Self::NAME), self.protocol_id())
23            .cloned()
24            .map(DataRegistryKey::from_ident)
25    }
26}
27impl<R: DataRegistry> DataRegistryWithKey for R {}
28
29pub trait ResolvableDataRegistry: DataRegistry {
30    type DeserializesTo: RegistryDeserializesTo;
31
32    #[doc(hidden)]
33    #[deprecated = "use `DataRegistryWithKey::key` instead."]
34    fn resolve_name<'a>(&self, registries: &'a RegistryHolder) -> Option<&'a Identifier> {
35        registries.protocol_id_to_identifier(Identifier::from(Self::NAME), self.protocol_id())
36    }
37
38    fn resolve<'a>(
39        &self,
40        registries: &'a RegistryHolder,
41    ) -> Option<(&'a Identifier, &'a Self::DeserializesTo)> {
42        Self::DeserializesTo::get_for_registry(registries, Self::NAME, self.protocol_id())
43    }
44}
45
46macro_rules! define_deserializes_to {
47    ($($t:ty => $deserializes_to:ty),* $(,)?) => {
48        $(
49            impl ResolvableDataRegistry for $t {
50                type DeserializesTo = $deserializes_to;
51            }
52        )*
53    };
54}
55macro_rules! define_default_deserializes_to {
56    ($($t:ty),* $(,)?) => {
57        $(
58            impl ResolvableDataRegistry for $t {
59                type DeserializesTo = NbtCompound;
60            }
61        )*
62    };
63}
64
65define_deserializes_to! {
66    data::DimensionKind => crate::registry_holder::dimension_type::DimensionKindElement,
67    data::Enchantment => crate::registry_holder::enchantment::EnchantmentData,
68}
69
70define_default_deserializes_to! {
71    data::DamageKind,
72    data::Dialog,
73    data::WolfSoundVariant,
74    data::CowVariant,
75    data::ChickenVariant,
76    data::FrogVariant,
77    data::CatVariant,
78    data::PigVariant,
79    data::PaintingVariant,
80    data::WolfVariant,
81    data::Biome,
82}