From a79838e874c54eeb4817620d1a59cc177db41462 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Sun, 12 Jan 2025 14:07:58 -0800 Subject: [PATCH] Configurable valid characters for usernames --- ...rable-valid-characters-for-usernames.patch | 34 ------------------- .../net/minecraft/util/StringUtil.java.patch | 10 ++++++ .../org/purpurmc/purpur/PurpurConfig.java | 8 +++++ 3 files changed, 18 insertions(+), 34 deletions(-) delete mode 100644 patches/server/0221-Configurable-valid-characters-for-usernames.patch create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/util/StringUtil.java.patch diff --git a/patches/server/0221-Configurable-valid-characters-for-usernames.patch b/patches/server/0221-Configurable-valid-characters-for-usernames.patch deleted file mode 100644 index 801a6ebf3..000000000 --- a/patches/server/0221-Configurable-valid-characters-for-usernames.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: BillyGalbreath -Date: Sat, 1 Jan 2022 18:38:58 -0600 -Subject: [PATCH] Configurable valid characters for usernames - - -diff --git a/net/minecraft/util/StringUtil.java b/net/minecraft/util/StringUtil.java -index 6c33002dc8bbb3759c3156302ab7d1f26ce5e8ee..c89fc375aff548a2b03eaf4da3b6a075012df012 100644 ---- a/net/minecraft/util/StringUtil.java -+++ b/net/minecraft/util/StringUtil.java -@@ -69,6 +69,7 @@ public class StringUtil { - - // Paper start - Username validation - public static boolean isReasonablePlayerName(final String name) { -+ if (true) return org.purpurmc.purpur.PurpurConfig.usernameValidCharactersPattern.matcher(name).matches(); // Purpur - if (name.isEmpty() || name.length() > 16) { - return false; - } -diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 80647bd8a776fea7cfedf3a991e9da73ce6c5ac1..00f02ad5f248120ce031048e02fe1bacda5567b7 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -455,4 +455,11 @@ public class PurpurConfig { - private static void networkSettings() { - useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP); - } -+ -+ public static java.util.regex.Pattern usernameValidCharactersPattern; -+ private static void usernameValidationSettings() { -+ String defaultPattern = "^[a-zA-Z0-9_.]*$"; -+ String setPattern = getString("settings.username-valid-characters", defaultPattern); -+ usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); -+ } - } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/util/StringUtil.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/util/StringUtil.java.patch new file mode 100644 index 000000000..b8d231182 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/util/StringUtil.java.patch @@ -0,0 +1,10 @@ +--- a/net/minecraft/util/StringUtil.java ++++ b/net/minecraft/util/StringUtil.java +@@ -87,6 +_,7 @@ + + // Paper start - Username validation + public static boolean isReasonablePlayerName(final String name) { ++ if (true) return org.purpurmc.purpur.PurpurConfig.usernameValidCharactersPattern.matcher(name).matches(); // Purpur - Configurable valid characters for usernames + if (name.isEmpty() || name.length() > 16) { + return false; + } diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java index 5070f3eb6..7d753a6d3 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableMap; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; +import java.util.regex.Pattern; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.text.minimessage.MiniMessage; import net.minecraft.core.Registry; @@ -447,4 +448,11 @@ public class PurpurConfig { private static void networkSettings() { useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP); } + + public static Pattern usernameValidCharactersPattern; + private static void usernameValidationSettings() { + String defaultPattern = "^[a-zA-Z0-9_.]*$"; + String setPattern = getString("settings.username-valid-characters", defaultPattern); + usernameValidCharactersPattern = Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); + } }