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.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;

View File

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

View File

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

View File

@ -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 = \".+\""
]
}
}

View File

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