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