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