diff --git a/src/events.rs b/src/events.rs index f37da2b..3ae3e27 100644 --- a/src/events.rs +++ b/src/events.rs @@ -2,7 +2,8 @@ use crate::{ State, commands::CommandSource, http::serve, - lua::{self, player::Player}, + lua::{self, player::Player, vec3::Vec3}, + particle, }; use azalea::{prelude::*, protocol::packets::game::ClientboundGamePacket}; 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; } 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) => { let table = state.lua.create_table()?; 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)?; 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 => { diff --git a/src/main.rs b/src/main.rs index 9103cf5..b763935 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod commands; mod events; mod http; mod lua; +mod particle; use azalea::{ DefaultBotPlugins, DefaultPlugins, brigadier::prelude::CommandDispatcher, prelude::*, diff --git a/src/particle.rs b/src/particle.rs new file mode 100644 index 0000000..996129e --- /dev/null +++ b/src/particle.rs @@ -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, + } +}