On SkyBlock I've pretty much zeroed the spawn level for both friendly and non friendly mobs, due to the absolutely huge amount of mobs in the world that there is already.
As an example, when I clear all mobs, I get a print out of how many there are in the world, the result is a steady 4 to 6 thousand mobs always on it. Now, even if every single player on the server had 20+ mobs, that still wouldn't add up, so theres definitely an abuse in how many mobs players buy and put on their islands, therefore I have almost cut to zero the amount of mobs that naturally occur.
WARNING: Wall of Text and Technical Jargon Ahead
As we all know, mobs and entities in general make a ton of lag for large servers. Due to Skyblock's spreading players out by island, Skyblock is an INCREDIBLY resource-hungry kind of server. Not only do players have to provide themselves with all their own mobs and animals, but Skyblock maps are generally very large, meaning a lot of chunks are loaded at the same time. Unfortunately, there's nothing to be done about chunks causing lag. However, there are several things that can be done to alleviate entity-related lag.
Clearlag: This is a sort of plugin that deletes entities like paintings, item frames, exp orbs, and dropped items on a timely basis. This is a common way to deal with lag; it is also a terrible way. Not only does this make item frames and paintings impossible to enjoy, but it also results in players losing valuable items with a poorly timed drop. I do not recommend this in any way.
Reduce Mob Spawn Rate: This has already been implemented. To an extent, this is a fairly effective way of dealing with mob lag. However, players do eventually get their desired animals and breed them to ridiculous lengths, resulting in what we originally set out to eliminate. This naturally fails, so the only effects this method has is to increase the rarity and difficulty level of receiving monster and passive mob drops.
Periodic /stoplag Command: This is already performed every now and again, much to the dismay of the playerbase. This results in the deletion of all mobs, seemingly except for dogs and cats. Hours of hard work are lost, players become upset or enraged, and there is general disapproval of this method. Although seemingly necessary, this method is not the best solution.
I've come up with 2 ideas; one is simple and one is completely insane:
Idea #1: Would it be possible to set a limit of how many entities exist on a player's island? Let's say hypothetically that we can code this and that we set everyone's island at a 100 entity maximum. A player's island might look something like this:
20 cows
20 pigs
20 chickens
2 item frames
2 paintings
14 villagers
2 wolves
This would leave 20 entity slots for a mob grinder, which is realistically more than one should need for a decent mob grinder. It also allows for a decently sized farm for every player while limiting the number of mobs dramatically. You could also make islands with more than 1 person allow more mobs, encouraging players to use the same chunks and not expand the map by making their own islands.
Idea #2: Make a custom villager at spawn that will trade monster and passive mob loot for things you can grow like wheat, saplings, and watermelon. This would eliminate the need for every mob, but it would also severely limit the potential of many players. (It's easier to breed a bunch of cows for leather than to grow wheat to trade.) Idea #1 would reduce but not eliminate entity-related lag and also indirectly reduce the number of loaded chunks.
For those of you who actually read this whole post, let me know what you think.