From 035182fcda8acf77d3727ce21993e9bb57c90077 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 12 Jul 2014 16:03:36 +1000 Subject: Optimize player / user iteration. * Add a method for backwards compatability with unmapped code. * Convert all getOnlinePlayers() calls to use this method, part of the IEssentials interface * Add a new method getOnlineUsers() Ljava/lang/Iterable; * Convert appropriate calls to use this method * Update Bukkit to #1945 * Update CraftBukkit to #3103 --- Essentials/src/com/earth2me/essentials/Backup.java | 4 +- .../src/com/earth2me/essentials/Essentials.java | 59 +++++++++++++++++++++- .../essentials/EssentialsPlayerListener.java | 5 +- .../com/earth2me/essentials/EssentialsTimer.java | 2 +- .../src/com/earth2me/essentials/IEssentials.java | 5 ++ .../src/com/earth2me/essentials/PlayerList.java | 15 +++--- Essentials/src/com/earth2me/essentials/User.java | 9 ++-- .../essentials/commands/Commandclearinventory.java | 7 ++- .../essentials/commands/Commandessentials.java | 6 +-- .../essentials/commands/Commandkickall.java | 2 +- .../earth2me/essentials/commands/Commandnick.java | 2 +- .../earth2me/essentials/commands/Commandnuke.java | 7 ++- .../earth2me/essentials/commands/Commandptime.java | 4 +- .../essentials/commands/Commandpweather.java | 4 +- .../essentials/commands/Commandrealname.java | 5 +- .../essentials/commands/Commandtpaall.java | 3 +- .../earth2me/essentials/commands/Commandtpall.java | 3 +- .../essentials/commands/EssentialsCommand.java | 4 +- .../essentials/commands/EssentialsLoopCommand.java | 15 +++--- .../com/earth2me/essentials/metrics/Metrics.java | 3 +- .../essentials/textreader/KeywordReplacer.java | 6 +-- .../test/com/earth2me/essentials/FakeServer.java | 8 ++- .../earth2me/essentials/xmpp/EssentialsXMPP.java | 6 +++ .../earth2me/essentials/xmpp/IEssentialsXMPP.java | 3 ++ .../com/earth2me/essentials/xmpp/XMPPManager.java | 2 +- 25 files changed, 126 insertions(+), 63 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/Backup.java b/Essentials/src/com/earth2me/essentials/Backup.java index 5ace61e98..889d2cbfe 100644 --- a/Essentials/src/com/earth2me/essentials/Backup.java +++ b/Essentials/src/com/earth2me/essentials/Backup.java @@ -24,7 +24,7 @@ public class Backup implements Runnable { this.ess = ess; server = ess.getServer(); - if (server.getOnlinePlayers().length > 0) + if (!ess.getOnlinePlayers().isEmpty()) { ess.runTaskAsynchronously(new Runnable() { @@ -152,7 +152,7 @@ public class Backup implements Runnable public void run() { server.dispatchCommand(cs, "save-on"); - if (server.getOnlinePlayers().length == 0) + if (ess.getOnlinePlayers().isEmpty()) { stopTask(); } diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index fbe874f16..fc100ee3d 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -35,10 +35,17 @@ import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.KeywordReplacer; import com.earth2me.essentials.textreader.SimpleTextInput; import com.earth2me.essentials.utils.DateUtil; +import com.google.common.base.Function; +import com.google.common.base.Throwables; +import com.google.common.collect.Iterables; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.UUID; import java.util.logging.Level; @@ -100,6 +107,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials private transient Metrics metrics; private transient EssentialsTimer timer; private final transient List vanishedPlayers = new ArrayList(); + private transient Method oldGetOnlinePlayers; public Essentials() { @@ -181,6 +189,16 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials LOGGER.log(Level.INFO, getServer().getBukkitVersion()); } execTimer.mark("BukkitCheck"); + + for (Method method : Server.class.getDeclaredMethods()) + { + if (method.getName().endsWith("getOnlinePlayers") && method.getReturnType() == Player[].class) + { + oldGetOnlinePlayers = method; + break; + } + } + try { final EssentialsUpgrade upgrade = new EssentialsUpgrade(this); @@ -784,7 +802,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials IText broadcast = new SimpleTextInput(message); - final Player[] players = getServer().getOnlinePlayers(); + final Collection players = getOnlinePlayers(); for (Player player : players) { @@ -803,7 +821,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials } } - return players.length; + return players.size(); } @Override @@ -890,6 +908,43 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials return vanishedPlayers; } + @Override + public Collection getOnlinePlayers() + { + try + { + return (Collection)getServer().getOnlinePlayers(); // Needed for sanity here, the Bukkit API is a bit broken in the sense it only allows subclasses of Player to this list + } + catch (NoSuchMethodError ex) + { + try + { + return Arrays.asList((Player[])oldGetOnlinePlayers.invoke(getServer())); + } + catch (InvocationTargetException ex1) + { + throw Throwables.propagate(ex.getCause()); + } + catch (IllegalAccessException ex1) + { + throw new RuntimeException("Error invoking oldGetOnlinePlayers", ex1); + } + } + } + + @Override + public Iterable getOnlineUsers() + { + return Iterables.transform(getOnlinePlayers(), new Function() + { + + @Override + public User apply(Player player) + { + return getUser(player); + } + }); + } private static class EssentialsWorldListener implements Listener, Runnable { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index eb3ceed26..32e69fcde 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -435,10 +435,9 @@ public class EssentialsPlayerListener implements Listener final String cmd = event.getMessage().toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH); if (ess.getSettings().getSocialSpyCommands().contains(cmd) || ess.getSettings().getSocialSpyCommands().contains("*")) { - for (Player onlinePlayer : ess.getServer().getOnlinePlayers()) + for (User spyer : ess.getOnlineUsers()) { - final User spyer = ess.getUser(onlinePlayer); - if (spyer.isSocialSpyEnabled() && !player.equals(onlinePlayer)) + if (spyer.isSocialSpyEnabled() && !player.equals(spyer.getBase())) { spyer.sendMessage(player.getDisplayName() + " : " + event.getMessage()); } diff --git a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java index 4c17fda37..8f75445e2 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java @@ -48,7 +48,7 @@ public class EssentialsTimer implements Runnable } lastPoll = startTime; int count = 0; - for (Player player : ess.getServer().getOnlinePlayers()) + for (Player player : ess.getOnlinePlayers()) { count++; if (skip1 > 0) diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java index 1e155976e..3f6f05703 100644 --- a/Essentials/src/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/com/earth2me/essentials/IEssentials.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.api.IWarps; import com.earth2me.essentials.metrics.Metrics; import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.register.payment.Methods; +import java.util.Collection; import java.util.List; import java.util.UUID; import org.bukkit.World; @@ -91,4 +92,8 @@ public interface IEssentials extends Plugin EssentialsTimer getTimer(); List getVanishedPlayers(); + + Collection getOnlinePlayers(); + + Iterable getOnlineUsers(); } diff --git a/Essentials/src/com/earth2me/essentials/PlayerList.java b/Essentials/src/com/earth2me/essentials/PlayerList.java index f0ce2fb84..fb8a1f0bc 100644 --- a/Essentials/src/com/earth2me/essentials/PlayerList.java +++ b/Essentials/src/com/earth2me/essentials/PlayerList.java @@ -49,12 +49,12 @@ public class PlayerList Server server = ess.getServer(); int playerHidden = 0; int hiddenCount = 0; - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User onlinePlayer : ess.getOnlineUsers()) { - if (ess.getUser(onlinePlayer).isHidden() || (user != null && !user.getBase().canSee(onlinePlayer))) + if (onlinePlayer.isHidden() || (user != null && !user.getBase().canSee(onlinePlayer.getBase()))) { playerHidden++; - if (showHidden || user.getBase().canSee(onlinePlayer)) + if (showHidden || user.getBase().canSee(onlinePlayer.getBase())) { hiddenCount++; } @@ -63,11 +63,11 @@ public class PlayerList String online; if (hiddenCount > 0) { - online = tl("listAmountHidden", server.getOnlinePlayers().length - playerHidden, hiddenCount, server.getMaxPlayers()); + online = tl("listAmountHidden", ess.getOnlinePlayers().size() - playerHidden, hiddenCount, server.getMaxPlayers()); } else { - online = tl("listAmount", server.getOnlinePlayers().length - playerHidden, server.getMaxPlayers()); + online = tl("listAmount", ess.getOnlinePlayers().size() - playerHidden, server.getMaxPlayers()); } return online; } @@ -77,11 +77,10 @@ public class PlayerList { Server server = ess.getServer(); final Map> playerList = new HashMap>(); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User onlineUser : ess.getOnlineUsers()) { - final User onlineUser = ess.getUser(onlinePlayer); if ((sender == null && !showHidden && onlineUser.isHidden()) || - (sender != null && !showHidden && !sender.getBase().canSee(onlinePlayer))) + (sender != null && !showHidden && !sender.getBase().canSee(onlineUser.getBase()))) { continue; } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index bca444dde..2487fafc2 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -623,9 +623,8 @@ public class User extends UserData implements Comparable, IReplyTo, net.es this.getBase().kickPlayer(kickReason); - for (Player player : ess.getServer().getOnlinePlayers()) + for (User user : ess.getOnlineUsers()) { - final User user = ess.getUser(player); if (user.isAuthorized("essentials.kick.notify")) { user.sendMessage(tl("playerKicked", Console.NAME, getName(), kickReason)); @@ -765,11 +764,11 @@ public class User extends UserData implements Comparable, IReplyTo, net.es vanished = set; if (set) { - for (Player p : ess.getServer().getOnlinePlayers()) + for (User user : ess.getOnlineUsers()) { - if (!ess.getUser(p).isAuthorized("essentials.vanish.see")) + if (!user.isAuthorized("essentials.vanish.see")) { - p.hidePlayer(getBase()); + user.getBase().hidePlayer(getBase()); } } setHidden(true); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java index 1633fd685..311cb3e13 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandclearinventory.java @@ -5,8 +5,7 @@ import static com.earth2me.essentials.I18n.tl; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.NumberUtil; import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.Collection; import java.util.Locale; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -36,7 +35,7 @@ public class Commandclearinventory extends EssentialsCommand private void parseCommand(Server server, CommandSource sender, String[] args, boolean allowOthers, boolean allowAll) throws Exception { - List players = new ArrayList(); + Collection players = new ArrayList(); int offset = 0; if (sender.isPlayer()) @@ -48,7 +47,7 @@ public class Commandclearinventory extends EssentialsCommand { sender.sendMessage(tl("inventoryClearingFromAll")); offset = 1; - players = Arrays.asList(server.getOnlinePlayers()); + players = ess.getOnlinePlayers(); } else if (allowOthers && args.length > 0 && args[0].trim().length() > 2) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java index 23173661e..54f409b8e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandessentials.java @@ -165,7 +165,7 @@ public class Commandessentials extends EssentialsCommand { return; } - for (Player onlinePlayer : server.getOnlinePlayers()) + for (Player onlinePlayer : ess.getOnlinePlayers()) { onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.NOTE_PIANO, 1, noteMap.get(note)); } @@ -214,7 +214,7 @@ public class Commandessentials extends EssentialsCommand { logger.info(s); } - for (Player player : ess.getServer().getOnlinePlayers()) + for (Player player : ess.getOnlinePlayers()) { player.sendMessage(playerMoo); player.playSound(player.getLocation(), Sound.COW_IDLE, 1, 1.0f); @@ -348,7 +348,7 @@ public class Commandessentials extends EssentialsCommand UUID onlineUUID = null; - for (Player player : server.getOnlinePlayers()) + for (Player player : ess.getOnlinePlayers()) { if (player.getName().equalsIgnoreCase(name)) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java b/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java index ba885731a..745da13e3 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkickall.java @@ -20,7 +20,7 @@ public class Commandkickall extends EssentialsCommand String kickReason = args.length > 0 ? getFinalArg(args, 0) : tl("kickDefault"); kickReason = FormatUtil.replaceFormat(kickReason.replace("\\n", "\n").replace("|", "\n")); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (Player onlinePlayer : ess.getOnlinePlayers()) { if (!sender.isPlayer() || !onlinePlayer.getName().equalsIgnoreCase(sender.getPlayer().getName())) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java index 366b525e0..fb8914fe4 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnick.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnick.java @@ -109,7 +109,7 @@ public class Commandnick extends EssentialsLoopCommand private boolean nickInUse(final Server server, final User target, String nick) { final String lowerNick = FormatUtil.stripFormat(nick.toLowerCase(Locale.ENGLISH)); - for (final Player onlinePlayer : server.getOnlinePlayers()) + for (final Player onlinePlayer : ess.getOnlinePlayers()) { if (target.getBase().getName().equals(onlinePlayer.getName())) { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java b/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java index 7e6e347c3..e82c46c8d 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandnuke.java @@ -3,8 +3,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.CommandSource; import static com.earth2me.essentials.I18n.tl; import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.Collection; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.World; @@ -22,7 +21,7 @@ public class Commandnuke extends EssentialsCommand @Override protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws NoSuchFieldException, NotEnoughArgumentsException { - List targets; + Collection targets; if (args.length > 0) { targets = new ArrayList(); @@ -35,7 +34,7 @@ public class Commandnuke extends EssentialsCommand } else { - targets = Arrays.asList(server.getOnlinePlayers()); + targets = ess.getOnlinePlayers(); } ess.getTNTListener().enable(); for (Player player : targets) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandptime.java b/Essentials/src/com/earth2me/essentials/commands/Commandptime.java index c14f31cbb..6bd748bff 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandptime.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandptime.java @@ -197,9 +197,9 @@ public class Commandptime extends EssentialsCommand } else { - for (Player player : server.getOnlinePlayers()) + for (User user : ess.getOnlineUsers()) { - users.add(ess.getUser(player)); + users.add(user); } } return users; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpweather.java b/Essentials/src/com/earth2me/essentials/commands/Commandpweather.java index cf47e8b17..9aec1ff6b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandpweather.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpweather.java @@ -147,9 +147,9 @@ public class Commandpweather extends EssentialsCommand } else { - for (Player player : server.getOnlinePlayers()) + for (User user : ess.getOnlineUsers()) { - users.add(ess.getUser(player)); + users.add(user); } } return users; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java index a292316bd..55cdadbfb 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrealname.java @@ -26,10 +26,9 @@ public class Commandrealname extends EssentialsCommand final String whois = args[0].toLowerCase(Locale.ENGLISH); boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished(); boolean foundUser = false; - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User u: ess.getOnlineUsers()) { - final User u = ess.getUser(onlinePlayer); - if (skipHidden && u.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlinePlayer)) + if (skipHidden && u.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(u.getBase())) { continue; } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java index 572083540..4cbd9603b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpaall.java @@ -34,9 +34,8 @@ public class Commandtpaall extends EssentialsCommand private void teleportAAllPlayers(final Server server, final CommandSource sender, final User target) { sender.sendMessage(tl("teleportAAll")); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User player : ess.getOnlineUsers()) { - final User player = ess.getUser(onlinePlayer); if (target == player) { continue; diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java index 503d29e98..c850fad2e 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandtpall.java @@ -37,9 +37,8 @@ public class Commandtpall extends EssentialsCommand { sender.sendMessage(tl("teleportAll")); final Location loc = target.getLocation(); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User player : ess.getOnlineUsers()) { - final User player = ess.getUser(onlinePlayer); if (target == player) { continue; diff --git a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java index 71d45a288..ee605ffb3 100644 --- a/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/com/earth2me/essentials/commands/EssentialsCommand.java @@ -137,10 +137,8 @@ public abstract class EssentialsCommand implements IEssentialsCommand if (matches.isEmpty()) { final String matchText = searchTerm.toLowerCase(Locale.ENGLISH); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User userMatch : ess.getOnlineUsers()) { - final User userMatch = ess.getUser(onlinePlayer); - if (getHidden || canInteractWith(sourceUser, userMatch)) { final String displayName = FormatUtil.stripFormat(userMatch.getDisplayName()).toLowerCase(Locale.ENGLISH); diff --git a/Essentials/src/com/earth2me/essentials/commands/EssentialsLoopCommand.java b/Essentials/src/com/earth2me/essentials/commands/EssentialsLoopCommand.java index 7dfa594fc..ccb297f14 100644 --- a/Essentials/src/com/earth2me/essentials/commands/EssentialsLoopCommand.java +++ b/Essentials/src/com/earth2me/essentials/commands/EssentialsLoopCommand.java @@ -38,10 +38,9 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand else if (matchWildcards && searchTerm.contentEquals("*")) { boolean skipHidden = sender.isPlayer() && !ess.getUser(sender.getPlayer()).canInteractVanished(); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User onlineUser : ess.getOnlineUsers()) { - final User onlineUser = ess.getUser(onlinePlayer); - if (skipHidden && onlineUser.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlinePlayer)) + if (skipHidden && onlineUser.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlineUser.getBase())) { continue; } @@ -85,10 +84,9 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand if (matchWildcards && (searchTerm.contentEquals("**") || searchTerm.contentEquals("*"))) { - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User onlineUser : ess.getOnlineUsers()) { - final User onlineUser = ess.getUser(onlinePlayer); - if (skipHidden && onlineUser.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlinePlayer)) + if (skipHidden && onlineUser.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlineUser.getBase())) { continue; } @@ -107,10 +105,9 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand if (matchedPlayers.isEmpty()) { final String matchText = searchTerm.toLowerCase(Locale.ENGLISH); - for (Player onlinePlayer : server.getOnlinePlayers()) + for (User player : ess.getOnlineUsers()) { - final User player = ess.getUser(onlinePlayer); - if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(onlinePlayer)) + if (skipHidden && player.isHidden(sender.getPlayer()) && !sender.getPlayer().canSee(player.getBase())) { continue; } diff --git a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java index 5ecf9c60d..07229f091 100644 --- a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java +++ b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java @@ -24,6 +24,7 @@ package com.earth2me.essentials.metrics; * should not be interpreted as representing official policies, either expressed or implied, of anybody else. */ +import com.earth2me.essentials.IEssentials; import java.io.*; import java.net.Proxy; import java.net.URL; @@ -352,7 +353,7 @@ public class Metrics boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled String pluginVersion = description.getVersion(); String serverVersion = Bukkit.getVersion(); - int playersOnline = Bukkit.getServer().getOnlinePlayers().length; + int playersOnline = ((IEssentials)plugin).getOnlinePlayers().size(); // END server software specific section -- all code below does not use any code outside of this class / Java diff --git a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java index 111c1b3cd..3395a4b7f 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java +++ b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java @@ -166,14 +166,14 @@ public class KeywordReplacer implements IText break; case ONLINE: int playerHidden = 0; - for (Player p : ess.getServer().getOnlinePlayers()) + for (User u : ess.getOnlineUsers()) { - if (ess.getUser(p).isHidden()) + if (u.isHidden()) { playerHidden++; } } - replacer = Integer.toString(ess.getServer().getOnlinePlayers().length - playerHidden); + replacer = Integer.toString(ess.getOnlinePlayers().size() - playerHidden); break; case UNIQUE: replacer = Integer.toString(ess.getUserMap().getUniqueUsers()); diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java index ca989f21a..e11d4ab76 100644 --- a/Essentials/test/com/earth2me/essentials/FakeServer.java +++ b/Essentials/test/com/earth2me/essentials/FakeServer.java @@ -74,11 +74,17 @@ public class FakeServer implements Server } @Override - public Player[] getOnlinePlayers() + public Player[] _INVALID_getOnlinePlayers() { return players.toArray(new Player[0]); } + @Override + public Collection getOnlinePlayers() + { + return players; + } + public void setOnlinePlayers(List players) { this.players = players; diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java index ab7cf986c..f1a2cd21d 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java @@ -149,4 +149,10 @@ public class EssentialsXMPP extends JavaPlugin implements IEssentialsXMPP // Ignore exceptions } } + + @Override + public IEssentials getEss() + { + return ess; + } } diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java index df329156d..cdc964cb1 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/IEssentialsXMPP.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.xmpp; +import com.earth2me.essentials.IEssentials; import net.ess3.api.IUser; import java.util.List; import org.bukkit.entity.Player; @@ -25,4 +26,6 @@ public interface IEssentialsXMPP extends Plugin boolean toggleSpy(final Player user); void broadcastMessage(final IUser sender, final String message, final String xmppAddress); + + IEssentials getEss(); } diff --git a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java index 3d82670d1..a0ffd72e1 100644 --- a/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java +++ b/EssentialsXMPP/src/com/earth2me/essentials/xmpp/XMPPManager.java @@ -163,7 +163,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager final int usercount; final StringBuilder stringBuilder = new StringBuilder(); - usercount = parent.getServer().getOnlinePlayers().length; + usercount = parent.getEss().getOnlinePlayers().size(); if (usercount == 0) { -- cgit v1.2.3