OpenInv/src/main/java/com/lishid/openinv/utils/UUIDUtil.java

73 lines
2.2 KiB
Java
Raw Normal View History

2015-06-22 12:03:03 +10:00
package com.lishid.openinv.utils;
import java.util.Arrays;
2015-06-23 13:31:26 +10:00
import java.util.Collection;
2015-06-22 12:03:03 +10:00
import java.util.Map;
import java.util.UUID;
2015-06-23 13:31:26 +10:00
import org.apache.commons.lang.Validate;
2015-06-22 12:03:03 +10:00
import org.bukkit.Bukkit;
2015-06-23 19:05:26 +10:00
import org.bukkit.OfflinePlayer;
2015-06-23 13:31:26 +10:00
import org.bukkit.entity.Player;
2015-06-22 12:03:03 +10:00
public class UUIDUtil {
2015-06-23 13:31:26 +10:00
private static Player getPlayer(String name) {
Validate.notNull(name, "Name cannot be null");
Player found = null;
String lowerName = name.toLowerCase();
int delta = Integer.MAX_VALUE;
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
for (Player player : players) {
if (player.getName().toLowerCase().startsWith(lowerName)) {
int curDelta = player.getName().length() - lowerName.length();
if (curDelta < delta) {
found = player;
delta = curDelta;
}
if (curDelta == 0) break;
}
}
return found;
}
2015-06-23 19:05:26 +10:00
@SuppressWarnings("deprecation")
2015-07-10 19:44:45 +10:00
private static UUID getUUIDLocally(String name) {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
return offlinePlayer.hasPlayedBefore() ? offlinePlayer.getUniqueId() : null;
}
2015-06-22 12:03:03 +10:00
public static UUID getUUIDOf(String name) {
2015-07-10 19:44:45 +10:00
UUID uuid;
2015-06-23 13:31:26 +10:00
Player player = getPlayer(name);
2015-06-22 12:03:03 +10:00
2015-06-23 13:31:26 +10:00
if (player != null) {
uuid = player.getUniqueId();
2015-06-22 12:03:03 +10:00
}
2015-06-23 13:31:26 +10:00
else {
2015-07-10 19:44:45 +10:00
if (Bukkit.getServer().getOnlineMode()) {
if (!Bukkit.getServer().isPrimaryThread()) {
UUIDFetcher fetcher = new UUIDFetcher(Arrays.asList(name));
Map<String, UUID> response;
2015-06-23 19:07:19 +10:00
2015-07-10 19:44:45 +10:00
try {
response = fetcher.call();
uuid = response.get(name.toLowerCase());
}
catch (Exception e) {
uuid = getUUIDLocally(name);
}
} else {
uuid = getUUIDLocally(name);
2015-06-23 19:05:26 +10:00
}
2015-07-10 19:44:45 +10:00
} else {
uuid = getUUIDLocally(name);
2015-06-23 13:31:26 +10:00
}
2015-06-22 12:03:03 +10:00
}
return uuid;
}
}