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