1use azalea_block::BlockState;
2use azalea_buf::AzBuf;
3use azalea_core::{color::RgbColor, entity_id::MinecraftEntityId, position::BlockPos};
4use azalea_inventory::ItemStack;
5use azalea_registry::builtin::ParticleKind;
6
7#[cfg_attr(feature = "bevy_ecs", derive(bevy_ecs::component::Component))]
12#[derive(AzBuf, Clone, Debug, PartialEq)]
13pub enum Particle {
14 AngryVillager,
15 Block(BlockParticle),
16 BlockMarker(BlockParticle),
17 Bubble,
18 Cloud,
19 CopperFireFlame,
20 Crit,
21 DamageIndicator,
22 DragonBreath,
23 DrippingLava,
24 FallingLava,
25 LandingLava,
26 DrippingWater,
27 FallingWater,
28 Dust(DustParticle),
29 DustColorTransition(DustColorTransitionParticle),
30 Effect,
31 ElderGuardian,
32 EnchantedHit,
33 Enchant,
34 EndRod,
35 EntityEffect(ColorParticle),
36 ExplosionEmitter,
37 Explosion,
38 Gust,
39 SmallGust,
40 GustEmitterLarge,
41 GustEmitterSmall,
42 SonicBoom,
43 FallingDust(BlockParticle),
44 Firework,
45 Fishing,
46 Flame,
47 Infested,
48 CherryLeaves,
49 PaleOakLeaves,
50 TintedLeaves,
51 SculkSoul,
52 SculkCharge(SculkChargeParticle),
53 SculkChargePop,
54 SoulFireFlame,
55 Soul,
56 Flash,
57 HappyVillager,
58 Composter,
59 Heart,
60 InstantEffect,
61 Item(ItemParticle),
62 Vibration(Box<VibrationParticle>),
63 Trail,
64 ItemSlime,
65 ItemCobweb,
66 ItemSnowball,
67 LargeSmoke,
68 Lava,
69 Mycelium,
70 Note,
71 Poof,
72 Portal,
73 Rain,
74 Smoke,
75 WhiteSmoke,
76 Sneeze,
77 Spit,
78 SquidInk,
79 SweepAttack,
80 TotemOfUndying,
81 Underwater,
82 Splash,
83 Witch,
84 BubblePop,
85 CurrentDown,
86 BubbleColumnUp,
87 Nautilus,
88 Dolphin,
89 CampfireCosySmoke,
90 CampfireSignalSmoke,
91 DrippingHoney,
92 FallingHoney,
93 LandingHoney,
94 FallingNectar,
95 FallingSporeBlossom,
96 Ash,
97 CrimsonSpore,
98 WarpedSpore,
99 SporeBlossomAir,
100 DrippingObsidianTear,
101 FallingObsidianTear,
102 LandingObsidianTear,
103 ReversePortal,
104 WhiteAsh,
105 SmallFlame,
106 Snowflake,
107 DrippingDripstoneLava,
108 FallingDripstoneLava,
109 DrippingDripstoneWater,
110 FallingDripstoneWater,
111 GlowSquidInk,
112 Glow,
113 WaxOn,
114 WaxOff,
115 ElectricSpark,
116 Scrape,
117 Shriek(ShriekParticle),
118 EggCrack,
119 DustPlume,
120 TrialSpawnerDetection,
121 TrialSpawnerDetectionOminous,
122 VaultConnection,
123 DustPillar,
124 OminousSpawning,
125 RaidOmen,
126 TrialOmen,
127 BlockCrumble,
128 Firefly,
129}
130
131impl From<ParticleKind> for Particle {
132 fn from(kind: ParticleKind) -> Self {
137 match kind {
140 ParticleKind::AngryVillager => Self::AngryVillager,
141 ParticleKind::Block => Self::Block(BlockParticle::default()),
142 ParticleKind::BlockMarker => Self::BlockMarker(BlockParticle::default()),
143 ParticleKind::Bubble => Self::Bubble,
144 ParticleKind::Cloud => Self::Cloud,
145 ParticleKind::Crit => Self::Crit,
146 ParticleKind::DamageIndicator => Self::DamageIndicator,
147 ParticleKind::DragonBreath => Self::DragonBreath,
148 ParticleKind::DrippingLava => Self::DrippingLava,
149 ParticleKind::FallingLava => Self::FallingLava,
150 ParticleKind::LandingLava => Self::LandingLava,
151 ParticleKind::DrippingWater => Self::DrippingWater,
152 ParticleKind::FallingWater => Self::FallingWater,
153 ParticleKind::Dust => Self::Dust(DustParticle::default()),
154 ParticleKind::DustColorTransition => {
155 Self::DustColorTransition(DustColorTransitionParticle::default())
156 }
157 ParticleKind::Effect => Self::Effect,
158 ParticleKind::ElderGuardian => Self::ElderGuardian,
159 ParticleKind::EnchantedHit => Self::EnchantedHit,
160 ParticleKind::Enchant => Self::Enchant,
161 ParticleKind::EndRod => Self::EndRod,
162 ParticleKind::EntityEffect => Self::EntityEffect(ColorParticle::default()),
163 ParticleKind::ExplosionEmitter => Self::ExplosionEmitter,
164 ParticleKind::Explosion => Self::Explosion,
165 ParticleKind::Gust => Self::Gust,
166 ParticleKind::SonicBoom => Self::SonicBoom,
167 ParticleKind::FallingDust => Self::FallingDust(BlockParticle::default()),
168 ParticleKind::Firework => Self::Firework,
169 ParticleKind::Fishing => Self::Fishing,
170 ParticleKind::Flame => Self::Flame,
171 ParticleKind::CherryLeaves => Self::CherryLeaves,
172 ParticleKind::PaleOakLeaves => Self::PaleOakLeaves,
173 ParticleKind::TintedLeaves => Self::TintedLeaves,
174 ParticleKind::SculkSoul => Self::SculkSoul,
175 ParticleKind::SculkCharge => Self::SculkCharge(SculkChargeParticle::default()),
176 ParticleKind::SculkChargePop => Self::SculkChargePop,
177 ParticleKind::SoulFireFlame => Self::SoulFireFlame,
178 ParticleKind::Soul => Self::Soul,
179 ParticleKind::Flash => Self::Flash,
180 ParticleKind::HappyVillager => Self::HappyVillager,
181 ParticleKind::Composter => Self::Composter,
182 ParticleKind::Heart => Self::Heart,
183 ParticleKind::InstantEffect => Self::InstantEffect,
184 ParticleKind::Item => Self::Item(ItemParticle::default()),
185 ParticleKind::Vibration => Self::Vibration(Default::default()),
186 ParticleKind::ItemSlime => Self::ItemSlime,
187 ParticleKind::ItemSnowball => Self::ItemSnowball,
188 ParticleKind::LargeSmoke => Self::LargeSmoke,
189 ParticleKind::Lava => Self::Lava,
190 ParticleKind::Mycelium => Self::Mycelium,
191 ParticleKind::Note => Self::Note,
192 ParticleKind::Poof => Self::Poof,
193 ParticleKind::Portal => Self::Portal,
194 ParticleKind::Rain => Self::Rain,
195 ParticleKind::Smoke => Self::Smoke,
196 ParticleKind::WhiteSmoke => Self::WhiteSmoke,
197 ParticleKind::Sneeze => Self::Sneeze,
198 ParticleKind::Spit => Self::Spit,
199 ParticleKind::SquidInk => Self::SquidInk,
200 ParticleKind::SweepAttack => Self::SweepAttack,
201 ParticleKind::TotemOfUndying => Self::TotemOfUndying,
202 ParticleKind::Underwater => Self::Underwater,
203 ParticleKind::Splash => Self::Splash,
204 ParticleKind::Witch => Self::Witch,
205 ParticleKind::BubblePop => Self::BubblePop,
206 ParticleKind::CurrentDown => Self::CurrentDown,
207 ParticleKind::BubbleColumnUp => Self::BubbleColumnUp,
208 ParticleKind::Nautilus => Self::Nautilus,
209 ParticleKind::Dolphin => Self::Dolphin,
210 ParticleKind::CampfireCosySmoke => Self::CampfireCosySmoke,
211 ParticleKind::CampfireSignalSmoke => Self::CampfireSignalSmoke,
212 ParticleKind::DrippingHoney => Self::DrippingHoney,
213 ParticleKind::FallingHoney => Self::FallingHoney,
214 ParticleKind::LandingHoney => Self::LandingHoney,
215 ParticleKind::FallingNectar => Self::FallingNectar,
216 ParticleKind::FallingSporeBlossom => Self::FallingSporeBlossom,
217 ParticleKind::Ash => Self::Ash,
218 ParticleKind::CrimsonSpore => Self::CrimsonSpore,
219 ParticleKind::WarpedSpore => Self::WarpedSpore,
220 ParticleKind::SporeBlossomAir => Self::SporeBlossomAir,
221 ParticleKind::DrippingObsidianTear => Self::DrippingObsidianTear,
222 ParticleKind::FallingObsidianTear => Self::FallingObsidianTear,
223 ParticleKind::LandingObsidianTear => Self::LandingObsidianTear,
224 ParticleKind::ReversePortal => Self::ReversePortal,
225 ParticleKind::WhiteAsh => Self::WhiteAsh,
226 ParticleKind::SmallFlame => Self::SmallFlame,
227 ParticleKind::Snowflake => Self::Snowflake,
228 ParticleKind::DrippingDripstoneLava => Self::DrippingDripstoneLava,
229 ParticleKind::FallingDripstoneLava => Self::FallingDripstoneLava,
230 ParticleKind::DrippingDripstoneWater => Self::DrippingDripstoneWater,
231 ParticleKind::FallingDripstoneWater => Self::FallingDripstoneWater,
232 ParticleKind::GlowSquidInk => Self::GlowSquidInk,
233 ParticleKind::Glow => Self::Glow,
234 ParticleKind::WaxOn => Self::WaxOn,
235 ParticleKind::WaxOff => Self::WaxOff,
236 ParticleKind::ElectricSpark => Self::ElectricSpark,
237 ParticleKind::Scrape => Self::Scrape,
238 ParticleKind::Shriek => Self::Shriek(ShriekParticle::default()),
239 ParticleKind::EggCrack => Self::EggCrack,
240 ParticleKind::DustPlume => Self::DustPlume,
241 ParticleKind::SmallGust => Self::SmallGust,
242 ParticleKind::GustEmitterLarge => Self::GustEmitterLarge,
243 ParticleKind::GustEmitterSmall => Self::GustEmitterSmall,
244 ParticleKind::Infested => Self::Infested,
245 ParticleKind::ItemCobweb => Self::ItemCobweb,
246 ParticleKind::TrialSpawnerDetection => Self::TrialSpawnerDetection,
247 ParticleKind::TrialSpawnerDetectionOminous => Self::TrialSpawnerDetectionOminous,
248 ParticleKind::VaultConnection => Self::VaultConnection,
249 ParticleKind::DustPillar => Self::DustPillar,
250 ParticleKind::OminousSpawning => Self::OminousSpawning,
251 ParticleKind::RaidOmen => Self::RaidOmen,
252 ParticleKind::TrialOmen => Self::TrialOmen,
253 ParticleKind::Trail => Self::Trail,
254 ParticleKind::BlockCrumble => Self::BlockCrumble,
255 ParticleKind::Firefly => Self::Firefly,
256 ParticleKind::CopperFireFlame => Self::CopperFireFlame,
257 }
258 }
259}
260
261impl Default for Particle {
262 fn default() -> Self {
263 Self::EntityEffect(ColorParticle::default())
264 }
265}
266
267#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
268pub struct BlockParticle {
269 pub block_state: BlockState,
270}
271#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
272pub struct DustParticle {
273 pub color: RgbColor,
274 pub scale: f32,
276}
277
278#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
279pub struct DustColorTransitionParticle {
280 pub from: RgbColor,
281 pub to: RgbColor,
282 pub scale: f32,
284}
285
286#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
287pub struct ColorParticle {
288 pub color: RgbColor,
289}
290
291#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
292pub struct ItemParticle {
293 pub item: ItemStack,
294}
295
296#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
297pub struct VibrationParticle {
298 pub position: PositionSource,
299 #[var]
300 pub ticks: u32,
301}
302
303#[derive(AzBuf, Clone, Debug, PartialEq)]
304pub enum PositionSource {
305 Block(BlockPos),
306 Entity {
307 #[var]
308 id: MinecraftEntityId,
309 y_offset: f32,
310 },
311}
312impl Default for PositionSource {
313 fn default() -> Self {
314 Self::Block(BlockPos::default())
316 }
317}
318
319#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
320pub struct SculkChargeParticle {
321 pub roll: f32,
322}
323
324#[derive(AzBuf, Clone, Debug, Default, PartialEq)]
325pub struct ShriekParticle {
326 #[var]
327 pub delay: i32, }