package dev.plex.command.impl; import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @CommandPermissions(level = Rank.ADMIN, permission = "plex.mobpurge", source = RequiredCommandSource.ANY) @CommandParameters(name = "mobpurge", description = "Purge all mobs.", usage = "/", aliases = "mp") public class MobPurgeCMD extends PlexCommand { @Override protected Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, @NotNull String[] args) { HashMap entityCounts = new HashMap<>(); for (World world : Bukkit.getWorlds()) { for (Entity entity : world.getEntities()) { if (entity instanceof Mob) { String type = entity.getType().name(); /* Location loc = entity.getLocation(); loc.setY(-500); entity.teleportAsync(loc); entity.remove(); */ entityCounts.put(type,entityCounts.getOrDefault(type, 0) + 1); } } } int entityCount = entityCounts.values().stream().mapToInt(a -> a).sum(); PlexUtils.broadcast(messageComponent("removedMobs", sender.getName(), entityCount)); entityCounts.forEach((entityName, numRemoved) -> { sender.sendMessage(messageComponent("removedEntitiesOfType", sender.getName(), numRemoved, entityName)); }); return null; } }