From 1d80f531b74bc3b31023753acb81b35efcdadd73 Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Tue, 23 Apr 2024 10:34:50 -0500 Subject: 1.20.5 (#127) * 23w51b * make recalculate_near_end_of_path public so other plugins can do .after(recalculate_near_end_of_path) * update to 24w03a i think * start implementing 24w13a * registries work (but a lot of packets are still broken) * fix recipes and commands packets * i love codecs :D i am not going insane :D mojang's java is very readable :D * item components are "implemented" meowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeowmeow * update to 1.20.5-pre3 * fix all the broken packets and clippy (mojang please don't do an update like this again or i will murder someone) * 1.20.5-rc1 * fix failing tests * 1.20.5 --- azalea-buf/azalea-buf-macros/src/read.rs | 38 +++++++++++++++++++------------ azalea-buf/azalea-buf-macros/src/write.rs | 36 ++++++++++++++++++----------- azalea-buf/src/read.rs | 20 ++++++++-------- azalea-buf/src/write.rs | 9 ++++++++ 4 files changed, 65 insertions(+), 38 deletions(-) (limited to 'azalea-buf') diff --git a/azalea-buf/azalea-buf-macros/src/read.rs b/azalea-buf/azalea-buf-macros/src/read.rs index c3e9595c..c5c484e7 100644 --- a/azalea-buf/azalea-buf-macros/src/read.rs +++ b/azalea-buf/azalea-buf-macros/src/read.rs @@ -38,24 +38,34 @@ fn read_named_fields( pub fn create_impl_mcbufreadable(ident: &Ident, data: &Data) -> proc_macro2::TokenStream { match data { - syn::Data::Struct(syn::DataStruct { fields, .. }) => { - let syn::Fields::Named(FieldsNamed { named, .. }) = fields else { - panic!("#[derive(McBuf)] can only be used on structs with named fields") - }; - - let (read_fields, read_field_names) = read_named_fields(named); + syn::Data::Struct(syn::DataStruct { fields, .. }) => match fields { + syn::Fields::Named(FieldsNamed { named, .. }) => { + let (read_fields, read_field_names) = read_named_fields(named); - quote! { - impl azalea_buf::McBufReadable for #ident { - fn read_from(buf: &mut std::io::Cursor<&[u8]>) -> Result { - #(#read_fields)* - Ok(#ident { - #(#read_field_names: #read_field_names),* - }) + quote! { + impl azalea_buf::McBufReadable for #ident { + fn read_from(buf: &mut std::io::Cursor<&[u8]>) -> Result { + #(#read_fields)* + Ok(Self { + #(#read_field_names: #read_field_names),* + }) + } + } } } + syn::Fields::Unit => { + quote! { + impl azalea_buf::McBufReadable for #ident { + fn read_from(buf: &mut std::io::Cursor<&[u8]>) -> Result { + Ok(Self) + } + } + } } - } + _ => { + panic!("#[derive(McBuf)] can only be used on structs with named fields") + } + }, syn::Data::Enum(syn::DataEnum { variants, .. }) => { let mut match_contents = quote!(); let mut variant_discrim: u32 = 0; diff --git a/azalea-buf/azalea-buf-macros/src/write.rs b/azalea-buf/azalea-buf-macros/src/write.rs index 35c2d49a..4d31f39e 100644 --- a/azalea-buf/azalea-buf-macros/src/write.rs +++ b/azalea-buf/azalea-buf-macros/src/write.rs @@ -39,23 +39,33 @@ fn write_named_fields( pub fn create_impl_mcbufwritable(ident: &Ident, data: &Data) -> proc_macro2::TokenStream { match data { - syn::Data::Struct(syn::DataStruct { fields, .. }) => { - let syn::Fields::Named(FieldsNamed { named, .. }) = fields else { - panic!("#[derive(McBuf)] can only be used on structs with named fields") - }; - - let write_fields = - write_named_fields(named, Some(&Ident::new("self", Span::call_site()))); + syn::Data::Struct(syn::DataStruct { fields, .. }) => match fields { + syn::Fields::Named(FieldsNamed { named, .. }) => { + let write_fields = + write_named_fields(named, Some(&Ident::new("self", Span::call_site()))); - quote! { - impl azalea_buf::McBufWritable for #ident { - fn write_into(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> { - #write_fields - Ok(()) + quote! { + impl azalea_buf::McBufWritable for #ident { + fn write_into(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> { + #write_fields + Ok(()) + } } } } - } + syn::Fields::Unit => { + quote! { + impl azalea_buf::McBufWritable for #ident { + fn write_into(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> { + Ok(()) + } + } + } + } + _ => { + panic!("#[derive(McBuf)] can only be used on structs with named fields") + } + }, syn::Data::Enum(syn::DataEnum { variants, .. }) => { // remember whether it's a data variant so we can do an optimization later let mut is_data_enum = false; diff --git a/azalea-buf/src/read.rs b/azalea-buf/src/read.rs index d5c4d0a8..b3352a80 100755 --- a/azalea-buf/src/read.rs +++ b/azalea-buf/src/read.rs @@ -103,17 +103,6 @@ fn read_utf_with_len(buf: &mut Cursor<&[u8]>, max_length: u32) -> Result Result { let mut buffer = [0]; let mut ans = 0; for i -// in 0..5 { reader.read_exact(&mut buffer).await?; ans |= ((buffer[0] & -// 0b0111_1111) as i32) << (7 * i); if buffer[0] & 0b1000_0000 == 0 { break; } -// } Ok(ans) -// } - pub trait McBufReadable where Self: Sized, @@ -373,3 +362,12 @@ impl McBufReadable for simdnbt::owned::Nbt { Ok(simdnbt::owned::Nbt::read_unnamed(buf)?) } } + +impl McBufReadable for Box +where + T: McBufReadable, +{ + fn read_from(buf: &mut Cursor<&[u8]>) -> Result { + Ok(Box::new(T::read_from(buf)?)) + } +} diff --git a/azalea-buf/src/write.rs b/azalea-buf/src/write.rs index 7b1fb331..61dedfd8 100755 --- a/azalea-buf/src/write.rs +++ b/azalea-buf/src/write.rs @@ -281,3 +281,12 @@ impl McBufWritable for simdnbt::owned::Nbt { buf.write_all(&data) } } + +impl McBufWritable for Box +where + T: McBufWritable, +{ + fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + T::write_into(&**self, buf) + } +} -- cgit v1.2.3