/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.royaldev.royalcommands.rcommands; import org.apache.commons.lang.BooleanUtils; import org.bukkit.Location; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.royaldev.royalcommands.MessageColor; import org.royaldev.royalcommands.RUtils; import org.royaldev.royalcommands.RoyalCommands; import org.royaldev.royalcommands.configuration.PlayerConfiguration; import org.royaldev.royalcommands.configuration.PlayerConfigurationManager; import java.text.DecimalFormat; import java.util.Date; @ReflectCommand public class CmdWhois extends BaseCommand { public CmdWhois(final RoyalCommands instance, final String name) { super(instance, name, true); } @Override public boolean runCommand(final CommandSender cs, final Command cmd, final String label, final String[] args) { if (args.length < 1) { cs.sendMessage(cmd.getDescription()); return false; } final OfflinePlayer t = RUtils.getOfflinePlayer(args[0]); if (!t.isOnline() && !t.hasPlayedBefore()) { cs.sendMessage(MessageColor.NEGATIVE + "That player has never played before!"); return true; } PlayerConfiguration pcm = PlayerConfigurationManager.getConfiguration(t); DecimalFormat df = new DecimalFormat("#.##"); String ip = pcm.getString("ip"); String name = pcm.getString("name"); String dispname = pcm.getString("dispname"); cs.sendMessage(MessageColor.POSITIVE + "====================="); cs.sendMessage(MessageColor.POSITIVE + ((t.isOnline()) ? "Whois" : "Whowas") + " for " + MessageColor.NEUTRAL + name); cs.sendMessage(MessageColor.POSITIVE + "Nickname: " + MessageColor.NEUTRAL + dispname); cs.sendMessage(MessageColor.POSITIVE + "UUID: " + MessageColor.NEUTRAL + t.getUniqueId()); cs.sendMessage(MessageColor.POSITIVE + "IP: " + MessageColor.NEUTRAL + ip); cs.sendMessage(MessageColor.POSITIVE + "Is VIP: " + MessageColor.NEUTRAL + BooleanUtils.toStringYesNo(pcm.getBoolean("vip"))); cs.sendMessage(MessageColor.POSITIVE + "Is muted: " + MessageColor.NEUTRAL + BooleanUtils.toStringYesNo(pcm.getBoolean("muted"))); cs.sendMessage(MessageColor.POSITIVE + "Is frozen: " + MessageColor.NEUTRAL + BooleanUtils.toStringYesNo(pcm.getBoolean("frozen"))); cs.sendMessage(MessageColor.POSITIVE + "Is jailed: " + MessageColor.NEUTRAL + BooleanUtils.toStringYesNo(pcm.getBoolean("jailed"))); long timestamp = RUtils.getTimeStamp(t, "seen"); String lastseen = (timestamp < 0) ? "unknown" : RUtils.formatDateDiff(timestamp); cs.sendMessage(MessageColor.POSITIVE + "Last seen:" + MessageColor.NEUTRAL + ((t.isOnline()) ? " now" : lastseen)); cs.sendMessage(MessageColor.POSITIVE + "First played:" + MessageColor.NEUTRAL + RUtils.formatDateDiff(t.getFirstPlayed())); if (t.isOnline()) { final Player p = (Player) t; cs.sendMessage(MessageColor.POSITIVE + "Gamemode: " + MessageColor.NEUTRAL + p.getGameMode().name().toLowerCase()); cs.sendMessage(MessageColor.POSITIVE + "Can fly: " + MessageColor.NEUTRAL + BooleanUtils.toStringYesNo(p.getAllowFlight())); cs.sendMessage(MessageColor.POSITIVE + "Health/Hunger/Saturation: " + MessageColor.NEUTRAL + p.getHealth() / 2 + MessageColor.POSITIVE + "/" + MessageColor.NEUTRAL + p.getFoodLevel() / 2 + MessageColor.POSITIVE + "/" + MessageColor.NEUTRAL + p.getSaturation() / 2); cs.sendMessage(MessageColor.POSITIVE + "Total Exp/Exp %/Level: " + MessageColor.NEUTRAL + p.getTotalExperience() + MessageColor.POSITIVE + "/" + MessageColor.NEUTRAL + df.format(p.getExp() * 100) + "%" + MessageColor.POSITIVE + "/" + MessageColor.NEUTRAL + p.getLevel()); cs.sendMessage(MessageColor.POSITIVE + "Item in hand: " + MessageColor.NEUTRAL + RUtils.getItemName(p.getItemInHand())); cs.sendMessage(MessageColor.POSITIVE + "Alive for:" + MessageColor.NEUTRAL + RUtils.formatDateDiff(new Date().getTime() - p.getTicksLived() * 50)); Location l = p.getLocation(); cs.sendMessage(MessageColor.POSITIVE + "Last position: " + "(" + MessageColor.NEUTRAL + l.getX() + MessageColor.POSITIVE + ", " + MessageColor.NEUTRAL + l.getY() + MessageColor.POSITIVE + ", " + MessageColor.NEUTRAL + l.getZ() + MessageColor.POSITIVE + ")"); cs.sendMessage(MessageColor.POSITIVE + "Last world: " + MessageColor.NEUTRAL + RUtils.getMVWorldName(l.getWorld()) + MessageColor.POSITIVE + " (" + MessageColor.NEUTRAL + l.getWorld().getName() + MessageColor.POSITIVE + ")"); } else { String lP = "lastposition."; World w = (pcm.isSet(lP + "world")) ? this.plugin.getServer().getWorld(pcm.getString(lP + "world")) : null; if (w != null) { Location l = new Location(w, pcm.getDouble(lP + "x"), pcm.getDouble(lP + "y"), pcm.getDouble(lP + "z")); cs.sendMessage(MessageColor.POSITIVE + "Last position: " + "(" + MessageColor.NEUTRAL + l.getX() + MessageColor.POSITIVE + ", " + MessageColor.NEUTRAL + l.getY() + MessageColor.POSITIVE + ", " + MessageColor.NEUTRAL + l.getZ() + MessageColor.POSITIVE + ")"); cs.sendMessage(MessageColor.POSITIVE + "Last world: " + MessageColor.NEUTRAL + RUtils.getMVWorldName(l.getWorld()) + MessageColor.POSITIVE + " (" + MessageColor.NEUTRAL + l.getWorld().getName() + MessageColor.POSITIVE + ")"); } } cs.sendMessage(MessageColor.POSITIVE + "====================="); return true; } }