azalea_core/
data_registry.rs1use 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}