feat: add level particles event

This commit is contained in:
Ryan 2025-03-01 15:54:57 -05:00
parent cbdca4b7c1
commit 89091a3fd5
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3
3 changed files with 135 additions and 7 deletions

View File

@ -2,7 +2,8 @@ use crate::{
State, State,
commands::CommandSource, commands::CommandSource,
http::serve, http::serve,
lua::{self, player::Player}, lua::{self, player::Player, vec3::Vec3},
particle,
}; };
use azalea::{prelude::*, protocol::packets::game::ClientboundGamePacket}; use azalea::{prelude::*, protocol::packets::game::ClientboundGamePacket};
use hyper::{server::conn::http1, service::service_fn}; use hyper::{server::conn::http1, service::service_fn};
@ -69,12 +70,6 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
call_listeners(&state, "update_player", Player::from(player_info)).await; call_listeners(&state, "update_player", Player::from(player_info)).await;
} }
Event::Packet(packet) => match packet.as_ref() { Event::Packet(packet) => match packet.as_ref() {
ClientboundGamePacket::SetPassengers(packet) => {
let table = state.lua.create_table()?;
table.set("vehicle", packet.vehicle)?;
table.set("passengers", &*packet.passengers)?;
call_listeners(&state, "set_passengers", table).await;
}
ClientboundGamePacket::SetHealth(packet) => { ClientboundGamePacket::SetHealth(packet) => {
let table = state.lua.create_table()?; let table = state.lua.create_table()?;
table.set("food", packet.food)?; table.set("food", packet.food)?;
@ -82,6 +77,19 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
table.set("saturation", packet.saturation)?; table.set("saturation", packet.saturation)?;
call_listeners(&state, "set_health", table).await; call_listeners(&state, "set_health", table).await;
} }
ClientboundGamePacket::SetPassengers(packet) => {
let table = state.lua.create_table()?;
table.set("vehicle", packet.vehicle)?;
table.set("passengers", &*packet.passengers)?;
call_listeners(&state, "set_passengers", table).await;
}
ClientboundGamePacket::LevelParticles(packet) => {
let table = state.lua.create_table()?;
table.set("position", Vec3::from(packet.pos))?;
table.set("count", packet.count)?;
table.set("kind", particle::to_kind(&packet.particle) as u8)?;
call_listeners(&state, "level_particles", table).await;
}
_ => (), _ => (),
}, },
Event::Init => { Event::Init => {

View File

@ -5,6 +5,7 @@ mod commands;
mod events; mod events;
mod http; mod http;
mod lua; mod lua;
mod particle;
use azalea::{ use azalea::{
DefaultBotPlugins, DefaultPlugins, brigadier::prelude::CommandDispatcher, prelude::*, DefaultBotPlugins, DefaultPlugins, brigadier::prelude::CommandDispatcher, prelude::*,

119
src/particle.rs Normal file
View File

@ -0,0 +1,119 @@
use azalea::{entity::particle::Particle, registry::ParticleKind};
#[allow(clippy::too_many_lines)]
pub fn to_kind(particle: &Particle) -> ParticleKind {
match particle {
Particle::AngryVillager => ParticleKind::AngryVillager,
Particle::Block(_) => ParticleKind::Block,
Particle::BlockMarker(_) => ParticleKind::BlockMarker,
Particle::Bubble => ParticleKind::Bubble,
Particle::Cloud => ParticleKind::Cloud,
Particle::Crit => ParticleKind::Crit,
Particle::DamageIndicator => ParticleKind::DamageIndicator,
Particle::DragonBreath => ParticleKind::DragonBreath,
Particle::DrippingLava => ParticleKind::DrippingLava,
Particle::FallingLava => ParticleKind::FallingLava,
Particle::LandingLava => ParticleKind::LandingLava,
Particle::DrippingWater => ParticleKind::DrippingWater,
Particle::FallingWater => ParticleKind::FallingWater,
Particle::Dust(_) => ParticleKind::Dust,
Particle::DustColorTransition(_) => ParticleKind::DustColorTransition,
Particle::Effect => ParticleKind::Effect,
Particle::ElderGuardian => ParticleKind::ElderGuardian,
Particle::EnchantedHit => ParticleKind::EnchantedHit,
Particle::Enchant => ParticleKind::Enchant,
Particle::EndRod => ParticleKind::EndRod,
Particle::EntityEffect(_) => ParticleKind::EntityEffect,
Particle::ExplosionEmitter => ParticleKind::ExplosionEmitter,
Particle::Explosion => ParticleKind::Explosion,
Particle::Gust => ParticleKind::Gust,
Particle::SonicBoom => ParticleKind::SonicBoom,
Particle::FallingDust(_) => ParticleKind::FallingDust,
Particle::Firework => ParticleKind::Firework,
Particle::Fishing => ParticleKind::Fishing,
Particle::Flame => ParticleKind::Flame,
Particle::CherryLeaves => ParticleKind::CherryLeaves,
Particle::PaleOakLeaves => ParticleKind::PaleOakLeaves,
Particle::SculkSoul => ParticleKind::SculkSoul,
Particle::SculkCharge(_) => ParticleKind::SculkCharge,
Particle::SculkChargePop => ParticleKind::SculkChargePop,
Particle::SoulFireFlame => ParticleKind::SoulFireFlame,
Particle::Soul => ParticleKind::Soul,
Particle::Flash => ParticleKind::Flash,
Particle::HappyVillager => ParticleKind::HappyVillager,
Particle::Composter => ParticleKind::Composter,
Particle::Heart => ParticleKind::Heart,
Particle::InstantEffect => ParticleKind::InstantEffect,
Particle::Item(_) => ParticleKind::Item,
Particle::Vibration(_) => ParticleKind::Vibration,
Particle::ItemSlime => ParticleKind::ItemSlime,
Particle::ItemSnowball => ParticleKind::ItemSnowball,
Particle::LargeSmoke => ParticleKind::LargeSmoke,
Particle::Lava => ParticleKind::Lava,
Particle::Mycelium => ParticleKind::Mycelium,
Particle::Note => ParticleKind::Note,
Particle::Poof => ParticleKind::Poof,
Particle::Portal => ParticleKind::Portal,
Particle::Rain => ParticleKind::Rain,
Particle::Smoke => ParticleKind::Smoke,
Particle::WhiteSmoke => ParticleKind::WhiteSmoke,
Particle::Sneeze => ParticleKind::Sneeze,
Particle::Spit => ParticleKind::Spit,
Particle::SquidInk => ParticleKind::SquidInk,
Particle::SweepAttack => ParticleKind::SweepAttack,
Particle::TotemOfUndying => ParticleKind::TotemOfUndying,
Particle::Underwater => ParticleKind::Underwater,
Particle::Splash => ParticleKind::Splash,
Particle::Witch => ParticleKind::Witch,
Particle::BubblePop => ParticleKind::BubblePop,
Particle::CurrentDown => ParticleKind::CurrentDown,
Particle::BubbleColumnUp => ParticleKind::BubbleColumnUp,
Particle::Nautilus => ParticleKind::Nautilus,
Particle::Dolphin => ParticleKind::Dolphin,
Particle::CampfireCosySmoke => ParticleKind::CampfireCosySmoke,
Particle::CampfireSignalSmoke => ParticleKind::CampfireSignalSmoke,
Particle::DrippingHoney => ParticleKind::DrippingHoney,
Particle::FallingHoney => ParticleKind::FallingHoney,
Particle::LandingHoney => ParticleKind::LandingHoney,
Particle::FallingNectar => ParticleKind::FallingNectar,
Particle::FallingSporeBlossom => ParticleKind::FallingSporeBlossom,
Particle::Ash => ParticleKind::Ash,
Particle::CrimsonSpore => ParticleKind::CrimsonSpore,
Particle::WarpedSpore => ParticleKind::WarpedSpore,
Particle::SporeBlossomAir => ParticleKind::SporeBlossomAir,
Particle::DrippingObsidianTear => ParticleKind::DrippingObsidianTear,
Particle::FallingObsidianTear => ParticleKind::FallingObsidianTear,
Particle::LandingObsidianTear => ParticleKind::LandingObsidianTear,
Particle::ReversePortal => ParticleKind::ReversePortal,
Particle::WhiteAsh => ParticleKind::WhiteAsh,
Particle::SmallFlame => ParticleKind::SmallFlame,
Particle::Snowflake => ParticleKind::Snowflake,
Particle::DrippingDripstoneLava => ParticleKind::DrippingDripstoneLava,
Particle::FallingDripstoneLava => ParticleKind::FallingDripstoneLava,
Particle::DrippingDripstoneWater => ParticleKind::DrippingDripstoneWater,
Particle::FallingDripstoneWater => ParticleKind::FallingDripstoneWater,
Particle::GlowSquidInk => ParticleKind::GlowSquidInk,
Particle::Glow => ParticleKind::Glow,
Particle::WaxOn => ParticleKind::WaxOn,
Particle::WaxOff => ParticleKind::WaxOff,
Particle::ElectricSpark => ParticleKind::ElectricSpark,
Particle::Scrape => ParticleKind::Scrape,
Particle::Shriek(_) => ParticleKind::Shriek,
Particle::EggCrack => ParticleKind::EggCrack,
Particle::DustPlume => ParticleKind::DustPlume,
Particle::SmallGust => ParticleKind::SmallGust,
Particle::GustEmitterLarge => ParticleKind::GustEmitterLarge,
Particle::GustEmitterSmall => ParticleKind::GustEmitterSmall,
Particle::Infested => ParticleKind::Infested,
Particle::ItemCobweb => ParticleKind::ItemCobweb,
Particle::TrialSpawnerDetection => ParticleKind::TrialSpawnerDetection,
Particle::TrialSpawnerDetectionOminous => ParticleKind::TrialSpawnerDetectionOminous,
Particle::VaultConnection => ParticleKind::VaultConnection,
Particle::DustPillar => ParticleKind::DustPillar,
Particle::OminousSpawning => ParticleKind::OminousSpawning,
Particle::RaidOmen => ParticleKind::RaidOmen,
Particle::TrialOmen => ParticleKind::TrialOmen,
Particle::Trail => ParticleKind::Trail,
Particle::BlockCrumble => ParticleKind::BlockCrumble,
}
}