From 7e9328bd250ed6cf3743ff596ade0c60120f83aa Mon Sep 17 00:00:00 2001 From: KHobbits Date: Sat, 7 Jun 2014 15:45:57 +0100 Subject: Try to use consistent UUIDs and not rely on Bukkit lookup while saving. --- .../earth2me/essentials/EssentialsUserConf.java | 4 +- Essentials/src/com/earth2me/essentials/User.java | 2 +- .../src/com/earth2me/essentials/UserData.java | 12 +++++- .../src/com/earth2me/essentials/UserMap.java | 45 ++++++++++++---------- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsUserConf.java b/Essentials/src/com/earth2me/essentials/EssentialsUserConf.java index f55d2c876..cbfba46b1 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsUserConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsUserConf.java @@ -12,8 +12,8 @@ import org.bukkit.Bukkit; public class EssentialsUserConf extends EssentialsConf { - final String username; - final UUID uuid; + public final String username; + public final UUID uuid; public EssentialsUserConf(final String username, final UUID uuid, final File configFile) { diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index 10afdfa98..f4a1ed5a0 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -240,7 +240,7 @@ public class User extends UserData implements Comparable, IReplyTo, net.es { if (!base.isOnline()) { - this.base = new OfflinePlayer(base.getUniqueId(), ess.getServer()); + this.base = new OfflinePlayer(getConfigUUID(), ess.getServer()); } cleanup(); } diff --git a/Essentials/src/com/earth2me/essentials/UserData.java b/Essentials/src/com/earth2me/essentials/UserData.java index a60e2f0dc..863edd049 100644 --- a/Essentials/src/com/earth2me/essentials/UserData.java +++ b/Essentials/src/com/earth2me/essentials/UserData.java @@ -50,7 +50,10 @@ public abstract class UserData extends PlayerExtension implements IConf { config.forceSave(); config.getFile().delete(); - ess.getUserMap().removeUser(this.getBase().getName()); + if (config.username != null) + { + ess.getUserMap().removeUser(config.username); + } } public final void cleanup() @@ -838,7 +841,7 @@ public abstract class UserData extends PlayerExtension implements IConf this.lastAccountName = lastAccountName; config.setProperty("lastAccountName", lastAccountName); config.save(); - ess.getUserMap().trackUUID(base.getUniqueId(), lastAccountName); + ess.getUserMap().trackUUID(getConfigUUID(), lastAccountName); } public void setNPC(boolean set) @@ -968,6 +971,11 @@ public abstract class UserData extends PlayerExtension implements IConf return new HashMap(); } + public UUID getConfigUUID() + { + return config.uuid; + } + public void save() { config.save(); diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java index 567c1a0d4..5719ee2b8 100644 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/UserMap.java @@ -29,7 +29,7 @@ public class UserMap extends CacheLoader implements IConf private final transient ConcurrentSkipListMap names = new ConcurrentSkipListMap(); private final transient ConcurrentSkipListMap> history = new ConcurrentSkipListMap>(); private UUIDMap uuidMap; - + public UserMap(final IEssentials ess) { super(); @@ -39,7 +39,7 @@ public class UserMap extends CacheLoader implements IConf //users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().removalListener(remListener).build(this); users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().build(this); } - + private void loadAllUsersAsync(final IEssentials ess) { ess.runTaskAsynchronously(new Runnable() @@ -77,12 +77,12 @@ public class UserMap extends CacheLoader implements IConf } }); } - + public boolean userExists(final UUID uuid) { return keys.contains(uuid); } - + public User getUser(final String name) { try @@ -109,7 +109,7 @@ public class UserMap extends CacheLoader implements IConf return null; } } - + public User getUser(final UUID uuid) { try @@ -125,7 +125,7 @@ public class UserMap extends CacheLoader implements IConf return null; } } - + public void trackUUID(final UUID uuid, final String name) { if (uuid != null) @@ -142,7 +142,7 @@ public class UserMap extends CacheLoader implements IConf } } } - + @Override public User load(final String stringUUID) throws Exception { @@ -154,9 +154,9 @@ public class UserMap extends CacheLoader implements IConf trackUUID(uuid, user.getName()); return user; } - + final File userFile = getUserFileFromID(uuid); - + if (userFile.exists()) { player = new OfflinePlayer(uuid, ess.getServer()); @@ -165,24 +165,29 @@ public class UserMap extends CacheLoader implements IConf trackUUID(uuid, user.getName()); return user; } - + throw new Exception("User not found!"); } - + @Override public void reloadConfig() { getUUIDMap().forceWriteUUIDMap(); loadAllUsersAsync(ess); } - + public void invalidateAll() { users.invalidateAll(); } - + public void removeUser(final String name) { + if (names == null) + { + ess.getLogger().warning("Name collection is null, cannot remove user."); + return; + } UUID uuid = names.get(name); if (uuid != null) { @@ -192,12 +197,12 @@ public class UserMap extends CacheLoader implements IConf names.remove(name); names.remove(StringUtil.safeString(name)); } - + public Set getAllUniqueUsers() { return Collections.unmodifiableSet(keys.clone()); } - + public int getUniqueUsers() { return keys.size(); @@ -207,28 +212,28 @@ public class UserMap extends CacheLoader implements IConf { return names; } - + protected ConcurrentSkipListMap> getHistory() { return history; } - + public List getUserHistory(final UUID uuid) { return history.get(uuid); } - + public UUIDMap getUUIDMap() { return uuidMap; } - + private File getUserFileFromID(final UUID uuid) { final File userFolder = new File(ess.getDataFolder(), "userdata"); return new File(userFolder, uuid.toString() + ".yml"); } - + public File getUserFileFromString(final String name) { final File userFolder = new File(ess.getDataFolder(), "userdata"); -- cgit v1.2.3