Problem
During winter, every skeleton spawn was cancelled and replaced with a stray — including spawns fired by mob spawners (and trial spawners). The same happened in summer, where zombie spawners were converted into husk spawners.
Mob spawners limit their output by counting "similar entities" — entities of
the same EntityType — within their spawn area
(Spawner#getMaxNearbyEntities()). Since the converted skeletons/zombies never
entered the world and the replacement strays/husks are a different type, the
spawner's cap was never reached: it kept spawning on every spawn delay,
producing an unlimited number of strays/husks around any skeleton/zombie
spawner (dungeons, spawner farms, etc.).
Fix
Season conversions now only apply to non-spawner spawns:
WinterEffects— skeletons spawned by a spawner are left as skeletons; natural (and other non-spawner) skeletons are still converted to strays.SummerEffects— zombies spawned by a spawner are left as zombies; natural zombies are still converted to husks.
Spawner detection is defensive and covers all spawner paths in the 26.2 API:
SpawnerSpawnEvent, TrialSpawnerSpawnEvent, and
CreatureSpawnEvent with reason SPAWNER, SPAWNER_EGG, or TRIAL_SPAWNER.
This also matches vanilla behavior, where biome-based mob conversions (e.g. skeletons → strays in snow) only apply to natural spawns, and the behavior documented in the README ("skeletons that spawn naturally").
Other changes
- Spigot API:
26.1.2-R0.1-SNAPSHOT→26.2-R0.1-SNAPSHOT(build.gradle,plugin.ymlapi-version) - PlaceholderAPI (soft dependency):
2.12.2→2.12.3 - Plugin version:
1.4.0→1.4.1
Testing
- Builds cleanly against
spigot-api:26.2(JDK 25). - In-game: 11×11 room, skeleton spawner with
MaxNearbyEntities:6— in winter the spawner now spawns skeletons, stops at 6, refills as they die, and never spawns a stray. Natural/summon skeletonis still converted to a stray. Same verified for summer with a zombie spawner (husks).