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("{IP}", user.getAddress().toString());
m = m.replace("{BALANCE}", Double.toString(user.getMoney())); m = m.replace("{BALANCE}", Double.toString(user.getMoney()));
m = m.replace("{MAILS}", Integer.toString(user.getMails().size())); m = m.replace("{MAILS}", Integer.toString(user.getMails().size()));
m = m.replace("{WORLD}", user.getLocation().getWorld().getName());
} }
int playerHidden = 0;
m = m.replace("{ONLINE}", Integer.toString(getServer().getOnlinePlayers().length)); for (Player p : getServer().getOnlinePlayers())
{
if (getUser(p).isHidden())
{
playerHidden++;
}
}
m = m.replace("{ONLINE}", Integer.toString(getServer().getOnlinePlayers().length - playerHidden));
if (m.matches(".*\\{PLAYERLIST\\}.*")) if (m.matches(".*\\{PLAYERLIST\\}.*"))
{ {
StringBuilder online = new StringBuilder(); StringBuilder online = new StringBuilder();
for (Player p : getServer().getOnlinePlayers()) for (Player p : getServer().getOnlinePlayers())
{ {
if (getUser(p).isHidden())
{
continue;
}
if (online.length() > 0) if (online.length() > 0)
{ {
online.append(", "); online.append(", ");
@ -563,6 +575,12 @@ public class Essentials extends JavaPlugin implements IEssentials
public User getOfflineUser(String name) 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 userFolder = new File(getDataFolder(), "userdata");
File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml"); File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml");
if (userFile.exists()) if (userFile.exists())

View file

@ -19,6 +19,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
private boolean teleportRequestHere; private boolean teleportRequestHere;
private final Teleport teleport; private final Teleport teleport;
private long lastActivity; private long lastActivity;
private boolean hidden = false;
User(Player base, IEssentials ess) 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); this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now);
return 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)) for (Player p : server.matchPlayer(name))
{ {
User u = ess.getUser(p); User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
boolean enabled = u.toggleGodModeEnabled(); boolean enabled = u.toggleGodModeEnabled();
u.sendMessage(Util.format("godMode", (enabled ? Util.i18n("enabled") : Util.i18n("disabled")))); u.sendMessage(Util.format("godMode", (enabled ? Util.i18n("enabled") : Util.i18n("disabled"))));
sender.sendMessage(Util.format("godMode",Util.format(enabled ? "godEnabledFor": "godDisabledFor", p.getDisplayName()))); 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) private void healOtherPlayers(Server server, CommandSender sender, String name)
{ {
List<Player> players = server.matchPlayer(name); List<Player> players = server.matchPlayer(name);
if(players.isEmpty()) if (players.isEmpty())
{ {
sender.sendMessage(Util.i18n("playerNotFound")); sender.sendMessage(Util.i18n("playerNotFound"));
return; return;
} }
for (Player p : players) for (Player p : players)
{ {
if (ess.getUser(p).isHidden())
{
continue;
}
p.setHealth(20); p.setHealth(20);
sender.sendMessage(Util.format("healOther", p.getDisplayName())); sender.sendMessage(Util.format("healOther", p.getDisplayName()));
} }

View file

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

View file

@ -5,6 +5,7 @@ import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.earth2me.essentials.Console; import com.earth2me.essentials.Console;
import com.earth2me.essentials.IReplyTo; import com.earth2me.essentials.IReplyTo;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util; import com.earth2me.essentials.Util;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -52,7 +53,8 @@ public class Commandmsg extends EssentialsCommand
for (Player p : matches) for (Player p : matches)
{ {
sender.sendMessage(Util.format("msgFormat", translatedMe, p.getDisplayName(), message)); 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; continue;
} }

View file

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

View file

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

View file

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

View file

@ -53,12 +53,18 @@ public abstract class EssentialsCommand implements IEssentialsCommand
for (Player p : matches) 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 @Override