As of 26.3 snapshot 4, mob spawning now directly uses “noise biome” [gets the biome from the quart that the block is in using BiomeManager::getNoiseBiomeAtPosition] instead of the “actual biome” [running through theBiomeManager::getBiome that performs and offset and then compares the fiddled distance between nearby quarts to get the Biome]. Actual biome is also what is displayed in debug when you walk over the position.
This change introduces discrepancies between the actual biome and the mob spawning biome. Previously, mob spawn entry selection and the check for whether the current position contains the spawn entry uses the actual biome. Now both checks directly use the noise biome. This discrepancies is most noticeable at biome borders where the actual biome can differ the noise biome. As result of the different biome being picked, different spawn settings are used resulting in mobs spawning in biomes they normally do not and vice versa.
The included images have concrete blocks inside a Deep Dark biome along a biome border with a Stony Shore. The image where there are no spawns was taken in 26.2, the image where mobs spawn was taken in 26.3 snapshot 4. F3 Debug confirms that the area above the concrete are still in a Deep Dark biome.
Proposed Fix:
Revert back to the previous behavior - spawn entries check use the actual biome and spawn charge uses the noise biome. [Spawn charge calculation both when running NaturalSpawner::createState and actually spawning already directly used the noise biome]
WARNING: Even if Mojang intends to have synchronized spawn charge and spawn settings, do not use the actual biome for spawn charge checks. Doing so will cause NaturalSpawner::createState - which runs every game tick - to run the actual biome RNG for every non-persistent non-MISC category mob in the dimension which will likely cause a significant performance regression at high mob counts compared to 26.3 snapshot 3 and before.
Thank you for helping us improve Minecraft! We saved your files: