Pumpkin/pumpkin-macros/src/lib.rs
Snowiiii 1842e8e6b1 Parse Serverbound Packet IDs from JSON as well
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
2024-11-03 12:25:10 +01:00

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)
}