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::{self, 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}
20impl<R: DataRegistry> DataRegistryWithKey for R {}
21
22pub trait ResolvableDataRegistry: DataRegistry {
23    type DeserializesTo: RegistryDeserializesTo;
24
25    #[doc(hidden)]
26    #[deprecated = "use `DataRegistryWithKey::key` instead."]
27    fn resolve_name<'a>(&self, registries: &'a RegistryHolder) -> Option<&'a Identifier> {
28        registries.protocol_id_to_identifier(Identifier::from(Self::NAME), self.protocol_id())
29    }
30
31    fn resolve<'a>(
32        &self,
33        registries: &'a RegistryHolder,
34    ) -> Option<(&'a Identifier, &'a Self::DeserializesTo)> {
35        Self::DeserializesTo::get_for_registry(registries, Self::NAME, self.protocol_id())
36    }
37}
38
39macro_rules! define_deserializes_to {
40    ($($t:ty => $deserializes_to:ty),* $(,)?) => {
41        $(
42            impl ResolvableDataRegistry for $t {
43                type DeserializesTo = $deserializes_to;
44            }
45        )*
46    };
47}
48macro_rules! define_default_deserializes_to {
49    ($($t:ty),* $(,)?) => {
50        $(
51            impl ResolvableDataRegistry for $t {
52                type DeserializesTo = NbtCompound;
53            }
54        )*
55    };
56}
57
58define_deserializes_to! {
59    data::DimensionKind => registry_holder::dimension_type::DimensionKindElement,
60    data::Enchantment => registry_holder::enchantment::EnchantmentData,
61}
62
63define_default_deserializes_to! {
64    data::DamageKind,
65    data::Dialog,
66    data::WolfSoundVariant,
67    data::CowVariant,
68    data::ChickenVariant,
69    data::FrogVariant,
70    data::CatVariant,
71    data::PigVariant,
72    data::PaintingVariant,
73    data::WolfVariant,
74    data::Biome,
75}