From c711d1511c2535d3f8da45fac88c3f7e89e7312c Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Fri, 10 Jan 2025 14:39:25 +0100 Subject: [PATCH] parse Particle into enum at compile time --- pumpkin-data/src/lib.rs | 4 ++++ pumpkin-macros/src/lib.rs | 6 ------ pumpkin-macros/src/particle.rs | 21 --------------------- pumpkin/src/net/combat.rs | 5 +++-- 4 files changed, 7 insertions(+), 29 deletions(-) delete mode 100644 pumpkin-macros/src/particle.rs diff --git a/pumpkin-data/src/lib.rs b/pumpkin-data/src/lib.rs index 2c97d8d02..fa4576ae9 100644 --- a/pumpkin-data/src/lib.rs +++ b/pumpkin-data/src/lib.rs @@ -5,3 +5,7 @@ pub mod packet { pub mod screen { include!(concat!(env!("OUT_DIR"), "/screen.rs")); } + +pub mod particle { + include!(concat!(env!("OUT_DIR"), "/particle.rs")); +} diff --git a/pumpkin-macros/src/lib.rs b/pumpkin-macros/src/lib.rs index e818019b1..da56d51ff 100644 --- a/pumpkin-macros/src/lib.rs +++ b/pumpkin-macros/src/lib.rs @@ -73,12 +73,6 @@ pub fn sound(item: TokenStream) -> TokenStream { sound::sound_impl(item) } -mod particle; -#[proc_macro] -pub fn particle(item: TokenStream) -> TokenStream { - particle::particle_impl(item) -} - mod block_state; #[proc_macro] pub fn block_state(item: TokenStream) -> TokenStream { diff --git a/pumpkin-macros/src/particle.rs b/pumpkin-macros/src/particle.rs deleted file mode 100644 index f79d7e598..000000000 --- a/pumpkin-macros/src/particle.rs +++ /dev/null @@ -1,21 +0,0 @@ -use std::{collections::HashMap, sync::LazyLock}; - -use proc_macro::TokenStream; -use quote::quote; - -static PARTICLES: LazyLock> = LazyLock::new(|| { - serde_json::from_str::>(include_str!("../../assets/particles.json")) - .expect("Could not parse particles.json registry") - .into_iter() - .enumerate() - .map(|(i, s)| (s, i as u16)) - .collect() -}); - -pub(crate) fn particle_impl(item: TokenStream) -> TokenStream { - let input_string = item.to_string(); - let particle_name = input_string.trim_matches('"'); - - let id = *PARTICLES.get(particle_name).expect("Invalid Particle"); - quote! { #id }.into() -} diff --git a/pumpkin/src/net/combat.rs b/pumpkin/src/net/combat.rs index 8ec29a85e..2ace8a182 100644 --- a/pumpkin/src/net/combat.rs +++ b/pumpkin/src/net/combat.rs @@ -1,6 +1,7 @@ use std::f32::consts::PI; -use pumpkin_macros::{particle, sound}; +use pumpkin_data::particle::Particle; +use pumpkin_macros::sound; use pumpkin_protocol::{ client::play::{CEntityVelocity, CParticle}, codec::var_int::VarInt, @@ -110,7 +111,7 @@ pub async fn spawn_sweep_particle(attacker_entity: &Entity, world: &World, pos: Vector3::new(0.0, 0.0, 0.0), 0.0, 0, - VarInt(i32::from(particle!("sweep_attack"))), // sweep + VarInt(Particle::SweepAttack as i32), // sweep &[], )) .await;