parse Particle into enum at compile time
This commit is contained in:
parent
1208e67f36
commit
c711d1511c
@ -5,3 +5,7 @@ pub mod packet {
|
|||||||
pub mod screen {
|
pub mod screen {
|
||||||
include!(concat!(env!("OUT_DIR"), "/screen.rs"));
|
include!(concat!(env!("OUT_DIR"), "/screen.rs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod particle {
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/particle.rs"));
|
||||||
|
}
|
||||||
|
|||||||
@ -73,12 +73,6 @@ pub fn sound(item: TokenStream) -> TokenStream {
|
|||||||
sound::sound_impl(item)
|
sound::sound_impl(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
mod particle;
|
|
||||||
#[proc_macro]
|
|
||||||
pub fn particle(item: TokenStream) -> TokenStream {
|
|
||||||
particle::particle_impl(item)
|
|
||||||
}
|
|
||||||
|
|
||||||
mod block_state;
|
mod block_state;
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn block_state(item: TokenStream) -> TokenStream {
|
pub fn block_state(item: TokenStream) -> TokenStream {
|
||||||
|
|||||||
@ -1,21 +0,0 @@
|
|||||||
use std::{collections::HashMap, sync::LazyLock};
|
|
||||||
|
|
||||||
use proc_macro::TokenStream;
|
|
||||||
use quote::quote;
|
|
||||||
|
|
||||||
static PARTICLES: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
|
||||||
serde_json::from_str::<Vec<String>>(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()
|
|
||||||
}
|
|
||||||
@ -1,6 +1,7 @@
|
|||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
|
|
||||||
use pumpkin_macros::{particle, sound};
|
use pumpkin_data::particle::Particle;
|
||||||
|
use pumpkin_macros::sound;
|
||||||
use pumpkin_protocol::{
|
use pumpkin_protocol::{
|
||||||
client::play::{CEntityVelocity, CParticle},
|
client::play::{CEntityVelocity, CParticle},
|
||||||
codec::var_int::VarInt,
|
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),
|
Vector3::new(0.0, 0.0, 0.0),
|
||||||
0.0,
|
0.0,
|
||||||
0,
|
0,
|
||||||
VarInt(i32::from(particle!("sweep_attack"))), // sweep
|
VarInt(Particle::SweepAttack as i32), // sweep
|
||||||
&[],
|
&[],
|
||||||
))
|
))
|
||||||
.await;
|
.await;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user