/** * (c) 2014 dmulloy2 */ package net.t7seven7t.swornguard.commands; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import net.dmulloy2.util.Util; import net.t7seven7t.swornguard.SwornGuard; import net.t7seven7t.swornguard.types.Permission; import net.t7seven7t.swornguard.types.PlayerData; import org.bukkit.OfflinePlayer; import org.bukkit.scheduler.BukkitRunnable; /** * @author dmulloy2 */ public class CmdAlt extends SwornGuardCommand { public CmdAlt(SwornGuard plugin) { super(plugin); this.name = "alt"; this.addRequiredArg("player"); this.description = "Check for alternate accounts"; this.permission = Permission.CMD_ALT; } @Override public void perform() { OfflinePlayer target = Util.matchOfflinePlayer(args[0]); if (target == null) { err("Player \"&c{0}&4\" not found!", args[0]); return; } final PlayerData data = plugin.getPlayerDataCache().getData(target); if (data == null) { err("No data found for &c{0}&4!", target.getName()); return; } final String name = data.getLastKnownBy(); final List<String> matches = new ArrayList<>(); sendMessage("Building list... Please wait."); class AltLookupTask extends BukkitRunnable { @Override public void run() { List<String> ips = data.getIpAddressList(); Map<String, PlayerData> dataMap = plugin.getPlayerDataCache().getAllPlayerData(); for (Entry<String, PlayerData> entry : dataMap.entrySet()) { PlayerData data = entry.getValue(); if (checkMatch(data.getIpAddressList(), ips)) matches.add(data.getLastKnownBy()); } if (matches.contains(name)) { matches.remove(name); } plugin.getPlayerDataCache().save(); class CleanupTask extends BukkitRunnable { @Override public void run() { if (matches.isEmpty()) { err("No alternates found!"); return; } sendMessage("&3====[ &ePossible Alts of {0} &3]====", name); for (String match : matches) { sendMessage("&b - &e{0}", match); } plugin.getPlayerDataCache().cleanupData(); } } new CleanupTask().runTask(plugin); } } new AltLookupTask().runTaskAsynchronously(plugin); } private static final boolean checkMatch(List<String> list1, List<String> list2) { for (String i : list1) { for (String ii : list2) { if (i.equalsIgnoreCase(ii)) return true; } } return false; } }