Skip to content

Commit 53bb114

Browse files
Optimize player finder, cache all players when it >5k
1 parent 39d73cc commit 53bb114

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/main/java/org/maxgamer/quickshop/util/PlayerFinder.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
*/
4040
public final class PlayerFinder {
4141

42-
private static final Cache<String, UUID> string2UUIDCache = CacheBuilder.newBuilder().expireAfterAccess(30, TimeUnit.MINUTES).build();
42+
private static final Cache<String, UUID> string2UUIDCache = CacheBuilder.newBuilder().expireAfterAccess(60, TimeUnit.MINUTES).build();
4343

4444
private PlayerFinder() {
4545
}
@@ -49,11 +49,17 @@ public static UUID findUUIDByName(String name) {
4949
}
5050

5151
@Nullable
52-
private static OfflinePlayer findPlayerByName(String name, Iterable<? extends OfflinePlayer> players) {
52+
private static OfflinePlayer findPlayerByName(String name, java.util.Collection<? extends org.bukkit.OfflinePlayer> players) {
53+
//Cache all players when offline player is too much
54+
boolean cacheAllPlayers = players.size() > 5000;
5355
for (OfflinePlayer player : players) {
5456
String playerName = player.getName();
55-
if (playerName != null && playerName.equalsIgnoreCase(name)) {
56-
return player;
57+
if (playerName != null) {
58+
if (playerName.equalsIgnoreCase(name)) {
59+
return player;
60+
} else if (cacheAllPlayers) {
61+
string2UUIDCache.put(playerName.toLowerCase(Locale.ROOT), player.getUniqueId());
62+
}
5763
}
5864
}
5965
return null;

0 commit comments

Comments
 (0)