diff --git a/changelog.md b/changelog.md index 04cdd40..8aeb10c 100644 --- a/changelog.md +++ b/changelog.md @@ -31,6 +31,7 @@ These changes will (most likely) be included in the next version. - Pillagers and vindicators no longer spawn without their much-needed weapons. - Piglins, piglin brutes, and hoglins no longer zombify. This fixes a bug where the mobs would despawn due to the zombification process. - Zombies, husks, drowned, zombie villagers, piglins, hoglins, and zoglins without the `baby` prefix are now forced into adulthood to prevent them from occasionally spawning as babies. +- Evokers are once again capable of spawning vexes on 1.18.1+. - Reward groups with `nothing` in them no longer cause errors when earned/granted. - The title-based announcer and the title-based boss health bar have been fixed to work with the breaking change to the Title API in Spigot 1.17. - Arena Signs now correctly update for arenas that don't have `kebab-case` names in the config-file. diff --git a/src/main/java/com/garbagemule/MobArena/ArenaListener.java b/src/main/java/com/garbagemule/MobArena/ArenaListener.java index 6c7efce..3092846 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaListener.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaListener.java @@ -393,15 +393,23 @@ public class ArenaListener * reason means MobArena didn't trigger the event. However, we * make an exception for certain mobs that spawn as results of * other entities spawning them, e.g. when Evokers summon Vexes. + * Note that the "spell" reason was introduced somewhere between + * 1.18 and 1.18.1, so "default" is kept only for compatibility + * with older server versions. Also note the use of `switch` as + * a workaround for the NoSuchFieldError that would occur if we + * used a simple equality check. */ - if (reason == SpawnReason.DEFAULT) { - if (event.getEntityType() == EntityType.VEX) { - event.setCancelled(false); - monsters.addMonster(event.getEntity()); - } else { - event.setCancelled(true); + switch (reason) { + case DEFAULT: + case SPELL: { + if (event.getEntityType() == EntityType.VEX) { + event.setCancelled(false); + monsters.addMonster(event.getEntity()); + } else { + event.setCancelled(true); + } + return; } - return; } // If not custom, we probably don't want it, so get rid of it