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