mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-08-03 11:06:08 +00:00
Try to use consistent UUIDs and not rely on Bukkit lookup while saving.
This commit is contained in:
parent
9d9af25c7f
commit
7e9328bd25
4 changed files with 38 additions and 25 deletions
|
@ -12,8 +12,8 @@ import org.bukkit.Bukkit;
|
||||||
|
|
||||||
public class EssentialsUserConf extends EssentialsConf
|
public class EssentialsUserConf extends EssentialsConf
|
||||||
{
|
{
|
||||||
final String username;
|
public final String username;
|
||||||
final UUID uuid;
|
public final UUID uuid;
|
||||||
|
|
||||||
public EssentialsUserConf(final String username, final UUID uuid, final File configFile)
|
public EssentialsUserConf(final String username, final UUID uuid, final File configFile)
|
||||||
{
|
{
|
||||||
|
|
|
@ -240,7 +240,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
|
||||||
{
|
{
|
||||||
if (!base.isOnline())
|
if (!base.isOnline())
|
||||||
{
|
{
|
||||||
this.base = new OfflinePlayer(base.getUniqueId(), ess.getServer());
|
this.base = new OfflinePlayer(getConfigUUID(), ess.getServer());
|
||||||
}
|
}
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,10 @@ public abstract class UserData extends PlayerExtension implements IConf
|
||||||
{
|
{
|
||||||
config.forceSave();
|
config.forceSave();
|
||||||
config.getFile().delete();
|
config.getFile().delete();
|
||||||
ess.getUserMap().removeUser(this.getBase().getName());
|
if (config.username != null)
|
||||||
|
{
|
||||||
|
ess.getUserMap().removeUser(config.username);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void cleanup()
|
public final void cleanup()
|
||||||
|
@ -838,7 +841,7 @@ public abstract class UserData extends PlayerExtension implements IConf
|
||||||
this.lastAccountName = lastAccountName;
|
this.lastAccountName = lastAccountName;
|
||||||
config.setProperty("lastAccountName", lastAccountName);
|
config.setProperty("lastAccountName", lastAccountName);
|
||||||
config.save();
|
config.save();
|
||||||
ess.getUserMap().trackUUID(base.getUniqueId(), lastAccountName);
|
ess.getUserMap().trackUUID(getConfigUUID(), lastAccountName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNPC(boolean set)
|
public void setNPC(boolean set)
|
||||||
|
@ -968,6 +971,11 @@ public abstract class UserData extends PlayerExtension implements IConf
|
||||||
return new HashMap<String, Object>();
|
return new HashMap<String, Object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UUID getConfigUUID()
|
||||||
|
{
|
||||||
|
return config.uuid;
|
||||||
|
}
|
||||||
|
|
||||||
public void save()
|
public void save()
|
||||||
{
|
{
|
||||||
config.save();
|
config.save();
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
private final transient ConcurrentSkipListMap<String, UUID> names = new ConcurrentSkipListMap<String, UUID>();
|
private final transient ConcurrentSkipListMap<String, UUID> names = new ConcurrentSkipListMap<String, UUID>();
|
||||||
private final transient ConcurrentSkipListMap<UUID, ArrayList<String>> history = new ConcurrentSkipListMap<UUID, ArrayList<String>>();
|
private final transient ConcurrentSkipListMap<UUID, ArrayList<String>> history = new ConcurrentSkipListMap<UUID, ArrayList<String>>();
|
||||||
private UUIDMap uuidMap;
|
private UUIDMap uuidMap;
|
||||||
|
|
||||||
public UserMap(final IEssentials ess)
|
public UserMap(final IEssentials ess)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
@ -39,7 +39,7 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
//users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().removalListener(remListener).build(this);
|
//users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().removalListener(remListener).build(this);
|
||||||
users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().build(this);
|
users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().build(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadAllUsersAsync(final IEssentials ess)
|
private void loadAllUsersAsync(final IEssentials ess)
|
||||||
{
|
{
|
||||||
ess.runTaskAsynchronously(new Runnable()
|
ess.runTaskAsynchronously(new Runnable()
|
||||||
|
@ -77,12 +77,12 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean userExists(final UUID uuid)
|
public boolean userExists(final UUID uuid)
|
||||||
{
|
{
|
||||||
return keys.contains(uuid);
|
return keys.contains(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public User getUser(final String name)
|
public User getUser(final String name)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -109,7 +109,7 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public User getUser(final UUID uuid)
|
public User getUser(final UUID uuid)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -125,7 +125,7 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void trackUUID(final UUID uuid, final String name)
|
public void trackUUID(final UUID uuid, final String name)
|
||||||
{
|
{
|
||||||
if (uuid != null)
|
if (uuid != null)
|
||||||
|
@ -142,7 +142,7 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public User load(final String stringUUID) throws Exception
|
public User load(final String stringUUID) throws Exception
|
||||||
{
|
{
|
||||||
|
@ -154,9 +154,9 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
trackUUID(uuid, user.getName());
|
trackUUID(uuid, user.getName());
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
final File userFile = getUserFileFromID(uuid);
|
final File userFile = getUserFileFromID(uuid);
|
||||||
|
|
||||||
if (userFile.exists())
|
if (userFile.exists())
|
||||||
{
|
{
|
||||||
player = new OfflinePlayer(uuid, ess.getServer());
|
player = new OfflinePlayer(uuid, ess.getServer());
|
||||||
|
@ -165,24 +165,29 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
trackUUID(uuid, user.getName());
|
trackUUID(uuid, user.getName());
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Exception("User not found!");
|
throw new Exception("User not found!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reloadConfig()
|
public void reloadConfig()
|
||||||
{
|
{
|
||||||
getUUIDMap().forceWriteUUIDMap();
|
getUUIDMap().forceWriteUUIDMap();
|
||||||
loadAllUsersAsync(ess);
|
loadAllUsersAsync(ess);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void invalidateAll()
|
public void invalidateAll()
|
||||||
{
|
{
|
||||||
users.invalidateAll();
|
users.invalidateAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeUser(final String name)
|
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);
|
UUID uuid = names.get(name);
|
||||||
if (uuid != null)
|
if (uuid != null)
|
||||||
{
|
{
|
||||||
|
@ -192,12 +197,12 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
names.remove(name);
|
names.remove(name);
|
||||||
names.remove(StringUtil.safeString(name));
|
names.remove(StringUtil.safeString(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<UUID> getAllUniqueUsers()
|
public Set<UUID> getAllUniqueUsers()
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableSet(keys.clone());
|
return Collections.unmodifiableSet(keys.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUniqueUsers()
|
public int getUniqueUsers()
|
||||||
{
|
{
|
||||||
return keys.size();
|
return keys.size();
|
||||||
|
@ -207,28 +212,28 @@ public class UserMap extends CacheLoader<String, User> implements IConf
|
||||||
{
|
{
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ConcurrentSkipListMap<UUID, ArrayList<String>> getHistory()
|
protected ConcurrentSkipListMap<UUID, ArrayList<String>> getHistory()
|
||||||
{
|
{
|
||||||
return history;
|
return history;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getUserHistory(final UUID uuid)
|
public List<String> getUserHistory(final UUID uuid)
|
||||||
{
|
{
|
||||||
return history.get(uuid);
|
return history.get(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUIDMap getUUIDMap()
|
public UUIDMap getUUIDMap()
|
||||||
{
|
{
|
||||||
return uuidMap;
|
return uuidMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private File getUserFileFromID(final UUID uuid)
|
private File getUserFileFromID(final UUID uuid)
|
||||||
{
|
{
|
||||||
final File userFolder = new File(ess.getDataFolder(), "userdata");
|
final File userFolder = new File(ess.getDataFolder(), "userdata");
|
||||||
return new File(userFolder, uuid.toString() + ".yml");
|
return new File(userFolder, uuid.toString() + ".yml");
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getUserFileFromString(final String name)
|
public File getUserFileFromString(final String name)
|
||||||
{
|
{
|
||||||
final File userFolder = new File(ess.getDataFolder(), "userdata");
|
final File userFolder = new File(ess.getDataFolder(), "userdata");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue