Add an option that allows non ascii username to login (#1139)

This commit is contained in:
IzzelAliz 2023-12-02 21:01:02 +08:00
parent 3136172ea0
commit ad439238f2
5 changed files with 29 additions and 1 deletions

View File

@ -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.network.NetworkManagerBridge;
import io.izzel.arclight.common.bridge.core.server.MinecraftServerBridge; import io.izzel.arclight.common.bridge.core.server.MinecraftServerBridge;
import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge; import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge;
import io.izzel.arclight.i18n.ArclightConfig;
import net.minecraft.DefaultUncaughtExceptionHandler; import net.minecraft.DefaultUncaughtExceptionHandler;
import net.minecraft.core.UUIDUtil; import net.minecraft.core.UUIDUtil;
import net.minecraft.network.Connection; 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 * @author IzzelAliz
* @reason * @reason
@ -123,7 +129,7 @@ public abstract class ServerLoginNetHandlerMixin {
public void handleHello(ServerboundHelloPacket packetIn) { 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(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(); GameProfile gameprofile = this.server.getSingleplayerProfile();
if (gameprofile != null && packetIn.name().equalsIgnoreCase(gameprofile.getName())) { if (gameprofile != null && packetIn.name().equalsIgnoreCase(gameprofile.getName())) {
this.gameProfile = gameprofile; this.gameProfile = gameprofile;

View File

@ -26,6 +26,9 @@ public class CompatSpec {
@Setting("forward-permission") @Setting("forward-permission")
private String forwardPermission; private String forwardPermission;
@Setting("valid-username-regex")
private String validUsernameRegex;
public Map<String, MaterialPropertySpec> getMaterials() { public Map<String, MaterialPropertySpec> getMaterials() {
return materials; return materials;
} }
@ -57,4 +60,8 @@ public class CompatSpec {
public boolean isForwardPermissionReverse() { public boolean isForwardPermissionReverse() {
return Objects.equals(forwardPermission, "reverse"); return Objects.equals(forwardPermission, "reverse");
} }
public String getValidUsernameRegex() {
return validUsernameRegex;
}
} }

View File

@ -18,6 +18,7 @@ compatibility {
"com.example.mod.ExtraLogicWorld" "com.example.mod.ExtraLogicWorld"
] ]
forward-permission = true forward-permission = true
valid-username-regex = ""
} }
async-catcher { async-catcher {
dump = true dump = true

View File

@ -122,5 +122,12 @@ comments {
"false - Disable permission forward" "false - Disable permission forward"
"reverse - Forward Bukkit player perimission query to Forge" "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 = \".+\""
]
} }
} }

View File

@ -126,5 +126,12 @@ comments {
"false - 不启用权限转发" "false - 不启用权限转发"
"reverse - 将 Bukkit 玩家权限查询请求转发至 Forge" "reverse - 将 Bukkit 玩家权限查询请求转发至 Forge"
] ]
valid-username-regex.comment = [
"用户名合法检查正则表达式,留空为使用原版检查"
"如果需要允许中文字符可以使用"
"valid-username-regex = \"^[ -~\\p{sc=Han}]{1,16}$\""
"如果允许任何用户名可以使用"
"valid-username-regex = \".+\""
]
} }
} }