/**
* Copyright (C) 2012 t7seven7t
*/
package net.t7seven7t.swornguard.commands;
import java.util.ArrayList;
import java.util.List;
import net.dmulloy2.types.StringJoiner;
import net.dmulloy2.util.FormatUtil;
import net.dmulloy2.util.ListUtil;
import net.dmulloy2.util.TimeUtil;
import net.t7seven7t.swornguard.SwornGuard;
import net.t7seven7t.swornguard.types.Permission;
import net.t7seven7t.swornguard.types.PlayerData;
import org.bukkit.OfflinePlayer;
/**
* @author t7seven7t
*/
public class CmdInfo extends SwornGuardCommand {
public CmdInfo(SwornGuard plugin) {
super(plugin);
this.name = "info";
this.aliases.add("i");
this.aliases.add("stats");
this.description = plugin.getMessage("desc_info");
this.permission = Permission.CMD_INFO;
this.addOptionalArg("player");
this.usesPrefix = true;
}
@Override
public void perform() {
OfflinePlayer target = getTarget(0, hasPermission(sender, Permission.CMD_INFO_OTHERS));
if (target == null) {
return;
}
PlayerData data = getPlayerData(target);
if (data == null) {
err("&c{0} &4has no data!", target.getName());
return;
}
List<String> lines = new ArrayList<String>();
StringBuilder line = new StringBuilder();
line.append(FormatUtil.format(plugin.getMessage("info_header"),
target.getName(),
target.isOnline()
? plugin.getMessage("info_online_now")
: FormatUtil.format(plugin.getMessage("info_last_seen"),
TimeUtil.formatTimeDifference( data.getLastOnline(),
System.currentTimeMillis()))));
String ip = target.isOnline() ? target.getPlayer().getAddress().getAddress().getHostAddress() :
data.getIpAddressList().get(data.getIpAddressList().size() - 1);
if (plugin.getPermissionHandler().hasPermission(sender, Permission.CMD_IP))
line.append(" from " + ip);
lines.add(line.toString());
// Attempt to get the player's previous names
// We'll try to grab them from Essentials if we don't have a record
List<String> history = data.getHistory();
if (history == null || history.isEmpty()) {
if (plugin.isEssentialsEnabled()) {
history = plugin.getEssentialsHandler().getHistory(target.getUniqueId());
}
// This also covers any failures with Essentials
if (history == null || history.isEmpty()) {
history = new ArrayList<String>();
history.add(target.getName());
}
data.setHistory(history);
}
history = new ArrayList<String>(data.getHistory());
ListUtil.removeIgnoreCase(history, target.getName());
if (! history.isEmpty()) {
line = new StringBuilder();
line.append(" " + FormatUtil.format("&ePreviously known as: &a{0}",
new StringJoiner("&e, &a").appendAll(history).toString()));
lines.add(line.toString());
}
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_logins"),
data.getLogins(),
TimeUtil.getSimpleDate(target.getFirstPlayed())));
lines.add(line.toString());
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_blocks"),
data.getBlocksBuilt(),
data.getBlocksDeleted(),
data.getMessages()));
lines.add(line.toString());
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_kills"),
data.getPlayerKills(),
data.getMonsterKills(),
data.getAnimalKills(),
data.getDeaths()));
lines.add(line.toString());
if ( plugin.getServer().getPluginManager().isPluginEnabled("Factions") ||
plugin.getServer().getPluginManager().isPluginEnabled("SwornNations")) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_factions"),
data.getFactions()));
if (data.getLastFaction() != "")
line.append(FormatUtil.format(plugin.getMessage("info_last_faction"),
data.getLastFaction()));
lines.add(line.toString());
}
if (data.getPlayersKicked() != 0 || data.getPlayersBanned() != 0) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_kickban"),
data.getPlayersKicked(),
data.getPlayersBanned()));
lines.add(line.toString());
}
if (data.getReportsRespondedTo() != 0 || data.getPatrols() != 0) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_cheatrespond"),
data.getReportsRespondedTo(),
data.getPatrols()));
lines.add(line.toString());
}
if (data.getKicks() != 0) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_kicks"),
data.getKicks(),
TimeUtil.formatTimeDifference(data.getLastKick(), System.currentTimeMillis()),
data.getLastKicker()));
lines.add(line.toString());
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_kick_reason"), data.getLastKickReason()));
lines.add(line.toString());
}
if (data.getBans() != 0) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_bans"),
data.getBans(),
TimeUtil.formatTimeDifference(data.getLastBan(), System.currentTimeMillis()),
data.getLastBanner()));
lines.add(line.toString());
line = new StringBuilder();
String banreason = data.getLastBanReason();
if (banreason == null)
banreason = "The Banhammer has spoken!";
line.append(" " + FormatUtil.format(plugin.getMessage("info_ban_reason"), banreason));
lines.add(line.toString());
}
if (data.getJails() != 0) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_jails"),
data.getJails(),
TimeUtil.formatTimeDifference(data.getLastJail(), System.currentTimeMillis()),
data.getLastJailer()));
lines.add(line.toString());
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_jail_reason"), data.getLastJailReason()));
lines.add(line.toString());
}
if (data.getTrollHells() != 0) {
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_trolls"),
data.getTrollHells(),
TimeUtil.formatTimeDifference(data.getLastTrollHell(), System.currentTimeMillis()),
data.getLastTroller()));
lines.add(line.toString());
line = new StringBuilder();
String lastReason = data.getLastTrollReason();
line.append(" " + FormatUtil.format(plugin.getMessage("info_troll_reason"), lastReason == null ? "not applicable" : lastReason));
lines.add(line.toString());
}
if (target.isOnline())
data.updateSpentTime();
line = new StringBuilder();
line.append(" " + FormatUtil.format(plugin.getMessage("info_time_spent"), TimeUtil.formatTimeDifference(0, data.getOnlineTime())));
lines.add(line.toString());
for (String string : lines)
sendMessage(string);
}
}