azalea_core/
data_registry.rs

1use std::str::FromStr;
2
3use azalea_registry::DataRegistry;
4use simdnbt::owned::NbtCompound;
5
6use crate::{registry_holder::RegistryHolder, resource_location::ResourceLocation};
7
8pub trait ResolvableDataRegistry: DataRegistry {
9    fn resolve_name(&self, registries: &RegistryHolder) -> Option<ResourceLocation> {
10        self.resolve(registries).map(|(name, _)| name.clone())
11    }
12    fn resolve<'a>(
13        &self,
14        registries: &'a RegistryHolder,
15    ) -> Option<(&'a ResourceLocation, &'a NbtCompound)> {
16        let name_resourcelocation = ResourceLocation::from_str(Self::NAME).unwrap_or_else(|_| {
17            panic!(
18                "Name for registry should be a valid ResourceLocation: {}",
19                Self::NAME
20            )
21        });
22        let registry_values = registries.map.get(&name_resourcelocation)?;
23        let resolved = registry_values.get_index(self.protocol_id() as usize)?;
24        Some(resolved)
25    }
26}
27impl<T: DataRegistry> ResolvableDataRegistry for T {}