1use std::{collections::HashSet, sync::LazyLock};
4
5use crate::EntityKind;
6
7pub static AQUATIC: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
8 HashSet::from_iter(vec![
9 EntityKind::Turtle,
10 EntityKind::Axolotl,
11 EntityKind::Guardian,
12 EntityKind::ElderGuardian,
13 EntityKind::Cod,
14 EntityKind::Pufferfish,
15 EntityKind::Salmon,
16 EntityKind::TropicalFish,
17 EntityKind::Dolphin,
18 EntityKind::Squid,
19 EntityKind::GlowSquid,
20 EntityKind::Tadpole,
21 ])
22});
23pub static ARROWS: LazyLock<HashSet<EntityKind>> =
24 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Arrow, EntityKind::SpectralArrow]));
25pub static ARTHROPOD: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
26 HashSet::from_iter(vec![
27 EntityKind::Bee,
28 EntityKind::Endermite,
29 EntityKind::Silverfish,
30 EntityKind::Spider,
31 EntityKind::CaveSpider,
32 ])
33});
34pub static AXOLOTL_ALWAYS_HOSTILES: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
35 HashSet::from_iter(vec![
36 EntityKind::Drowned,
37 EntityKind::Guardian,
38 EntityKind::ElderGuardian,
39 ])
40});
41pub static AXOLOTL_HUNT_TARGETS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
42 HashSet::from_iter(vec![
43 EntityKind::TropicalFish,
44 EntityKind::Pufferfish,
45 EntityKind::Salmon,
46 EntityKind::Cod,
47 EntityKind::Squid,
48 EntityKind::GlowSquid,
49 EntityKind::Tadpole,
50 ])
51});
52pub static BEEHIVE_INHABITORS: LazyLock<HashSet<EntityKind>> =
53 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Bee]));
54pub static BOAT: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
55 HashSet::from_iter(vec![
56 EntityKind::OakBoat,
57 EntityKind::SpruceBoat,
58 EntityKind::BirchBoat,
59 EntityKind::JungleBoat,
60 EntityKind::AcaciaBoat,
61 EntityKind::CherryBoat,
62 EntityKind::DarkOakBoat,
63 EntityKind::PaleOakBoat,
64 EntityKind::MangroveBoat,
65 EntityKind::BambooRaft,
66 ])
67});
68pub static CAN_BREATHE_UNDER_WATER: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
69 HashSet::from_iter(vec![
70 EntityKind::Axolotl,
71 EntityKind::Frog,
72 EntityKind::Guardian,
73 EntityKind::ElderGuardian,
74 EntityKind::Turtle,
75 EntityKind::GlowSquid,
76 EntityKind::Cod,
77 EntityKind::Pufferfish,
78 EntityKind::Salmon,
79 EntityKind::Squid,
80 EntityKind::TropicalFish,
81 EntityKind::Tadpole,
82 EntityKind::ArmorStand,
83 EntityKind::Wither,
84 EntityKind::Phantom,
85 EntityKind::Skeleton,
86 EntityKind::Stray,
87 EntityKind::WitherSkeleton,
88 EntityKind::SkeletonHorse,
89 EntityKind::Bogged,
90 EntityKind::ZombieHorse,
91 EntityKind::Zombie,
92 EntityKind::ZombieVillager,
93 EntityKind::ZombifiedPiglin,
94 EntityKind::Zoglin,
95 EntityKind::Drowned,
96 EntityKind::Husk,
97 ])
98});
99pub static CAN_EQUIP_HARNESS: LazyLock<HashSet<EntityKind>> =
100 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::HappyGhast]));
101pub static CAN_EQUIP_SADDLE: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
102 HashSet::from_iter(vec![
103 EntityKind::Horse,
104 EntityKind::SkeletonHorse,
105 EntityKind::ZombieHorse,
106 EntityKind::Donkey,
107 EntityKind::Mule,
108 EntityKind::Pig,
109 EntityKind::Strider,
110 EntityKind::Camel,
111 ])
112});
113pub static CAN_TURN_IN_BOATS: LazyLock<HashSet<EntityKind>> =
114 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Breeze]));
115pub static CAN_WEAR_HORSE_ARMOR: LazyLock<HashSet<EntityKind>> =
116 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Horse]));
117pub static DEFLECTS_PROJECTILES: LazyLock<HashSet<EntityKind>> =
118 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Breeze]));
119pub static DISMOUNTS_UNDERWATER: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
120 HashSet::from_iter(vec![
121 EntityKind::Camel,
122 EntityKind::Chicken,
123 EntityKind::Donkey,
124 EntityKind::HappyGhast,
125 EntityKind::Horse,
126 EntityKind::Llama,
127 EntityKind::Mule,
128 EntityKind::Pig,
129 EntityKind::Ravager,
130 EntityKind::Spider,
131 EntityKind::Strider,
132 EntityKind::TraderLlama,
133 EntityKind::ZombieHorse,
134 ])
135});
136pub static FALL_DAMAGE_IMMUNE: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
137 HashSet::from_iter(vec![
138 EntityKind::IronGolem,
139 EntityKind::SnowGolem,
140 EntityKind::Shulker,
141 EntityKind::Allay,
142 EntityKind::Bat,
143 EntityKind::Bee,
144 EntityKind::Blaze,
145 EntityKind::Cat,
146 EntityKind::Chicken,
147 EntityKind::Ghast,
148 EntityKind::HappyGhast,
149 EntityKind::Phantom,
150 EntityKind::MagmaCube,
151 EntityKind::Ocelot,
152 EntityKind::Parrot,
153 EntityKind::Wither,
154 EntityKind::Breeze,
155 ])
156});
157pub static FOLLOWABLE_FRIENDLY_MOBS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
158 HashSet::from_iter(vec![
159 EntityKind::Armadillo,
160 EntityKind::Bee,
161 EntityKind::Camel,
162 EntityKind::Cat,
163 EntityKind::Chicken,
164 EntityKind::Cow,
165 EntityKind::Donkey,
166 EntityKind::Fox,
167 EntityKind::Goat,
168 EntityKind::HappyGhast,
169 EntityKind::Horse,
170 EntityKind::SkeletonHorse,
171 EntityKind::Llama,
172 EntityKind::Mule,
173 EntityKind::Ocelot,
174 EntityKind::Panda,
175 EntityKind::Parrot,
176 EntityKind::Pig,
177 EntityKind::PolarBear,
178 EntityKind::Rabbit,
179 EntityKind::Sheep,
180 EntityKind::Sniffer,
181 EntityKind::Strider,
182 EntityKind::Villager,
183 EntityKind::Wolf,
184 ])
185});
186pub static FREEZE_HURTS_EXTRA_TYPES: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
187 HashSet::from_iter(vec![
188 EntityKind::Strider,
189 EntityKind::Blaze,
190 EntityKind::MagmaCube,
191 ])
192});
193pub static FREEZE_IMMUNE_ENTITY_TYPES: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
194 HashSet::from_iter(vec![
195 EntityKind::Stray,
196 EntityKind::PolarBear,
197 EntityKind::SnowGolem,
198 EntityKind::Wither,
199 ])
200});
201pub static FROG_FOOD: LazyLock<HashSet<EntityKind>> =
202 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Slime, EntityKind::MagmaCube]));
203pub static IGNORES_POISON_AND_REGEN: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
204 HashSet::from_iter(vec![
205 EntityKind::Wither,
206 EntityKind::Phantom,
207 EntityKind::Skeleton,
208 EntityKind::Stray,
209 EntityKind::WitherSkeleton,
210 EntityKind::SkeletonHorse,
211 EntityKind::Bogged,
212 EntityKind::ZombieHorse,
213 EntityKind::Zombie,
214 EntityKind::ZombieVillager,
215 EntityKind::ZombifiedPiglin,
216 EntityKind::Zoglin,
217 EntityKind::Drowned,
218 EntityKind::Husk,
219 ])
220});
221pub static ILLAGER: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
222 HashSet::from_iter(vec![
223 EntityKind::Evoker,
224 EntityKind::Illusioner,
225 EntityKind::Pillager,
226 EntityKind::Vindicator,
227 ])
228});
229pub static ILLAGER_FRIENDS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
230 HashSet::from_iter(vec![
231 EntityKind::Evoker,
232 EntityKind::Illusioner,
233 EntityKind::Pillager,
234 EntityKind::Vindicator,
235 ])
236});
237pub static IMMUNE_TO_INFESTED: LazyLock<HashSet<EntityKind>> =
238 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Silverfish]));
239pub static IMMUNE_TO_OOZING: LazyLock<HashSet<EntityKind>> =
240 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Slime]));
241pub static IMPACT_PROJECTILES: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
242 HashSet::from_iter(vec![
243 EntityKind::FireworkRocket,
244 EntityKind::Snowball,
245 EntityKind::Fireball,
246 EntityKind::SmallFireball,
247 EntityKind::Egg,
248 EntityKind::Trident,
249 EntityKind::DragonFireball,
250 EntityKind::WitherSkull,
251 EntityKind::WindCharge,
252 EntityKind::BreezeWindCharge,
253 EntityKind::Arrow,
254 EntityKind::SpectralArrow,
255 ])
256});
257pub static INVERTED_HEALING_AND_HARM: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
258 HashSet::from_iter(vec![
259 EntityKind::Wither,
260 EntityKind::Phantom,
261 EntityKind::Skeleton,
262 EntityKind::Stray,
263 EntityKind::WitherSkeleton,
264 EntityKind::SkeletonHorse,
265 EntityKind::Bogged,
266 EntityKind::ZombieHorse,
267 EntityKind::Zombie,
268 EntityKind::ZombieVillager,
269 EntityKind::ZombifiedPiglin,
270 EntityKind::Zoglin,
271 EntityKind::Drowned,
272 EntityKind::Husk,
273 ])
274});
275pub static NO_ANGER_FROM_WIND_CHARGE: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
276 HashSet::from_iter(vec![
277 EntityKind::Breeze,
278 EntityKind::Skeleton,
279 EntityKind::Bogged,
280 EntityKind::Stray,
281 EntityKind::Zombie,
282 EntityKind::Husk,
283 EntityKind::Spider,
284 EntityKind::CaveSpider,
285 EntityKind::Slime,
286 ])
287});
288pub static NON_CONTROLLING_RIDER: LazyLock<HashSet<EntityKind>> =
289 LazyLock::new(|| HashSet::from_iter(vec![EntityKind::Slime, EntityKind::MagmaCube]));
290pub static NOT_SCARY_FOR_PUFFERFISH: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
291 HashSet::from_iter(vec![
292 EntityKind::Turtle,
293 EntityKind::Guardian,
294 EntityKind::ElderGuardian,
295 EntityKind::Cod,
296 EntityKind::Pufferfish,
297 EntityKind::Salmon,
298 EntityKind::TropicalFish,
299 EntityKind::Dolphin,
300 EntityKind::Squid,
301 EntityKind::GlowSquid,
302 EntityKind::Tadpole,
303 ])
304});
305pub static POWDER_SNOW_WALKABLE_MOBS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
306 HashSet::from_iter(vec![
307 EntityKind::Rabbit,
308 EntityKind::Endermite,
309 EntityKind::Silverfish,
310 EntityKind::Fox,
311 ])
312});
313pub static RAIDERS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
314 HashSet::from_iter(vec![
315 EntityKind::Evoker,
316 EntityKind::Pillager,
317 EntityKind::Ravager,
318 EntityKind::Vindicator,
319 EntityKind::Illusioner,
320 EntityKind::Witch,
321 ])
322});
323pub static REDIRECTABLE_PROJECTILE: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
324 HashSet::from_iter(vec![
325 EntityKind::Fireball,
326 EntityKind::WindCharge,
327 EntityKind::BreezeWindCharge,
328 ])
329});
330pub static SENSITIVE_TO_BANE_OF_ARTHROPODS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
331 HashSet::from_iter(vec![
332 EntityKind::Bee,
333 EntityKind::Endermite,
334 EntityKind::Silverfish,
335 EntityKind::Spider,
336 EntityKind::CaveSpider,
337 ])
338});
339pub static SENSITIVE_TO_IMPALING: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
340 HashSet::from_iter(vec![
341 EntityKind::Turtle,
342 EntityKind::Axolotl,
343 EntityKind::Guardian,
344 EntityKind::ElderGuardian,
345 EntityKind::Cod,
346 EntityKind::Pufferfish,
347 EntityKind::Salmon,
348 EntityKind::TropicalFish,
349 EntityKind::Dolphin,
350 EntityKind::Squid,
351 EntityKind::GlowSquid,
352 EntityKind::Tadpole,
353 ])
354});
355pub static SENSITIVE_TO_SMITE: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
356 HashSet::from_iter(vec![
357 EntityKind::Wither,
358 EntityKind::Phantom,
359 EntityKind::Skeleton,
360 EntityKind::Stray,
361 EntityKind::WitherSkeleton,
362 EntityKind::SkeletonHorse,
363 EntityKind::Bogged,
364 EntityKind::ZombieHorse,
365 EntityKind::Zombie,
366 EntityKind::ZombieVillager,
367 EntityKind::ZombifiedPiglin,
368 EntityKind::Zoglin,
369 EntityKind::Drowned,
370 EntityKind::Husk,
371 ])
372});
373pub static SKELETONS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
374 HashSet::from_iter(vec![
375 EntityKind::Skeleton,
376 EntityKind::Stray,
377 EntityKind::WitherSkeleton,
378 EntityKind::SkeletonHorse,
379 EntityKind::Bogged,
380 ])
381});
382pub static UNDEAD: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
383 HashSet::from_iter(vec![
384 EntityKind::Wither,
385 EntityKind::Phantom,
386 EntityKind::Skeleton,
387 EntityKind::Stray,
388 EntityKind::WitherSkeleton,
389 EntityKind::SkeletonHorse,
390 EntityKind::Bogged,
391 EntityKind::ZombieHorse,
392 EntityKind::Zombie,
393 EntityKind::ZombieVillager,
394 EntityKind::ZombifiedPiglin,
395 EntityKind::Zoglin,
396 EntityKind::Drowned,
397 EntityKind::Husk,
398 ])
399});
400pub static WITHER_FRIENDS: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
401 HashSet::from_iter(vec![
402 EntityKind::Wither,
403 EntityKind::Phantom,
404 EntityKind::Skeleton,
405 EntityKind::Stray,
406 EntityKind::WitherSkeleton,
407 EntityKind::SkeletonHorse,
408 EntityKind::Bogged,
409 EntityKind::ZombieHorse,
410 EntityKind::Zombie,
411 EntityKind::ZombieVillager,
412 EntityKind::ZombifiedPiglin,
413 EntityKind::Zoglin,
414 EntityKind::Drowned,
415 EntityKind::Husk,
416 ])
417});
418pub static ZOMBIES: LazyLock<HashSet<EntityKind>> = LazyLock::new(|| {
419 HashSet::from_iter(vec![
420 EntityKind::ZombieHorse,
421 EntityKind::Zombie,
422 EntityKind::ZombieVillager,
423 EntityKind::ZombifiedPiglin,
424 EntityKind::Zoglin,
425 EntityKind::Drowned,
426 EntityKind::Husk,
427 ])
428});