aboutsummaryrefslogtreecommitdiff
path: root/azalea-registry
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2026-02-07 21:25:42 +0300
committermat <git@matdoes.dev>2026-02-07 05:48:18 -1245
commit8d718a627349bdf1e531fba318abc634a3bec9da (patch)
tree9b02cebd67e47dbccd986b2ec3d91781468464b4 /azalea-registry
parent4bf82475c6a425bcf6f7d5880009fb9e47be998b (diff)
downloadazalea-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.rs28
-rw-r--r--azalea-registry/src/lib.rs8
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`).