Added option to hide player from /list /who ... login message.

This is for other plugins, that want to hide a player.
Use IEssentials.getUser(Player p).setHidden(boolean)
This commit is contained in:
snowleo 2011-07-18 03:42:21 +02:00
parent e3a470e264
commit be83383fd5
10 changed files with 107 additions and 9 deletions

View file

@ -320,15 +320,27 @@ public class Essentials extends JavaPlugin implements IEssentials
m = m.replace("{IP}", user.getAddress().toString());
m = m.replace("{BALANCE}", Double.toString(user.getMoney()));
m = m.replace("{MAILS}", Integer.toString(user.getMails().size()));
m = m.replace("{WORLD}", user.getLocation().getWorld().getName());
}
m = m.replace("{ONLINE}", Integer.toString(getServer().getOnlinePlayers().length));
int playerHidden = 0;
for (Player p : getServer().getOnlinePlayers())
{
if (getUser(p).isHidden())
{
playerHidden++;
}
}
m = m.replace("{ONLINE}", Integer.toString(getServer().getOnlinePlayers().length - playerHidden));
if (m.matches(".*\\{PLAYERLIST\\}.*"))
{
StringBuilder online = new StringBuilder();
for (Player p : getServer().getOnlinePlayers())
{
if (getUser(p).isHidden())
{
continue;
}
if (online.length() > 0)
{
online.append(", ");
@ -563,6 +575,12 @@ public class Essentials extends JavaPlugin implements IEssentials
public User getOfflineUser(String name)
{
// Don't create a new offline user, if we already have that user loaded.
User u = users.get(name.toLowerCase());
if (u != null)
{
return u;
}
File userFolder = new File(getDataFolder(), "userdata");
File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml");
if (userFile.exists())

View file

@ -19,6 +19,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
private boolean teleportRequestHere;
private final Teleport teleport;
private long lastActivity;
private boolean hidden = false;
User(Player base, IEssentials ess)
{
@ -331,4 +332,14 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now);
return now;
}
public boolean isHidden()
{
return hidden;
}
public void setHidden(boolean hidden)
{
this.hidden = hidden;
}
}

View file

@ -43,6 +43,10 @@ public class Commandgod extends EssentialsCommand
for (Player p : server.matchPlayer(name))
{
User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
boolean enabled = u.toggleGodModeEnabled();
u.sendMessage(Util.format("godMode", (enabled ? Util.i18n("enabled") : Util.i18n("disabled"))));
sender.sendMessage(Util.format("godMode",Util.format(enabled ? "godEnabledFor": "godDisabledFor", p.getDisplayName())));

View file

@ -53,13 +53,17 @@ public class Commandheal extends EssentialsCommand
private void healOtherPlayers(Server server, CommandSender sender, String name)
{
List<Player> players = server.matchPlayer(name);
if(players.isEmpty())
if (players.isEmpty())
{
sender.sendMessage(Util.i18n("playerNotFound"));
return;
}
for (Player p : players)
{
if (ess.getUser(p).isHidden())
{
continue;
}
p.setHealth(20);
sender.sendMessage(Util.format("healOther", p.getDisplayName()));
}

View file

@ -24,9 +24,33 @@ public class Commandlist extends EssentialsCommand
@Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
{
boolean showhidden = false;
if (sender instanceof Player)
{
if (ess.getUser(sender).isAuthorized("essentials.list.hidden"))
{
showhidden = true;
}
}
else
{
showhidden = true;
}
int playerHidden = 0;
for (Player p : server.getOnlinePlayers())
{
if (ess.getUser(p).isHidden())
{
playerHidden++;
}
}
charge(sender);
StringBuilder online = new StringBuilder();
online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length);
online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length - playerHidden);
if (showhidden)
{
online.append(ChatColor.GRAY).append("/").append(playerHidden);
}
online.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(server.getMaxPlayers());
online.append(ChatColor.BLUE).append(" players online.");
sender.sendMessage(online.toString());
@ -37,6 +61,10 @@ public class Commandlist extends EssentialsCommand
for (Player p : server.getOnlinePlayers())
{
User u = ess.getUser(p);
if (u.isHidden() && !showhidden)
{
continue;
}
String group = u.getGroup();
List<User> list = sort.get(group);
if (list == null)
@ -69,6 +97,10 @@ public class Commandlist extends EssentialsCommand
{
groupString.append("§7[AFK]§f");
}
if (user.isHidden())
{
groupString.append("§7[HIDDEN]§f");
}
groupString.append(user.getDisplayName());
}
sender.sendMessage(groupString.toString());
@ -79,7 +111,12 @@ public class Commandlist extends EssentialsCommand
List<User> users = new ArrayList<User>();
for (Player p : server.getOnlinePlayers())
{
users.add(ess.getUser(p));
final User u = ess.getUser(p);
if (u.isHidden() && !showhidden)
{
continue;
}
users.add(u);
}
Collections.sort(users);
@ -100,6 +137,10 @@ public class Commandlist extends EssentialsCommand
{
onlineUsers.append("§7[AFK]§f");
}
if (user.isHidden())
{
onlineUsers.append("§7[HIDDEN]§f");
}
onlineUsers.append(user.getDisplayName());
}
sender.sendMessage(onlineUsers.toString());

View file

@ -5,6 +5,7 @@ import org.bukkit.Server;
import org.bukkit.entity.Player;
import com.earth2me.essentials.Console;
import com.earth2me.essentials.IReplyTo;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.command.CommandSender;
@ -52,7 +53,8 @@ public class Commandmsg extends EssentialsCommand
for (Player p : matches)
{
sender.sendMessage(Util.format("msgFormat", translatedMe, p.getDisplayName(), message));
if (sender instanceof Player && ess.getUser(p).isIgnoredPlayer(((Player)sender).getName()))
final User u = ess.getUser(p);
if (sender instanceof Player && (u.isIgnoredPlayer(((Player)sender).getName()) || u.isHidden()))
{
continue;
}

View file

@ -25,6 +25,10 @@ public class Commandpay extends EssentialsCommand
for (Player p : server.matchPlayer(args[0]))
{
User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
user.payUser(u, amount);
}
}

View file

@ -26,6 +26,10 @@ public class Commandrealname extends EssentialsCommand
for (Player p : server.getOnlinePlayers())
{
final User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
final String displayName = ChatColor.stripColor(u.getDisplayName()).toLowerCase();
if (!whois.equals(displayName)
&& !displayName.equals(ChatColor.stripColor(ess.getSettings().getNicknamePrefix()) + whois)

View file

@ -28,6 +28,10 @@ public class Commandwhois extends EssentialsCommand
for (Player p : server.getOnlinePlayers())
{
User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
String dn = ChatColor.stripColor(u.getNick());
if (!whois.equalsIgnoreCase(dn)
&& !whois.equalsIgnoreCase(dn.substring(prefixLength))

View file

@ -53,12 +53,18 @@ public abstract class EssentialsCommand implements IEssentialsCommand
for (Player p : matches)
{
if (p.getDisplayName().startsWith(args[pos]))
final User u = ess.getUser(p);
if (u.getDisplayName().startsWith(args[pos]) && (getOffline || !u.isHidden()))
{
return ess.getUser(p);
return u;
}
}
return ess.getUser(matches.get(0));
final User u = ess.getUser(matches.get(0));
if (!getOffline && u.isHidden())
{
throw new NoSuchFieldException(Util.i18n("playerNotFound"));
}
return u;
}
@Override