TF-EssentialsX/Essentials/src/com/earth2me/essentials/commands/Commandseen.java

173 lines
4.7 KiB
Java
Raw Normal View History

package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.User;
import com.earth2me.essentials.UserMap;
import com.earth2me.essentials.Util;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commandseen extends EssentialsCommand
{
public Commandseen()
{
super("seen");
}
@Override
2011-12-01 13:42:39 +00:00
protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
seen(server, sender, args, true, true, true);
}
2012-03-21 23:54:57 +00:00
@Override
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{
seen(server, user, args, user.isAuthorized("essentials.seen.banreason"), user.isAuthorized("essentials.seen.extra"), user.isAuthorized("essentials.seen.ipsearch"));
}
2012-03-21 23:54:57 +00:00
protected void seen(final Server server, final CommandSender sender, final String[] args, final boolean showBan, final boolean extra, final boolean ipLookup) throws Exception
{
if (args.length < 1)
{
throw new NotEnoughArgumentsException();
}
try
{
User user = getPlayer(server, args, 0);
seenOnline(server, sender, user, showBan, extra);
}
catch (NoSuchFieldException e)
{
User player = ess.getOfflineUser(args[0]);
if (player == null)
{
if (ipLookup && Util.validIP(args[0]))
{
seenIP(server, sender, args[0]);
return;
}
else
{
throw new Exception(_("playerNotFound"));
}
}
seenOffline(server, sender, player, showBan, extra);
}
}
private void seenOnline(final Server server, final CommandSender sender, final User user, final boolean showBan, final boolean extra) throws Exception
{
user.setDisplayNick();
sender.sendMessage(_("seenOnline", user.getDisplayName(), Util.formatDateDiff(user.getLastLogin())));
if (user.isAfk())
{
sender.sendMessage(_("whoisAFK", _("true")));
}
if (user.isJailed())
{
sender.sendMessage(_("whoisJail", (user.getJailTimeout() > 0
? Util.formatDateDiff(user.getJailTimeout())
: _("true"))));
}
if (user.isMuted())
{
sender.sendMessage(_("whoisMuted", (user.getMuteTimeout() > 0
? Util.formatDateDiff(user.getMuteTimeout())
: _("true"))));
}
if (extra)
{
sender.sendMessage(_("whoisIPAddress", user.getAddress().getAddress().toString()));
final String location = user.getGeoLocation();
if (location != null && (!(sender instanceof Player) || ess.getUser(sender).isAuthorized("essentials.geoip.show")))
{
sender.sendMessage(_("whoisGeoLocation", location));
}
}
}
private void seenOffline(final Server server, final CommandSender sender, User user, final boolean showBan, final boolean extra) throws Exception
{
user.setDisplayNick();
if (user.getLastLogout() > 0)
{
sender.sendMessage(_("seenOffline", user.getName(), Util.formatDateDiff(user.getLastLogout())));
}
else
{
sender.sendMessage(_("userUnknown", user.getName()));
}
if (user.isBanned())
{
sender.sendMessage(_("whoisBanned", showBan ? user.getBanReason() : _("true")));
}
if (extra)
{
if (!user.getLastLoginAddress().isEmpty())
{
sender.sendMessage(_("whoisIPAddress", user.getLastLoginAddress()));
}
final String location = user.getGeoLocation();
if (location != null && (!(sender instanceof Player) || ess.getUser(sender).isAuthorized("essentials.geoip.show")))
{
sender.sendMessage(_("whoisGeoLocation", location));
}
final Location loc = user.getLogoutLocation();
if (loc != null)
2011-12-07 11:00:01 +00:00
{
sender.sendMessage(_("whoisLocation", loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}
}
}
private void seenIP(final Server server, final CommandSender sender, final String ipAddress) throws Exception
{
final UserMap userMap = ess.getUserMap();
sender.sendMessage(_("runningPlayerMatch", ipAddress));
ess.runTaskAsynchronously(new Runnable()
{
@Override
public void run()
{
final List<String> matches = new ArrayList<String>();
for (final String u : userMap.getAllUniqueUsers())
{
final User user = ess.getUserMap().getUser(u);
if (user == null)
{
continue;
}
final String uIPAddress = user.getLastLoginAddress();
if (!uIPAddress.isEmpty() && uIPAddress.equalsIgnoreCase(ipAddress))
{
matches.add(user.getName());
}
}
if (matches.size() > 0)
{
sender.sendMessage(_("matchingIPAddress"));
sender.sendMessage(Util.joinList(matches));
}
else
{
sender.sendMessage(_("noMatchingPlayers"));
2012-04-14 14:57:47 +00:00
}
2011-12-07 11:00:01 +00:00
}
});
}
}