How to get "normal" spawning behavior after installing Spigot?

My brother in law is running a small server for a few of us to play on. He recently installed Spigot so that we could have a Dynamic Map. However, after he did that, I noticed that spawning behavior (among other things) has changed. I have two questions:

  1. Why does Spigot default to changing spawning behavior? Why not leave it vanilla and have the option to change?

  2. What are the best settings in the bukkit.yml file that will most closely mimic vanilla spawning? He and I have worked on it, and we've gotten hostile spawns close to normal - they're still a bit high, but better than before when they were maxing out at about 30. Passive mobs, however, are spawning in huge numbers compared to normal - I feel like I'm playing Beta where you can spawn passives just by lighting up grass at night!


Solution 1:

The first thing to remember is that Spigot's entire reason for existence is to increase the normal server performance. With this being the main intent server managers would have when installing Spigot the default settings are set to a base "improved" performance level.

To bring your server back to "vanilla like" mob spawning you need to adjust two files.

  1. In your spigot.yml file (in your server root directory) you should check to ensure that the mob-spawn-range is set to 4 (chunks).

    mob-spawn-range: 4

    You can disable experience orb and item grouping by setting the merge-radius to zero.

    merge-radius: exp: 0 item: 0

    At the bottom of this file you can adjust most of these settings on a per world basis. If you want all worlds to use the same setting you can just remove the entire separate world groupings and just leave the default grouping.

  2. In your bukkit.yml file (in your server root directory) you need to ensure that the spawn-limits for each type are set as follows:

    spawn-limits: monsters: 70 animals: 10 ambient: 15 water-animals: 5

    Also within this file you will want to check your ticks-per setting to make sure it is set to 1 for hostiles and 400 for animals (all others).

    ticks-per: animal-spawns: 400 monster-spawns: 1

Solution 2:

Johonn, that number is a variable used in the formula to decide how many mobs can spawn.

The formula is:

value * chunk_count / 256.

  • value is the spawn limit number from the bukkit.yml
  • chunk_count is the number of chunks currently loaded across all worlds

Another piece of information to know is that, by default on a SMP server, there is a 10 x 10 chunk square loaded around each player (you can modify this by changing the view distance in the spigot.yml or, if you're not running spigot, in the server.properties file).

So, with all of this in mind:
If you're alone on the server and in The End (If you're in the Overworld, spawn chunks would also be loaded but they're not since you're in The End.) that means there are 100 chunks loaded. So, plug that in to the formula along with the 70 from the bukkit.yml file and you get:

70 * 100 / 256

which equals, drum roll please....

27.34375

That number look familiar? Bump your spawn limit up to about 250 and you'll get ~70 mobs all by your lonesome. :)

Edit: One last edit, as I was playing around with this on my own Spigot server. Given the case of an Enderman farm in The End, you can also increase gains by increasing the view distance for the server. Instead of 10, you can make it 12, or even max it at 15. This has pretty significant gains on spawn count for minimal impact considering you're in The End where there's basically nothing to render. You will be able to see back to the main island, but only faintly and it's still too far away for mobs to spawn.

Considering a monster limit of 70 and a view distance of 10 will get you ~27 Endermen, changing the view distance to 12 will get you 70 * 144 / 256, or ~39 Endermen. Maxing the view distance at 15 will get you 70 * 225 / 256, or ~61 Endermen.

Of course, if you have a lot of people on your server, this can significantly drag down performance because of all the chunk loading it has to do (unless everyone is close together and it can load the same chunks for everyone).