parse Sounds into enum at compile time
This commit is contained in:
parent
c711d1511c
commit
45a591b27b
@ -9,3 +9,7 @@ pub mod screen {
|
|||||||
pub mod particle {
|
pub mod particle {
|
||||||
include!(concat!(env!("OUT_DIR"), "/particle.rs"));
|
include!(concat!(env!("OUT_DIR"), "/particle.rs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod sound {
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/sound.rs"));
|
||||||
|
}
|
||||||
|
|||||||
@ -67,12 +67,6 @@ pub fn pumpkin_block(input: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
gen.into()
|
gen.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
mod sound;
|
|
||||||
#[proc_macro]
|
|
||||||
pub fn sound(item: TokenStream) -> TokenStream {
|
|
||||||
sound::sound_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 SOUNDS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
|
||||||
serde_json::from_str::<Vec<String>>(include_str!("../../assets/sounds.json"))
|
|
||||||
.expect("Could not parse sounds.json registry.")
|
|
||||||
.into_iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(i, s)| (s, i as u16))
|
|
||||||
.collect()
|
|
||||||
});
|
|
||||||
|
|
||||||
pub(crate) fn sound_impl(item: TokenStream) -> TokenStream {
|
|
||||||
let input_string = item.to_string();
|
|
||||||
let sound_name = input_string.trim_matches('"');
|
|
||||||
|
|
||||||
let id = *SOUNDS.get(sound_name).expect("Invalid sound");
|
|
||||||
quote! { #id }.into()
|
|
||||||
}
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use pumpkin_data::screen::WindowType;
|
use pumpkin_data::{screen::WindowType, sound::Sound};
|
||||||
use pumpkin_inventory::{Chest, OpenContainer};
|
use pumpkin_inventory::{Chest, OpenContainer};
|
||||||
use pumpkin_macros::{pumpkin_block, sound};
|
use pumpkin_macros::pumpkin_block;
|
||||||
use pumpkin_protocol::{client::play::CBlockAction, codec::var_int::VarInt};
|
use pumpkin_protocol::{client::play::CBlockAction, codec::var_int::VarInt};
|
||||||
use pumpkin_util::math::position::WorldPosition;
|
use pumpkin_util::math::position::WorldPosition;
|
||||||
use pumpkin_world::{
|
use pumpkin_world::{
|
||||||
@ -114,12 +114,12 @@ impl ChestBlock {
|
|||||||
if state == ChestState::IsClosed && num_players == 0 {
|
if state == ChestState::IsClosed && num_players == 0 {
|
||||||
player
|
player
|
||||||
.world()
|
.world()
|
||||||
.play_block_sound(sound!("block.chest.close"), location)
|
.play_block_sound(Sound::BlockChestClose as u16, location)
|
||||||
.await;
|
.await;
|
||||||
} else if state == ChestState::IsOpened && num_players == 1 {
|
} else if state == ChestState::IsOpened && num_players == 1 {
|
||||||
player
|
player
|
||||||
.world()
|
.world()
|
||||||
.play_block_sound(sound!("block.chest.open"), location)
|
.play_block_sound(Sound::BlockChestOpen as u16, location)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,9 +9,9 @@ use std::{
|
|||||||
|
|
||||||
use crossbeam::atomic::AtomicCell;
|
use crossbeam::atomic::AtomicCell;
|
||||||
use pumpkin_config::{ADVANCED_CONFIG, BASIC_CONFIG};
|
use pumpkin_config::{ADVANCED_CONFIG, BASIC_CONFIG};
|
||||||
|
use pumpkin_data::sound::Sound;
|
||||||
use pumpkin_entity::{entity_type::EntityType, EntityId};
|
use pumpkin_entity::{entity_type::EntityType, EntityId};
|
||||||
use pumpkin_inventory::player::PlayerInventory;
|
use pumpkin_inventory::player::PlayerInventory;
|
||||||
use pumpkin_macros::sound;
|
|
||||||
use pumpkin_protocol::server::play::{
|
use pumpkin_protocol::server::play::{
|
||||||
SCloseContainer, SCookieResponse as SPCookieResponse, SPlayPingRequest, SPlayerLoaded,
|
SCloseContainer, SCookieResponse as SPCookieResponse, SPlayPingRequest, SPlayerLoaded,
|
||||||
};
|
};
|
||||||
@ -317,7 +317,7 @@ impl Player {
|
|||||||
{
|
{
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("entity.player.attack.nodamage"),
|
Sound::EntityPlayerAttackNodamage as u16,
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
&pos,
|
&pos,
|
||||||
)
|
)
|
||||||
@ -326,7 +326,7 @@ impl Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
world
|
world
|
||||||
.play_sound(sound!("entity.player.hurt"), SoundCategory::Players, &pos)
|
.play_sound(Sound::EntityPlayerHurt as u16, SoundCategory::Players, &pos)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let attack_type = AttackType::new(self, attack_cooldown_progress as f32).await;
|
let attack_type = AttackType::new(self, attack_cooldown_progress as f32).await;
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
|
|
||||||
use pumpkin_data::particle::Particle;
|
use pumpkin_data::{particle::Particle, sound::Sound};
|
||||||
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,
|
||||||
@ -122,7 +121,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Knockback => {
|
AttackType::Knockback => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("entity.player.attack.knockback"),
|
Sound::EntityPlayerAttackKnockback as u16,
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -131,7 +130,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Critical => {
|
AttackType::Critical => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("entity.player.attack.crit"),
|
Sound::EntityPlayerAttackCrit as u16,
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -140,7 +139,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Sweeping => {
|
AttackType::Sweeping => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("entity.player.attack.sweep"),
|
Sound::EntityPlayerAttackSweep as u16,
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -149,7 +148,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Strong => {
|
AttackType::Strong => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("entity.player.attack.strong"),
|
Sound::EntityPlayerAttackStrong as u16,
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
@ -158,7 +157,7 @@ pub async fn player_attack_sound(pos: &Vector3<f64>, world: &World, attack_type:
|
|||||||
AttackType::Weak => {
|
AttackType::Weak => {
|
||||||
world
|
world
|
||||||
.play_sound(
|
.play_sound(
|
||||||
sound!("entity.player.attack.weak"),
|
Sound::EntityPlayerAttackWeak as u16,
|
||||||
SoundCategory::Players,
|
SoundCategory::Players,
|
||||||
pos,
|
pos,
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user