diff options
| author | mat <git@matdoes.dev> | 2026-02-07 21:25:42 +0300 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2026-02-07 05:48:18 -1245 |
| commit | 8d718a627349bdf1e531fba318abc634a3bec9da (patch) | |
| tree | 9b02cebd67e47dbccd986b2ec3d91781468464b4 /azalea-registry | |
| parent | 4bf82475c6a425bcf6f7d5880009fb9e47be998b (diff) | |
| download | azalea-drasl-8d718a627349bdf1e531fba318abc634a3bec9da.tar.xz | |
replace hard-coded block break speed checks
Diffstat (limited to 'azalea-registry')
| -rw-r--r-- | azalea-registry/azalea-registry-macros/src/lib.rs | 28 | ||||
| -rw-r--r-- | azalea-registry/src/lib.rs | 8 |
2 files changed, 28 insertions, 8 deletions
diff --git a/azalea-registry/azalea-registry-macros/src/lib.rs b/azalea-registry/azalea-registry-macros/src/lib.rs index 6c7d4840..a8c6fe18 100644 --- a/azalea-registry/azalea-registry-macros/src/lib.rs +++ b/azalea-registry/azalea-registry-macros/src/lib.rs @@ -140,28 +140,35 @@ pub fn registry(input: TokenStream) -> TokenStream { }); // Display that uses registry ids - let mut display_items = quote! {}; + let mut to_str_items = quote! {}; let mut from_str_items = quote! {}; for item in &input.items { let name = &item.name; let id = &item.id; - display_items.extend(quote! { - Self::#name => write!(f, concat!("minecraft:", #id)), + to_str_items.extend(quote! { + Self::#name => concat!("minecraft:", #id), }); from_str_items.extend(quote! { #id => Ok(Self::#name), }); } generated.extend(quote! { - /// Convert the value to a stringified identifier, formatted like - /// `"minecraft:air"`. - impl std::fmt::Display for #name { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + impl #name { + /// Convert the value to a stringified identifier, formatted like + /// `"minecraft:air"`. + pub fn to_str(&self) -> &'static str { match self { - #display_items + #to_str_items } } } + impl std::fmt::Display for #name { + /// Convert the value to a stringified identifier, formatted like + /// `"minecraft:air"`. + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.to_str()) + } + } impl<'a> TryFrom<&'a crate::Identifier> for #name { type Error = (); fn try_from(ident: &'a crate::Identifier) -> Result<Self, Self::Error> { @@ -172,6 +179,11 @@ pub fn registry(input: TokenStream) -> TokenStream { } } } + impl<'a> From<#name> for crate::Identifier { + fn from(value: #name) -> Self { + Self::new(value.to_str()) + } + } /// Parse the value from a stringified identifier, formatted like /// either `"air"` or `"minecraft:air"`. impl std::str::FromStr for #name { diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs index fe6b85b3..e60a0968 100644 --- a/azalea-registry/src/lib.rs +++ b/azalea-registry/src/lib.rs @@ -204,6 +204,14 @@ impl<D: Registry, Identifier: AzBuf> Default for HolderSet<D, Identifier> { } } } +impl<D: Registry, Identifier: AzBuf + From<D> + PartialEq> HolderSet<D, Identifier> { + pub fn contains(&self, value: D) -> bool { + match self { + HolderSet::Direct { contents } => contents.contains(&value), + HolderSet::Named { key: _, contents } => contents.contains(&Identifier::from(value)), + } + } +} /// A reference to either a registry or a custom value (usually something with /// an `Identifier`). |
