aboutsummaryrefslogtreecommitdiff
path: root/azalea-registry/src/data.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-registry/src/data.rs')
-rw-r--r--azalea-registry/src/data.rs66
1 files changed, 40 insertions, 26 deletions
diff --git a/azalea-registry/src/data.rs b/azalea-registry/src/data.rs
index 17338c8f..7ae55119 100644
--- a/azalea-registry/src/data.rs
+++ b/azalea-registry/src/data.rs
@@ -1,41 +1,55 @@
-use azalea_buf::AzBuf;
+use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite};
+
+use crate::Registry;
/// A registry which has its values decided by the server in the
/// `ClientboundRegistryData` packet.
///
/// These can be resolved into their actual values with
/// `ResolvableDataRegistry` from azalea-core.
-pub trait DataRegistry {
+pub trait DataRegistry: AzaleaRead + AzaleaWrite {
const NAME: &'static str;
fn protocol_id(&self) -> u32;
+ fn new_raw(id: u32) -> Self;
}
-
-#[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
-pub struct Enchantment {
- #[var]
- id: u32,
-}
-impl DataRegistry for Enchantment {
- const NAME: &'static str = "enchantment";
- fn protocol_id(&self) -> u32 {
- self.id
+impl<T: DataRegistry> Registry for T {
+ fn from_u32(value: u32) -> Option<Self> {
+ Some(Self::new_raw(value))
}
-}
-#[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
-pub struct DimensionType {
- #[var]
- id: u32,
-}
-impl DimensionType {
- pub fn new_raw(id: u32) -> Self {
- Self { id }
+ fn to_u32(&self) -> u32 {
+ self.protocol_id()
}
}
-impl DataRegistry for DimensionType {
- const NAME: &'static str = "dimension_type";
- fn protocol_id(&self) -> u32 {
- self.id
- }
+
+macro_rules! data_registry {
+ ($name:ident, $registry_name:expr) => {
+ #[derive(Debug, Clone, Copy, AzBuf, PartialEq, Eq, Hash)]
+ pub struct $name {
+ #[var]
+ id: u32,
+ }
+ impl DataRegistry for $name {
+ const NAME: &'static str = $registry_name;
+ fn protocol_id(&self) -> u32 {
+ self.id
+ }
+ fn new_raw(id: u32) -> Self {
+ Self { id }
+ }
+ }
+ };
}
+
+data_registry! {Enchantment, "enchantment"}
+data_registry! {DimensionType, "dimension_type"}
+data_registry! {DamageKind, "damage_kind"}
+data_registry! {WolfSoundVariant, "wolf_sound_variant"}
+data_registry! {CowVariant, "cow_variant"}
+data_registry! {ChickenVariant, "chicken_variant"}
+data_registry! {FrogVariant, "frog_variant"}
+data_registry! {CatVariant, "cat_variant"}
+data_registry! {PigVariant, "pig_variant"}
+data_registry! {PaintingVariant, "painting_variant"}
+data_registry! {WolfVariant, "wolf_variant"}