From 72e99a8833dfb54f529e673617679b053e9f8d3f Mon Sep 17 00:00:00 2001 From: vemacs Date: Sun, 29 Nov 2015 16:22:51 -0700 Subject: [PATCH] Fall back to CraftBukkit userCache or Mojang for UUID lookups --- .../src/com/earth2me/essentials/UserMap.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java index 0aa2efb7f..cc43685c2 100644 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/UserMap.java @@ -1,11 +1,13 @@ package com.earth2me.essentials; import com.earth2me.essentials.utils.StringUtil; +import com.google.common.base.Charsets; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.util.concurrent.UncheckedExecutionException; import net.ess3.api.IEssentials; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.io.File; @@ -66,10 +68,20 @@ public class UserMap extends CacheLoader implements IConf { public User getUser(final String name) { try { + User offlineUser = null; final String sanitizedName = StringUtil.safeString(name); if (names.containsKey(sanitizedName)) { final UUID uuid = names.get(sanitizedName); - return getUser(uuid); + offlineUser = getUser(uuid); + } else { + UUID bukkitUuid = getIdFromBukkit(sanitizedName); + if (bukkitUuid != null) { + names.put(sanitizedName, bukkitUuid); + offlineUser = getUser(bukkitUuid); + } + } + if (offlineUser != null) { + return offlineUser; } final File userFile = getUserFileFromString(sanitizedName); @@ -210,4 +222,15 @@ public class UserMap extends CacheLoader implements IConf { // } // } // } + + @SuppressWarnings("deprecation") + private UUID getIdFromBukkit(String name) { + ess.getLogger().warning("Using potentially blocking Bukkit UUID lookup for: " + name); + UUID uuid = Bukkit.getOfflinePlayer(name).getUniqueId(); + if (uuid.equals(UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)))) { + return null; + } else { + return uuid; + } + } }