TotalFreedomMod/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java

111 lines
2.8 KiB
Java
Raw Normal View History

2020-01-09 11:56:25 +00:00
package me.totalfreedom.totalfreedommod;
2020-01-10 01:02:28 +00:00
import java.util.Arrays;
import java.util.List;
import me.totalfreedom.totalfreedommod.util.Groups;
2020-01-09 11:56:25 +00:00
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Entity;
2020-01-10 01:02:28 +00:00
import org.bukkit.entity.EntityType;
2020-01-25 06:27:16 +00:00
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
2020-01-09 11:56:25 +00:00
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
public class EntityWiper extends FreedomService
{
2020-01-10 01:02:28 +00:00
public List<EntityType> BLACKLIST = Arrays.asList(
EntityType.ARMOR_STAND,
EntityType.PAINTING,
EntityType.BOAT,
EntityType.LEASH_HITCH,
2020-05-29 10:14:21 +00:00
EntityType.ITEM_FRAME,
EntityType.MINECART
2020-01-10 01:02:28 +00:00
);
private BukkitTask wiper;
2020-01-10 01:02:28 +00:00
2020-01-09 11:56:25 +00:00
@Override
2020-07-01 01:51:06 +00:00
public void onStart()
2020-01-09 11:56:25 +00:00
{
// Continuous Entity Wiper
wiper = new BukkitRunnable()
{
@Override
public void run()
{
2020-01-25 06:27:16 +00:00
wipeEntities(false);
2020-01-09 11:56:25 +00:00
}
2020-01-25 06:27:16 +00:00
}.runTaskTimer(plugin, 600L, 600L); // 30 second delay after startup + run every 30 seconds
2020-01-09 11:56:25 +00:00
}
@Override
2020-07-01 01:51:06 +00:00
public void onStop()
2020-01-09 11:56:25 +00:00
{
wiper.cancel();
wiper = null;
}
// Methods for wiping
2020-01-25 06:27:16 +00:00
public int wipeEntities(boolean bypassBlacklist)
2020-01-09 11:56:25 +00:00
{
int removed = 0;
for (World world : Bukkit.getWorlds())
{
for (Entity entity : world.getEntities())
{
2020-01-25 06:27:16 +00:00
if (!(entity instanceof Player))
2020-01-09 11:56:25 +00:00
{
2020-04-22 08:23:51 +00:00
if ((!bypassBlacklist && BLACKLIST.contains(entity.getType())) || Groups.MOB_TYPES.contains(entity.getType()))
2020-01-25 06:27:16 +00:00
{
continue;
}
2020-01-09 11:56:25 +00:00
entity.remove();
removed++;
}
}
}
return removed;
}
2020-01-25 06:27:16 +00:00
public int wipeEntities(EntityType entityType)
{
int removed = 0;
for (World world : Bukkit.getWorlds())
{
for (Entity entity : world.getEntities())
{
if (!entity.getType().equals(entityType))
{
continue;
}
entity.remove();
removed++;
}
}
return removed;
}
public int purgeMobs(EntityType type)
{
int removed = 0;
for (World world : Bukkit.getWorlds())
{
for (Entity entity : world.getLivingEntities())
{
if (entity instanceof LivingEntity && !(entity instanceof Player))
{
if (type != null && !entity.getType().equals(type))
{
continue;
}
entity.remove();
removed++;
}
}
}
return removed;
}
}