From 5bf63499004c64134254dfb38988a664780e9a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=ABl=20Hagestein?= <6616996+Neol3108@users.noreply.github.com> Date: Tue, 25 Aug 2026 01:55:04 +0200 Subject: [PATCH] fix(world): particle spawning (#3043) --- .../loader/wasm/wasm_host/wit/v0_1/world.rs | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/crates/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/world.rs b/crates/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/world.rs index cb1dff667..33638c2ea 100644 --- a/crates/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/world.rs +++ b/crates/pumpkin/src/plugin/loader/wasm/wasm_host/wit/v0_1/world.rs @@ -934,9 +934,10 @@ impl pumpkin::plugin::world::HostWorld for PluginHostState { count: i32, ) -> wasmtime::Result<()> { let world_ref = self.get_world_res(&world)?; - let particle_name = format!("{particle:?}").to_lowercase().replace('_', "-"); - let particle_data = pumpkin_data::particle::Particle::from_name(&particle_name) - .ok_or_else(|| wasmtime::Error::msg(format!("Unknown particle: {particle_name}")))?; + let particle_data = + pumpkin_data::particle::Particle::from_id(particle as u16).ok_or_else(|| { + wasmtime::Error::msg(format!("Unknown particle ID: {}", particle as u16)) + })?; world_ref.provider.spawn_particle( pumpkin_util::math::vector3::Vector3::new(pos.0, pos.1, pos.2), @@ -2256,3 +2257,33 @@ impl pumpkin_world::generation::generator::CustomChunkGenerator for WasmChunkGen chunk.stage = pumpkin_world::chunk_system::StagedChunkEnum::Features; } } + +#[cfg(test)] +mod tests { + use super::pumpkin; + + #[test] + fn wit_particle_ids_match_internal_particle_ids() { + let cases = [ + ( + pumpkin::plugin::particles::Particle::AngryVillager, + pumpkin_data::particle::Particle::AngryVillager, + ), + ( + pumpkin::plugin::particles::Particle::HappyVillager, + pumpkin_data::particle::Particle::HappyVillager, + ), + ( + pumpkin::plugin::particles::Particle::SulfurCubeGoo, + pumpkin_data::particle::Particle::SulfurCubeGoo, + ), + ]; + + for (wit, internal) in cases { + assert_eq!( + pumpkin_data::particle::Particle::from_id(wit as u16), + Some(internal) + ); + } + } +}