Skip to content

Instantly share code, notes, and snippets.

@aikar
Created March 24, 2019 17:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aikar/e6ec7c69c4944b069e687d180bc3855a to your computer and use it in GitHub Desktop.
Save aikar/e6ec7c69c4944b069e687d180bc3855a to your computer and use it in GitHub Desktop.
package co.aikar.fairnaturalspawns;
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.plugin.java.JavaPlugin;
public final class FairNaturalSpawns extends JavaPlugin implements Listener {
private YamlConfiguration spigotConfig;
private int defaultSpawnRange;
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
this.spigotConfig = Bukkit.spigot().getSpigotConfig();
this.defaultSpawnRange = spigotConfig.getInt("world-settings.default.mob-spawn-range", 8);
}
@EventHandler(ignoreCancelled = true)
public void onPlayerNaturallySpawnCreatures(PlayerNaturallySpawnCreaturesEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
int spawnRange = (spigotConfig.getInt("world-settings." + world.getName() + ".mob-spawn-range", defaultSpawnRange)) << 4;
long count = player.getNearbyEntities(spawnRange, spawnRange, spawnRange).stream()
.filter(entity -> entity.getEntitySpawnReason() == SpawnReason.NATURAL)
.count();
if (count > world.getMonsterSpawnLimit()) {
event.setCancelled(true);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment