From 0d26efb1e976a6c316a1450131178424cb0123a5 Mon Sep 17 00:00:00 2001 From: XPYEX Date: Sat, 31 Aug 2024 14:23:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20#6=20=E5=A4=B4=E9=A2=85=E6=97=A0owner?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../xpyex/module/cnusername/CnUsername.java | 2 +- .../mojang/ClassVisitorStringUtil.java | 22 +++++++++++++++---- .../cnusername/bukkit/CnUsernameBK.java | 4 ++-- .../cnusername/bungee/CnUsernameBC.java | 2 +- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index fdbd810..9aa8bfc 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'me.xpyex' -version = '1.0.10' +version = '1.0.11' def pluginPackage = 'me.xpyex.plugin.CnUsername'.toLowerCase() def modulePackage = 'me.xpyex.module.CnUsername'.toLowerCase() diff --git a/src/main/java/me/xpyex/module/cnusername/CnUsername.java b/src/main/java/me/xpyex/module/cnusername/CnUsername.java index f012d9a..ce4c1ac 100644 --- a/src/main/java/me/xpyex/module/cnusername/CnUsername.java +++ b/src/main/java/me/xpyex/module/cnusername/CnUsername.java @@ -81,7 +81,7 @@ public byte[] transform(ClassLoader loader, String className, Class classBein Logging.info("开始修改类 " + className); try { ClassReader reader = new ClassReader(classFileBuffer); - ClassWriter writer = new ClassWriter(reader, 0); + ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES); ClassVisitor visitor; switch (className) { case ClassVisitorAllowedCharacters.CLASS_PATH: diff --git a/src/main/java/me/xpyex/module/cnusername/mojang/ClassVisitorStringUtil.java b/src/main/java/me/xpyex/module/cnusername/mojang/ClassVisitorStringUtil.java index e450770..5b92ead 100644 --- a/src/main/java/me/xpyex/module/cnusername/mojang/ClassVisitorStringUtil.java +++ b/src/main/java/me/xpyex/module/cnusername/mojang/ClassVisitorStringUtil.java @@ -21,18 +21,32 @@ public MethodVisitor visitMethod(int access, String name, String descriptor, Str // 寻找 static boolean isValidPlayerName(String name) 方法并覆写 Logging.info("正在修改 " + getClassName() + " 类中的 " + name + "(String) 方法"); visitor.visitCode(); + + // if (string.isEmpty()) { return true; } + // Label0 Label label0 = new Label(); visitor.visitLabel(label0); + visitor.visitVarInsn(Opcodes.ALOAD, 0); + visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "isEmpty", "()Z", false); + Label label1 = new Label(); + visitor.visitJumpInsn(Opcodes.IFEQ, label1); + visitor.visitInsn(Opcodes.ICONST_1); + visitor.visitInsn(Opcodes.IRETURN); + + // Label1 + visitor.visitLabel(label1); visitor.visitLdcInsn(getPattern()); visitor.visitMethodInsn(Opcodes.INVOKESTATIC, "java/util/regex/Pattern", "compile", "(Ljava/lang/String;)Ljava/util/regex/Pattern;", false); visitor.visitVarInsn(Opcodes.ALOAD, 0); visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/regex/Pattern", "matcher", "(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;", false); visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/regex/Matcher", "matches", "()Z", false); visitor.visitInsn(Opcodes.IRETURN); - Label label1 = new Label(); - visitor.visitLabel(label1); - visitor.visitLocalVariable("name", "Ljava/lang/String;", null, label0, label1, 0); - visitor.visitMaxs(2, 1); + + // Label2 + Label label2 = new Label(); + visitor.visitLabel(label2); + visitor.visitLocalVariable("name", "Ljava/lang/String;", null, label1, label2, 0); + visitor.visitMaxs(0, 0); visitor.visitEnd(); return null; } diff --git a/src/main/java/me/xpyex/plugin/cnusername/bukkit/CnUsernameBK.java b/src/main/java/me/xpyex/plugin/cnusername/bukkit/CnUsernameBK.java index 01fb9e1..bcfe37a 100644 --- a/src/main/java/me/xpyex/plugin/cnusername/bukkit/CnUsernameBK.java +++ b/src/main/java/me/xpyex/plugin/cnusername/bukkit/CnUsernameBK.java @@ -42,7 +42,7 @@ public void onLoad() { ClassReader reader = new ClassReader(Bukkit.class.getClassLoader().getResourceAsStream(ClassVisitorStringUtil.CLASS_PATH + ".class")); String className = reader.getClassName().replace("/", "."); Logging.info("开始修改类 " + className); - ClassWriter classWriter = new ClassWriter(reader, 0); + ClassWriter classWriter = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES); ClassVisitor classVisitor = new ClassVisitorStringUtil(className, classWriter, readPluginPattern()); reader.accept(classVisitor, 0); loadClass(className, classWriter.toByteArray()); @@ -79,7 +79,7 @@ public void onLoad() { } String className = classReader.getClassName().replace("/", "."); Logging.info("开始修改类 " + className); - ClassWriter classWriter = new ClassWriter(classReader, 0); + ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_FRAMES); ClassVisitor classVisitor = new ClassVisitorLoginListener(className, classWriter, readPluginPattern()); classReader.accept(classVisitor, 0); loadClass(className, classWriter.toByteArray()); diff --git a/src/main/java/me/xpyex/plugin/cnusername/bungee/CnUsernameBC.java b/src/main/java/me/xpyex/plugin/cnusername/bungee/CnUsernameBC.java index 70a592b..b251443 100644 --- a/src/main/java/me/xpyex/plugin/cnusername/bungee/CnUsernameBC.java +++ b/src/main/java/me/xpyex/plugin/cnusername/bungee/CnUsernameBC.java @@ -40,7 +40,7 @@ public void onEnable() { ClassReader classReader = new ClassReader(ProxyServer.class.getClassLoader().getResourceAsStream(ClassVisitorAllowedCharacters.CLASS_PATH + ".class")); String className = classReader.getClassName().replace("/", "."); Logging.info("开始修改类 " + className); - ClassWriter classWriter = new ClassWriter(classReader, 0); + ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_FRAMES); ClassVisitor classVisitor = new ClassVisitorAllowedCharacters(className, classWriter, readPluginPattern()); classReader.accept(classVisitor, 0); loadClass(className, classWriter.toByteArray());