diff options
| author | mat <git@matdoes.dev> | 2025-02-02 21:15:45 +0000 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2025-02-02 21:15:45 +0000 |
| commit | b08d3d55d7351eff6e27a09d732078c038539958 (patch) | |
| tree | 3d511170be7d46bff418296245f62ebd18065453 /azalea-core/src/data_registry.rs | |
| parent | cdb68dfb702f442135dadedc53ce29b1cc2b9c14 (diff) | |
| download | azalea-drasl-b08d3d55d7351eff6e27a09d732078c038539958.tar.xz | |
start implementing data driven registries
Diffstat (limited to 'azalea-core/src/data_registry.rs')
| -rw-r--r-- | azalea-core/src/data_registry.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/azalea-core/src/data_registry.rs b/azalea-core/src/data_registry.rs new file mode 100644 index 00000000..a72d9caf --- /dev/null +++ b/azalea-core/src/data_registry.rs @@ -0,0 +1,27 @@ +use std::str::FromStr; + +use azalea_registry::DataRegistry; +use simdnbt::owned::NbtCompound; + +use crate::{registry_holder::RegistryHolder, resource_location::ResourceLocation}; + +pub trait ResolvableDataRegistry: DataRegistry { + fn resolve_name(&self, registries: &RegistryHolder) -> Option<ResourceLocation> { + self.resolve(registries).map(|(name, _)| name.clone()) + } + fn resolve<'a>( + &self, + registries: &'a RegistryHolder, + ) -> Option<(&'a ResourceLocation, &'a NbtCompound)> { + let name_resourcelocation = ResourceLocation::from_str(Self::NAME).unwrap_or_else(|_| { + panic!( + "Name for registry should be a valid ResourceLocation: {}", + Self::NAME + ) + }); + let registry_values = registries.map.get(&name_resourcelocation)?; + let resolved = registry_values.get_index(self.protocol_id() as usize)?; + Some(resolved) + } +} +impl<T: DataRegistry> ResolvableDataRegistry for T {} |
