From 0fd004b6bcd4248b959208d0e0aa04d656c3f6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hudson=20Andr=C3=A9s?= <123704241+hudsonandres@users.noreply.github.com> Date: Wed, 18 Mar 2026 00:08:01 -0300 Subject: [PATCH 1/3] fix: reset nickname when player changes Minecraft account name - When a premium player changes their Minecraft username, any previously set nickname (including RGB-formatted ones) is now automatically cleared on their next login, equivalent to running /nick off. --- .../com/earth2me/essentials/EssentialsPlayerListener.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index c1fb775d7b4..aef3b1c0436 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -420,6 +420,12 @@ private void joinFlow(final User user, final long currentTime, final String mess final String lastAccountName = user.getLastAccountName(); // For comparison user.setLastAccountName(user.getBase().getName()); + + // If the Minecraft account name changed, reset the nickname so the old one doesn't persist + if (lastAccountName != null && !lastAccountName.equals(user.getBase().getName()) && user.getNickname() != null) { + user.setNickname(null); + } + user.setLastLogin(currentTime); user.setDisplayNick(); updateCompass(user); From f6590e616310c64df970287213a860542b7ca4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hudson=20Andr=C3=A9s?= <123704241+hudsonandres@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:29:50 -0300 Subject: [PATCH 2/3] add: make reset-nick-on-name-change disabled by default The nickname reset functionality is now disabled by default (false). Administrators can enable it by setting 'reset-nick-on-name-change: true' in config.yml. --- .../java/com/earth2me/essentials/IEssentials.java | 2 ++ .../main/java/com/earth2me/essentials/Settings.java | 11 +++++++++++ Essentials/src/main/resources/config.yml | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 6e69b938bdb..c821badcd34 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -94,6 +94,8 @@ public interface IEssentials extends Plugin { RandomTeleport getRandomTeleport(); + boolean isResetNickOnNameChange(); + UpdateChecker getUpdateChecker(); BukkitTask runTaskAsynchronously(Runnable run); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 8d41da405e7..2808dac7f30 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -147,6 +147,7 @@ public class Settings implements net.ess3.api.ISettings { private boolean logCommandBlockCommands; private boolean logConsoleCommands; private Set> nickBlacklist; + private boolean resetNickOnNameChange = false; private double maxProjectileSpeed; private boolean removeEffectsOnHeal; private Map worldAliases; @@ -508,11 +509,20 @@ private String _getNicknamePrefix() { return config.getString("nickname-prefix", "~"); } + private boolean _resetNickOnNameChange() { + return config.getBoolean("reset-nick-on-name-change", false); + } + @Override public String getNicknamePrefix() { return nicknamePrefix; } + @Override + public boolean isResetNickOnNameChange() { + return resetNickOnNameChange; + } + @Override public double getTeleportCooldown() { return config.getDouble("teleport-cooldown", 0); @@ -886,6 +896,7 @@ public void reloadConfig() { } nicknamePrefix = _getNicknamePrefix(); + resetNickOnNameChange = _resetNickOnNameChange(); operatorColor = _getOperatorColor(); changePlayerListName = _changePlayerListName(); configDebug = _isDebug(); diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 5c87444d9fb..4983c4a18fc 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -51,6 +51,10 @@ nick-blacklist: # For example, if "&6Notch" has 7 characters (2 are part of a color code), a length of 5 is used when this option is set to true. ignore-colors-in-max-nick-length: false +# When this option is enabled, any nickname set by a player will be reset when their Minecraft account name changes. +# This prevents old nicknames (including RGB-formatted ones) from persisting after a name change. +reset-nick-on-name-change: false + # When this option is enabled, display names for hidden players will not be shown. This prevents players from being # able to see that they are online while vanished. hide-displayname-in-vanish: true From cc4075d6e16b3d950649412b14eb3d4bd75999ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hudson=20Andr=C3=A9s?= <123704241+hudsonandres@users.noreply.github.com> Date: Sun, 19 Apr 2026 22:29:18 -0300 Subject: [PATCH 3/3] Code correction. --- .../java/com/earth2me/essentials/EssentialsPlayerListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index aef3b1c0436..80126677c16 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -422,7 +422,7 @@ private void joinFlow(final User user, final long currentTime, final String mess user.setLastAccountName(user.getBase().getName()); // If the Minecraft account name changed, reset the nickname so the old one doesn't persist - if (lastAccountName != null && !lastAccountName.equals(user.getBase().getName()) && user.getNickname() != null) { + if (ess.getSettings().isResetNickOnNameChange() && lastAccountName != null && !lastAccountName.equals(user.getBase().getName()) && user.getNickname() != null) { user.setNickname(null); }