Before only Clientbound Packet IDs where parsed from JSON, Now Serverbound Packet IDs are parsed from JSON as well. This makes porting to new minecraft version much easier
65 lines
1.6 KiB
Rust
65 lines
1.6 KiB
Rust
use proc_macro::TokenStream;
|
|
use quote::quote;
|
|
|
|
extern crate proc_macro;
|
|
|
|
mod packet;
|
|
#[proc_macro_attribute]
|
|
pub fn client_packet(input: TokenStream, item: TokenStream) -> TokenStream {
|
|
let ast: syn::DeriveInput = syn::parse(item.clone()).unwrap();
|
|
|
|
let name = &ast.ident;
|
|
|
|
let (impl_generics, ty_generics, _) = ast.generics.split_for_impl();
|
|
|
|
let input: proc_macro2::TokenStream = packet::packet_clientbound(input);
|
|
let item: proc_macro2::TokenStream = item.into();
|
|
|
|
let gen = quote! {
|
|
#item
|
|
impl #impl_generics crate::bytebuf::packet_id::Packet for #name #ty_generics {
|
|
const PACKET_ID: i32 = #input as i32;
|
|
}
|
|
};
|
|
|
|
gen.into()
|
|
}
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn server_packet(input: TokenStream, item: TokenStream) -> TokenStream {
|
|
let ast: syn::DeriveInput = syn::parse(item.clone()).unwrap();
|
|
|
|
let name = &ast.ident;
|
|
|
|
let (impl_generics, ty_generics, _) = ast.generics.split_for_impl();
|
|
|
|
let input: proc_macro2::TokenStream = packet::packet_serverbound(input);
|
|
let item: proc_macro2::TokenStream = item.into();
|
|
|
|
let gen = quote! {
|
|
#item
|
|
impl #impl_generics crate::bytebuf::packet_id::Packet for #name #ty_generics {
|
|
const PACKET_ID: i32 = #input as i32;
|
|
}
|
|
};
|
|
|
|
gen.into()
|
|
}
|
|
|
|
mod screen;
|
|
#[proc_macro]
|
|
pub fn screen(item: TokenStream) -> TokenStream {
|
|
screen::screen_impl(item)
|
|
}
|
|
mod sound;
|
|
#[proc_macro]
|
|
pub fn sound(item: TokenStream) -> TokenStream {
|
|
sound::sound_impl(item)
|
|
}
|
|
|
|
mod particle;
|
|
#[proc_macro]
|
|
pub fn particle(item: TokenStream) -> TokenStream {
|
|
particle::particle_impl(item)
|
|
}
|