From ad439238f226f7fb531bc8d9e6aaf313e58ddcb8 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sat, 2 Dec 2023 21:01:02 +0800 Subject: [PATCH] Add an option that allows non ascii username to login (#1139) --- .../mixin/core/network/ServerLoginNetHandlerMixin.java | 8 +++++++- .../main/java/io/izzel/arclight/i18n/conf/CompatSpec.java | 7 +++++++ i18n-config/src/main/resources/META-INF/arclight.conf | 1 + i18n-config/src/main/resources/META-INF/i18n/en_us.conf | 7 +++++++ i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf | 7 +++++++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerLoginNetHandlerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerLoginNetHandlerMixin.java index df64f9d6..e887df25 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerLoginNetHandlerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerLoginNetHandlerMixin.java @@ -5,6 +5,7 @@ import com.mojang.authlib.properties.Property; import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge; import io.izzel.arclight.common.bridge.core.server.MinecraftServerBridge; import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge; +import io.izzel.arclight.i18n.ArclightConfig; import net.minecraft.DefaultUncaughtExceptionHandler; import net.minecraft.core.UUIDUtil; import net.minecraft.network.Connection; @@ -115,6 +116,11 @@ public abstract class ServerLoginNetHandlerMixin { } } + private static boolean arclight$validUsernameCheck(String name) { + var regex = ArclightConfig.spec().getCompat().getValidUsernameRegex(); + return !regex.isBlank() && name.matches(regex); + } + /** * @author IzzelAliz * @reason @@ -123,7 +129,7 @@ public abstract class ServerLoginNetHandlerMixin { public void handleHello(ServerboundHelloPacket packetIn) { Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet"); Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet"); - Validate.validState(isValidUsername(packetIn.name()), "Invalid characters in username"); + Validate.validState(arclight$validUsernameCheck(packetIn.name()) || isValidUsername(packetIn.name()), "Invalid characters in username"); GameProfile gameprofile = this.server.getSingleplayerProfile(); if (gameprofile != null && packetIn.name().equalsIgnoreCase(gameprofile.getName())) { this.gameProfile = gameprofile; diff --git a/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/CompatSpec.java b/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/CompatSpec.java index 4977af99..2c8f0143 100644 --- a/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/CompatSpec.java +++ b/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/CompatSpec.java @@ -26,6 +26,9 @@ public class CompatSpec { @Setting("forward-permission") private String forwardPermission; + @Setting("valid-username-regex") + private String validUsernameRegex; + public Map getMaterials() { return materials; } @@ -57,4 +60,8 @@ public class CompatSpec { public boolean isForwardPermissionReverse() { return Objects.equals(forwardPermission, "reverse"); } + + public String getValidUsernameRegex() { + return validUsernameRegex; + } } diff --git a/i18n-config/src/main/resources/META-INF/arclight.conf b/i18n-config/src/main/resources/META-INF/arclight.conf index 45356e0a..92f64a94 100644 --- a/i18n-config/src/main/resources/META-INF/arclight.conf +++ b/i18n-config/src/main/resources/META-INF/arclight.conf @@ -18,6 +18,7 @@ compatibility { "com.example.mod.ExtraLogicWorld" ] forward-permission = true + valid-username-regex = "" } async-catcher { dump = true diff --git a/i18n-config/src/main/resources/META-INF/i18n/en_us.conf b/i18n-config/src/main/resources/META-INF/i18n/en_us.conf index e6676b8c..3fc8c80c 100644 --- a/i18n-config/src/main/resources/META-INF/i18n/en_us.conf +++ b/i18n-config/src/main/resources/META-INF/i18n/en_us.conf @@ -122,5 +122,12 @@ comments { "false - Disable permission forward" "reverse - Forward Bukkit player perimission query to Forge" ] + valid-username-regex.comment = [ + "Regex for valid username check. Leave it blank will fallback to vanilla check" + "Following allows Chinese characters:" + "valid-username-regex = \"^[ -~\\\\p{sc=Han}]{1,16}$\"" + "Following allows any username to login:" + "valid-username-regex = \".+\"" + ] } } diff --git a/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf b/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf index 712f4595..d9593eab 100644 --- a/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf +++ b/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf @@ -126,5 +126,12 @@ comments { "false - 不启用权限转发" "reverse - 将 Bukkit 玩家权限查询请求转发至 Forge" ] + valid-username-regex.comment = [ + "用户名合法检查正则表达式,留空为使用原版检查" + "如果需要允许中文字符可以使用" + "valid-username-regex = \"^[ -~\\p{sc=Han}]{1,16}$\"" + "如果允许任何用户名可以使用" + "valid-username-regex = \".+\"" + ] } }