TeaLimit/src/main/java/net/teamonster/tealimit/Main.java

173 lines
5.1 KiB
Java
Raw Normal View History

2019-12-16 00:15:50 +00:00
package net.teamonster.tealimit;
2020-05-09 09:22:17 +00:00
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
2020-05-10 07:14:04 +00:00
import org.bukkit.Bukkit;
2020-05-09 09:22:17 +00:00
import org.bukkit.Location;
2020-05-10 07:14:04 +00:00
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
2019-12-16 00:15:50 +00:00
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.plugin.java.JavaPlugin;
2020-05-09 09:22:17 +00:00
import java.util.Collection;
2020-02-20 03:19:08 +00:00
import java.util.List;
2020-05-10 07:14:04 +00:00
public class Main extends JavaPlugin implements Listener, CommandExecutor
2020-02-20 03:19:08 +00:00
{
private int breedLimit;
private int naturalLimit;
private int range;
private int spawnEggLimit;
private int spawnerLimit;
2019-12-16 00:15:50 +00:00
2020-02-20 03:19:08 +00:00
@Override
public void onEnable()
{
2020-05-10 07:14:04 +00:00
Bukkit.getConsoleSender().sendMessage("TeaLimit Enabled");
2019-12-16 00:15:50 +00:00
getServer().getPluginManager().registerEvents(this, this);
getConfig().options().copyDefaults(true);
saveConfig();
2020-05-10 07:14:04 +00:00
getCommand("tealimit").setExecutor(this);
2020-02-20 03:19:08 +00:00
this.breedLimit = getConfig().getInt("breed-limit");
this.naturalLimit = getConfig().getInt("natural-limit");
this.range = getConfig().getInt("range");
this.spawnEggLimit = getConfig().getInt("spawnegg-limit");
this.spawnerLimit = getConfig().getInt("spawner-limit");
2019-12-16 00:15:50 +00:00
}
2020-05-10 07:14:04 +00:00
public void onDisable(){
Bukkit.getConsoleSender().sendMessage("TeaLimit Disabled");
}
2019-12-16 00:15:50 +00:00
@EventHandler
2020-02-20 03:19:08 +00:00
public void onCreatureSpawn(CreatureSpawnEvent event)
{
switch(event.getSpawnReason())
{
case BREEDING:
case EGG:
case DISPENSE_EGG:
{
if(entityLimit(event.getEntity(), this.breedLimit))
event.setCancelled(true);
break;
2019-12-16 00:15:50 +00:00
}
2020-02-20 03:19:08 +00:00
case NATURAL:
case NETHER_PORTAL:
{
if(entityLimit(event.getEntity(), this.naturalLimit))
event.setCancelled(true);
break;
}
case SPAWNER:
{
if(entityLimit(event.getEntity(), this.spawnerLimit))
event.setCancelled(true);
break;
}
case SPAWNER_EGG:
{
if(entityLimit(event.getEntity(), this.spawnEggLimit))
event.setCancelled(true);
break;
2019-12-16 00:15:50 +00:00
}
}
}
2020-05-09 09:22:17 +00:00
@EventHandler
public void onPreCreatureSpawn(PreCreatureSpawnEvent event)
{
switch(event.getReason())
{
case BREEDING:
case EGG:
case DISPENSE_EGG:
{
if(entityLimit(event.getSpawnLocation(), this.breedLimit, event.getType()))
event.setCancelled(true);
break;
}
case NATURAL:
case NETHER_PORTAL:
{
if(entityLimit(event.getSpawnLocation(), this.naturalLimit, event.getType()))
event.setCancelled(true);
break;
}
case SPAWNER:
{
if(entityLimit(event.getSpawnLocation(), this.spawnerLimit, event.getType()))
event.setCancelled(true);
break;
}
case SPAWNER_EGG:
{
if(entityLimit(event.getSpawnLocation(), this.spawnEggLimit, event.getType()))
event.setCancelled(true);
break;
}
}
}
2019-12-16 00:15:50 +00:00
2020-02-20 03:19:08 +00:00
private boolean entityLimit(Entity entity, int limit)
{
List<Entity> entityList = entity.getNearbyEntities(this.range, 255.0d, this.range);
2019-12-16 00:15:50 +00:00
EntityType entityType = entity.getType();
int count = 0;
2020-02-20 03:19:08 +00:00
for(Entity value : entityList)
{
if(value.getType() == entityType)
2019-12-16 00:15:50 +00:00
count++;
}
2020-02-20 03:19:08 +00:00
2020-05-09 09:22:17 +00:00
return count > limit;
}
private boolean entityLimit(Location location, int limit, EntityType entityType)
{
Collection<Entity> entityList = location.getWorld().getNearbyEntities(location, this.range, 255.0d, this.range);
int count = 0;
for(Entity value : entityList)
{
if(value.getType() == entityType)
count++;
}
2020-02-20 03:19:08 +00:00
return count > limit;
2019-12-16 00:15:50 +00:00
}
2020-05-10 07:14:04 +00:00
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("tealimit")){
2020-05-10 07:59:17 +00:00
if(sender.hasPermission("tealimit.admin")){
if(args.length == 0){
sender.sendMessage("Invalid argument!");
return false;
}
if(args.length == 1 && args[0].equalsIgnoreCase("reload")){
sender.sendMessage("Reloading Configuration");
reloadConfig();
sender.sendMessage("Configuration Reloaded");
return true;
}
2020-05-10 07:14:04 +00:00
}
2020-05-10 07:59:17 +00:00
else{
sender.sendMessage("Insufficient Permission!");
return false;
2020-05-10 07:14:04 +00:00
}
}
return false;
}
2019-12-16 00:15:50 +00:00
}