From 72264205d097c3e2c20eec06f775a1de9a02ba73 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 5 Mar 2021 14:27:53 -0800 Subject: [PATCH] Update player names immediately when change is detected --- Changelog.txt | 1 + .../database/FlatfileDatabaseManager.java | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 16cd6453b..abede221e 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,6 @@ Version 2.1.177 Environmentally aware will now protect Wolves from Magma blocks + Fixed a bug where mcMMO would fail to update a players name when it detected a name change Version 2.1.176 Another fix for Double Smelt bringing item stack size to illegal values diff --git a/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java index 4c9753373..a00553eb5 100644 --- a/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java @@ -14,6 +14,7 @@ import com.gmail.nossr50.datatypes.skills.SuperAbilityType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask; import com.gmail.nossr50.util.Misc; +import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.text.StringUtils; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; @@ -477,6 +478,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager { } public PlayerProfile loadPlayerProfile(String playerName, UUID uuid, boolean create) { + boolean updateRequired = false; BufferedReader in = null; String usersFilePath = mcMMO.getUsersFilePath(); @@ -504,11 +506,12 @@ public final class FlatfileDatabaseManager implements DatabaseManager { // Update playerName in database after name change if (!character[USERNAME].equalsIgnoreCase(playerName)) { - mcMMO.p.debug("Name change detected: " + character[USERNAME] + " => " + playerName); +// mcMMO.p.debug("Name change detected: " + character[USERNAME] + " => " + playerName); character[USERNAME] = playerName; + updateRequired = true; //Flag profile to update } - return loadFromLine(character); + return loadFromLine(character, updateRequired); } // Didn't find the player, create a new one @@ -563,7 +566,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager { String[] character = line.split(":"); try { - destination.saveUser(loadFromLine(character)); + destination.saveUser(loadFromLine(character, false)); } catch (Exception e) { e.printStackTrace(); @@ -1146,7 +1149,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager { } } - private PlayerProfile loadFromLine(String[] character) { + private PlayerProfile loadFromLine(@NotNull String[] character, boolean updateRequired) { Map skills = getSkillMapFromLine(character); // Skill levels Map skillsXp = new EnumMap<>(PrimarySkillType.class); // Skill & XP Map skillsDATS = new EnumMap<>(SuperAbilityType.class); // Ability & Cooldown @@ -1212,6 +1215,13 @@ public final class FlatfileDatabaseManager implements DatabaseManager { uniquePlayerDataMap.put(UniqueDataType.CHIMAERA_WING_DATS, 0); } + PlayerProfile playerProfile = new PlayerProfile(character[USERNAME], uuid, skills, skillsXp, skillsDATS, mobHealthbarType, scoreboardTipsShown, uniquePlayerDataMap); + + if(updateRequired) { + playerProfile.markProfileDirty(); + playerProfile.scheduleSyncSave(); //Save profile since fields have changed + } + return new PlayerProfile(character[USERNAME], uuid, skills, skillsXp, skillsDATS, mobHealthbarType, scoreboardTipsShown, uniquePlayerDataMap); }