mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-29 16:46:46 +01:00
Save and load profiles using UUIDs
fall back on usernames if neccesary
This commit is contained in:
parent
e619e01c23
commit
792f21bc20
@ -95,6 +95,18 @@ public interface DatabaseManager {
|
|||||||
*/
|
*/
|
||||||
public PlayerProfile loadPlayerProfile(UUID uuid, boolean createNew);
|
public PlayerProfile loadPlayerProfile(UUID uuid, boolean createNew);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a player from the database. Attempt to use uuid, fall back on playername
|
||||||
|
*
|
||||||
|
* @param playerName The name of the player to load from the database
|
||||||
|
* @param uuid The uuid of the player to load from the database
|
||||||
|
* @param createNew Whether to create a new record if the player is not
|
||||||
|
* found
|
||||||
|
* @return The player's data, or an unloaded PlayerProfile if not found
|
||||||
|
* and createNew is false
|
||||||
|
*/
|
||||||
|
public PlayerProfile loadPlayerProfile(String playerName, UUID uuid, boolean createNew);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all users currently stored in the database.
|
* Get all users currently stored in the database.
|
||||||
*
|
*
|
||||||
|
@ -210,6 +210,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
public boolean saveUser(PlayerProfile profile) {
|
public boolean saveUser(PlayerProfile profile) {
|
||||||
String playerName = profile.getPlayerName();
|
String playerName = profile.getPlayerName();
|
||||||
|
UUID uuid = profile.getUniqueId();
|
||||||
|
|
||||||
BufferedReader in = null;
|
BufferedReader in = null;
|
||||||
FileWriter out = null;
|
FileWriter out = null;
|
||||||
@ -224,8 +225,9 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
// While not at the end of the file
|
// While not at the end of the file
|
||||||
while ((line = in.readLine()) != null) {
|
while ((line = in.readLine()) != null) {
|
||||||
// Read the line in and copy it to the output it's not the player we want to edit
|
// Read the line in and copy it to the output if it's not the player we want to edit
|
||||||
if (!line.split(":")[0].equalsIgnoreCase(playerName)) {
|
String[] character = line.split(":");
|
||||||
|
if (!character[41].equalsIgnoreCase(uuid.toString()) && !character[0].equalsIgnoreCase(playerName)) {
|
||||||
writer.append(line).append("\r\n");
|
writer.append(line).append("\r\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -272,8 +274,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
writer.append(mobHealthbarType == null ? Config.getInstance().getMobHealthbarDefault().toString() : mobHealthbarType.toString()).append(":");
|
writer.append(mobHealthbarType == null ? Config.getInstance().getMobHealthbarDefault().toString() : mobHealthbarType.toString()).append(":");
|
||||||
writer.append(profile.getSkillLevel(SkillType.ALCHEMY)).append(":");
|
writer.append(profile.getSkillLevel(SkillType.ALCHEMY)).append(":");
|
||||||
writer.append(profile.getSkillXpLevel(SkillType.ALCHEMY)).append(":");
|
writer.append(profile.getSkillXpLevel(SkillType.ALCHEMY)).append(":");
|
||||||
UUID uuid = profile.getUniqueId();
|
writer.append(uuid.toString()).append(":");
|
||||||
writer.append(uuid == null ? "" : uuid.toString()).append(":");
|
|
||||||
writer.append("\r\n");
|
writer.append("\r\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -389,7 +390,11 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
return loadPlayerProfile("", uuid.toString(), create);
|
return loadPlayerProfile("", uuid.toString(), create);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerProfile loadPlayerProfile(String playerName, String uuid, boolean create) {
|
public PlayerProfile loadPlayerProfile(String playerName, UUID uuid, boolean create) {
|
||||||
|
return loadPlayerProfile(playerName, uuid.toString(), create);
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayerProfile loadPlayerProfile(String playerName, String uuid, boolean create) {
|
||||||
BufferedReader in = null;
|
BufferedReader in = null;
|
||||||
String usersFilePath = mcMMO.getUsersFilePath();
|
String usersFilePath = mcMMO.getUsersFilePath();
|
||||||
|
|
||||||
@ -403,7 +408,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
// Find if the line contains the player we want.
|
// Find if the line contains the player we want.
|
||||||
String[] character = line.split(":");
|
String[] character = line.split(":");
|
||||||
|
|
||||||
if (!character[41].equalsIgnoreCase(uuid) || !character[0].equalsIgnoreCase(playerName)) {
|
if (!character[41].equalsIgnoreCase(uuid) && !character[0].equalsIgnoreCase(playerName)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,7 +448,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
return new PlayerProfile(playerName);
|
return new PlayerProfile(playerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PlayerProfile(UUID.fromString(uuid));
|
return new PlayerProfile(playerName, UUID.fromString(uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convertUsers(DatabaseManager destination) {
|
public void convertUsers(DatabaseManager destination) {
|
||||||
|
@ -360,6 +360,10 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
return loadPlayerProfile("", uuid.toString(), create, true);
|
return loadPlayerProfile("", uuid.toString(), create, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PlayerProfile loadPlayerProfile(String playerName, UUID uuid, boolean create) {
|
||||||
|
return loadPlayerProfile(playerName, uuid.toString(), create, true);
|
||||||
|
}
|
||||||
|
|
||||||
private PlayerProfile loadPlayerProfile(String playerName, String uuid, boolean create, boolean retry) {
|
private PlayerProfile loadPlayerProfile(String playerName, String uuid, boolean create, boolean retry) {
|
||||||
if (!checkConnected()) {
|
if (!checkConnected()) {
|
||||||
return new PlayerProfile(playerName, false); // return fake profile if not connected
|
return new PlayerProfile(playerName, false); // return fake profile if not connected
|
||||||
|
@ -95,15 +95,16 @@ public class McMMOPlayer {
|
|||||||
|
|
||||||
public McMMOPlayer(Player player) {
|
public McMMOPlayer(Player player) {
|
||||||
String playerName = player.getName();
|
String playerName = player.getName();
|
||||||
|
UUID uuid = player.getUniqueId();
|
||||||
|
|
||||||
this.player = player;
|
this.player = player;
|
||||||
playerMetadata = new FixedMetadataValue(mcMMO.p, playerName);
|
playerMetadata = new FixedMetadataValue(mcMMO.p, playerName);
|
||||||
profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, true);
|
profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, uuid, true);
|
||||||
party = PartyManager.getPlayerParty(playerName);
|
party = PartyManager.getPlayerParty(playerName);
|
||||||
ptpRecord = new PartyTeleportRecord();
|
ptpRecord = new PartyTeleportRecord();
|
||||||
|
|
||||||
if (!player.getUniqueId().equals(profile.getUniqueId())) {
|
if (profile.getUniqueId() == null) {
|
||||||
profile.setUniqueId(player.getUniqueId());
|
profile.setUniqueId(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -34,23 +34,12 @@ public class PlayerProfile {
|
|||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public PlayerProfile(String playerName) {
|
public PlayerProfile(String playerName) {
|
||||||
this.playerName = playerName;
|
this(playerName, null);
|
||||||
|
|
||||||
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
|
||||||
|
|
||||||
for (AbilityType abilityType : AbilityType.values()) {
|
|
||||||
abilityDATS.put(abilityType, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (SkillType skillType : SkillType.NON_CHILD_SKILLS) {
|
|
||||||
skills.put(skillType, 0);
|
|
||||||
skillsXp.put(skillType, 0F);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerProfile(UUID uuid) {
|
public PlayerProfile(String playerName, UUID uuid) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.playerName = null;
|
this.playerName = playerName;
|
||||||
|
|
||||||
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
||||||
|
|
||||||
@ -71,7 +60,7 @@ public class PlayerProfile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public PlayerProfile(String playerName, UUID uuid, boolean isLoaded) {
|
public PlayerProfile(String playerName, UUID uuid, boolean isLoaded) {
|
||||||
this(uuid);
|
this(playerName, uuid);
|
||||||
this.loaded = isLoaded;
|
this.loaded = isLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +90,7 @@ public class PlayerProfile {
|
|||||||
changed = !mcMMO.getDatabaseManager().saveUser(profileCopy);
|
changed = !mcMMO.getDatabaseManager().saveUser(profileCopy);
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
mcMMO.p.getLogger().warning("PlayerProfile for " + playerName + " failed to save");
|
mcMMO.p.getLogger().warning("PlayerProfile saving failed for player: " + playerName + " " + uuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user