Skip to content

Commit

Permalink
Adapt to the new SPELL spawn reason.
Browse files Browse the repository at this point in the history
This new spawn reason was introduced somewhere between 1.18 and 1.18.1,
and unfortunately it is a breaking change, so we have to employ it for
MobArena to properly allow and register vexes (again...), but we also
have to maintain a variation of the old logic so we don't break support
for older server versions.

Fixes #719
  • Loading branch information
garbagemule committed Jul 26, 2022
1 parent 2c0d3e2 commit ec644df
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 7 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
22 changes: 15 additions & 7 deletions src/main/java/com/garbagemule/MobArena/ArenaListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -393,15 +393,23 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
* 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
Expand Down

0 comments on commit ec644df

Please sign in to comment.