azalea_registry/
data.rs
1use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite};
2
3use crate::Registry;
4
5pub trait DataRegistry: AzaleaRead + AzaleaWrite {
11 const NAME: &'static str;
12
13 fn protocol_id(&self) -> u32;
14 fn new_raw(id: u32) -> Self;
15}
16impl<T: DataRegistry> Registry for T {
17 fn from_u32(value: u32) -> Option<Self> {
18 Some(Self::new_raw(value))
19 }
20
21 fn to_u32(&self) -> u32 {
22 self.protocol_id()
23 }
24}
25
26macro_rules! data_registry {
27 ($name:ident, $registry_name:expr) => {
28 #[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
29 pub struct $name {
30 #[var]
31 id: u32,
32 }
33 impl DataRegistry for $name {
34 const NAME: &'static str = $registry_name;
35 fn protocol_id(&self) -> u32 {
36 self.id
37 }
38 fn new_raw(id: u32) -> Self {
39 Self { id }
40 }
41 }
42 };
43}
44
45data_registry! {Enchantment, "enchantment"}
46data_registry! {DimensionType, "dimension_type"}
47data_registry! {DamageKind, "damage_kind"}
48data_registry! {WolfSoundVariant, "wolf_sound_variant"}
49data_registry! {CowVariant, "cow_variant"}
50data_registry! {ChickenVariant, "chicken_variant"}
51data_registry! {FrogVariant, "frog_variant"}
52data_registry! {CatVariant, "cat_variant"}
53data_registry! {PigVariant, "pig_variant"}
54data_registry! {PaintingVariant, "painting_variant"}
55data_registry! {WolfVariant, "wolf_variant"}