From 391c12da5604928086f4785917d12c90b10a8049 Mon Sep 17 00:00:00 2001 From: XPYEX Date: Mon, 8 Jan 2024 21:49:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8F=92=E4=BB=B6=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=8A=A0=E8=BD=BD=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + build.gradle | 5 +++- .../cnusername/CnUsername.java | 9 ++++-- .../moduel/cnusername/CnUsernamePlugin.java | 30 +++++++++++++++++++ .../{model => moduel}/cnusername/Logging.java | 2 +- .../ClassVisitorAllowedCharacters.java | 4 ++- .../minecraft}/ClassVisitorLoginListener.java | 3 +- .../mojang}/ClassVisitorStringReader.java | 5 ++-- .../cnusername/bukkit/CnUsernameBK.java | 27 ++++------------- .../cnusername/bungee/CnUsernameBC.java | 25 ++++------------ src/main/resources/bungee.yml | 2 +- 11 files changed, 62 insertions(+), 51 deletions(-) rename src/main/java/me/xpyex/{model => moduel}/cnusername/CnUsername.java (94%) create mode 100644 src/main/java/me/xpyex/moduel/cnusername/CnUsernamePlugin.java rename src/main/java/me/xpyex/{model => moduel}/cnusername/Logging.java (96%) rename src/main/java/me/xpyex/{model/cnusername => moduel/cnusername/bungee}/ClassVisitorAllowedCharacters.java (94%) rename src/main/java/me/xpyex/{model/cnusername => moduel/cnusername/minecraft}/ClassVisitorLoginListener.java (97%) rename src/main/java/me/xpyex/{model/cnusername => moduel/cnusername/mojang}/ClassVisitorStringReader.java (96%) diff --git a/README.md b/README.md index fd34d18..9d2260c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # CnUsername + Allow player to use Chinese chars in username of Minecraft 允许玩家使用中文名甚至特殊字符进入服务器 diff --git a/build.gradle b/build.gradle index b486998..dfa1003 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'me.xpyex' -version = '1.0.4' +version = '1.0.5' repositories { mavenCentral() @@ -59,6 +59,9 @@ processResources { filesMatching('plugin.yml') { expand props } + filesMatching('bungee.yml') { + expand props + } } shadowJar { diff --git a/src/main/java/me/xpyex/model/cnusername/CnUsername.java b/src/main/java/me/xpyex/moduel/cnusername/CnUsername.java similarity index 94% rename from src/main/java/me/xpyex/model/cnusername/CnUsername.java rename to src/main/java/me/xpyex/moduel/cnusername/CnUsername.java index 92bc41b..992d687 100644 --- a/src/main/java/me/xpyex/model/cnusername/CnUsername.java +++ b/src/main/java/me/xpyex/moduel/cnusername/CnUsername.java @@ -1,4 +1,4 @@ -package me.xpyex.model.cnusername; +package me.xpyex.moduel.cnusername; import java.io.File; import java.io.IOException; @@ -8,6 +8,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.security.ProtectionDomain; +import me.xpyex.moduel.cnusername.bungee.ClassVisitorAllowedCharacters; +import me.xpyex.moduel.cnusername.minecraft.ClassVisitorLoginListener; +import me.xpyex.moduel.cnusername.mojang.ClassVisitorStringReader; import net.md_5.bungee.api.ProxyServer; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -20,15 +23,15 @@ public class CnUsername { public static final String CLASS_PATH_LOGIN_MCP = "net/minecraft/server/network/ServerLoginPacketListenerImpl"; public static final String CLASS_PATH_LOGIN_YARN = "net/minecraft/server/network/ServerLoginNetworkHandler"; public static final String CLASS_PATH_STRING = "com/mojang/brigadier/StringReader"; + public static final String CLASS_PATH_BUNGEE = "net/md_5/bungee/util/AllowedCharacters"; public static final File MODULE_FOLDER = new File("CnUsername"); public static final boolean DEBUG; - public static final String CLASS_PATH_BUNGEE = "net/md_5/bungee/util/AllowedCharacters"; static { boolean debugResult; try { if (MODULE_FOLDER.exists() && MODULE_FOLDER.isFile()) { - throw new IllegalStateException("错误,服务端根目录下已存在CnUsername文件,且非文件夹"); + throw new IllegalStateException("错误: 服务端根目录下已存在CnUsername文件,且非文件夹"); } if (!MODULE_FOLDER.exists()) { MODULE_FOLDER.mkdirs(); diff --git a/src/main/java/me/xpyex/moduel/cnusername/CnUsernamePlugin.java b/src/main/java/me/xpyex/moduel/cnusername/CnUsernamePlugin.java new file mode 100644 index 0000000..a56467e --- /dev/null +++ b/src/main/java/me/xpyex/moduel/cnusername/CnUsernamePlugin.java @@ -0,0 +1,30 @@ +package me.xpyex.moduel.cnusername; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.List; + +public interface CnUsernamePlugin { + public default String readPluginPattern() { + try { + File f = new File(getDataFolder(), "pattern.txt"); + File folder = f.getParentFile(); + if (folder.exists() && folder.isFile()) { + Logging.info("错误: 插件目录下已存在CnUsername文件,且非文件夹"); + return null; + } + if (!f.exists()) { + folder.mkdirs(); + f.createNewFile(); + } + List content = Files.readAllLines(f.toPath(), StandardCharsets.UTF_8); + return content.isEmpty() ? null : content.get(0); + } catch (Throwable e) { + e.printStackTrace(); + return null; + } + } + + public File getDataFolder(); +} diff --git a/src/main/java/me/xpyex/model/cnusername/Logging.java b/src/main/java/me/xpyex/moduel/cnusername/Logging.java similarity index 96% rename from src/main/java/me/xpyex/model/cnusername/Logging.java rename to src/main/java/me/xpyex/moduel/cnusername/Logging.java index cebe591..103a880 100644 --- a/src/main/java/me/xpyex/model/cnusername/Logging.java +++ b/src/main/java/me/xpyex/moduel/cnusername/Logging.java @@ -1,4 +1,4 @@ -package me.xpyex.model.cnusername; +package me.xpyex.moduel.cnusername; import java.text.SimpleDateFormat; import java.util.Date; diff --git a/src/main/java/me/xpyex/model/cnusername/ClassVisitorAllowedCharacters.java b/src/main/java/me/xpyex/moduel/cnusername/bungee/ClassVisitorAllowedCharacters.java similarity index 94% rename from src/main/java/me/xpyex/model/cnusername/ClassVisitorAllowedCharacters.java rename to src/main/java/me/xpyex/moduel/cnusername/bungee/ClassVisitorAllowedCharacters.java index 93887d3..a4dd47f 100644 --- a/src/main/java/me/xpyex/model/cnusername/ClassVisitorAllowedCharacters.java +++ b/src/main/java/me/xpyex/moduel/cnusername/bungee/ClassVisitorAllowedCharacters.java @@ -1,7 +1,9 @@ -package me.xpyex.model.cnusername; +package me.xpyex.moduel.cnusername.bungee; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import me.xpyex.moduel.cnusername.minecraft.ClassVisitorLoginListener; +import me.xpyex.moduel.cnusername.Logging; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; diff --git a/src/main/java/me/xpyex/model/cnusername/ClassVisitorLoginListener.java b/src/main/java/me/xpyex/moduel/cnusername/minecraft/ClassVisitorLoginListener.java similarity index 97% rename from src/main/java/me/xpyex/model/cnusername/ClassVisitorLoginListener.java rename to src/main/java/me/xpyex/moduel/cnusername/minecraft/ClassVisitorLoginListener.java index 8926d71..c0d38f6 100644 --- a/src/main/java/me/xpyex/model/cnusername/ClassVisitorLoginListener.java +++ b/src/main/java/me/xpyex/moduel/cnusername/minecraft/ClassVisitorLoginListener.java @@ -1,7 +1,8 @@ -package me.xpyex.model.cnusername; +package me.xpyex.moduel.cnusername.minecraft; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import me.xpyex.moduel.cnusername.Logging; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; diff --git a/src/main/java/me/xpyex/model/cnusername/ClassVisitorStringReader.java b/src/main/java/me/xpyex/moduel/cnusername/mojang/ClassVisitorStringReader.java similarity index 96% rename from src/main/java/me/xpyex/model/cnusername/ClassVisitorStringReader.java rename to src/main/java/me/xpyex/moduel/cnusername/mojang/ClassVisitorStringReader.java index d8fbfaf..112d273 100644 --- a/src/main/java/me/xpyex/model/cnusername/ClassVisitorStringReader.java +++ b/src/main/java/me/xpyex/moduel/cnusername/mojang/ClassVisitorStringReader.java @@ -1,5 +1,6 @@ -package me.xpyex.model.cnusername; +package me.xpyex.moduel.cnusername.mojang; +import me.xpyex.moduel.cnusername.Logging; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; @@ -9,7 +10,7 @@ public class ClassVisitorStringReader extends ClassVisitor { public static final String METHOD_NAME = "isAllowedInUnquotedString"; private final String className; - protected ClassVisitorStringReader(String className, ClassVisitor classVisitor) { + public ClassVisitorStringReader(String className, ClassVisitor classVisitor) { super(Opcodes.ASM9, classVisitor); this.className = className; } 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 23e15da..08673e0 100644 --- a/src/main/java/me/xpyex/plugin/cnusername/bukkit/CnUsernameBK.java +++ b/src/main/java/me/xpyex/plugin/cnusername/bukkit/CnUsernameBK.java @@ -1,16 +1,14 @@ package me.xpyex.plugin.cnusername.bukkit; -import java.io.File; import java.io.IOException; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Field; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import me.xpyex.model.cnusername.ClassVisitorLoginListener; -import me.xpyex.model.cnusername.CnUsername; -import me.xpyex.model.cnusername.Logging; +import me.xpyex.moduel.cnusername.minecraft.ClassVisitorLoginListener; +import me.xpyex.moduel.cnusername.CnUsername; +import me.xpyex.moduel.cnusername.CnUsernamePlugin; +import me.xpyex.moduel.cnusername.Logging; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import org.objectweb.asm.ClassReader; @@ -18,7 +16,7 @@ import org.objectweb.asm.ClassWriter; import sun.misc.Unsafe; -public final class CnUsernameBK extends JavaPlugin { +public final class CnUsernameBK extends JavaPlugin implements CnUsernamePlugin { private final static MethodHandle DEFINE_CLASS_METHOD; static { @@ -26,7 +24,7 @@ public final class CnUsernameBK extends JavaPlugin { Unsafe unsafeInstance; Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); unsafeField.setAccessible(true); - unsafeInstance = (Unsafe) unsafeField.get(null); + unsafeInstance = (Unsafe) unsafeField.get(null); //Unsafe.theUnsafe静态变量 Field lookupField = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP"); Object lookupBase = unsafeInstance.staticFieldBase(lookupField); @@ -107,17 +105,4 @@ public void onEnable() { Logging.warning("修改失败"); } } - - public String readPluginPattern() { - try { - File f = new File(getDataFolder(), "pattern.txt"); - if (!f.exists()) { - f.createNewFile(); - } - return Files.readAllLines(f.toPath(), StandardCharsets.UTF_8).get(0); - } catch (Throwable e) { - e.printStackTrace(); - return null; - } - } } 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 6221ac7..819515c 100644 --- a/src/main/java/me/xpyex/plugin/cnusername/bungee/CnUsernameBC.java +++ b/src/main/java/me/xpyex/plugin/cnusername/bungee/CnUsernameBC.java @@ -1,15 +1,13 @@ package me.xpyex.plugin.cnusername.bungee; -import java.io.File; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Field; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import me.xpyex.model.cnusername.ClassVisitorAllowedCharacters; -import me.xpyex.model.cnusername.CnUsername; -import me.xpyex.model.cnusername.Logging; +import me.xpyex.moduel.cnusername.bungee.ClassVisitorAllowedCharacters; +import me.xpyex.moduel.cnusername.CnUsername; +import me.xpyex.moduel.cnusername.CnUsernamePlugin; +import me.xpyex.moduel.cnusername.Logging; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.plugin.Plugin; import org.objectweb.asm.ClassReader; @@ -17,7 +15,7 @@ import org.objectweb.asm.ClassWriter; import sun.misc.Unsafe; -public class CnUsernameBC extends Plugin { +public class CnUsernameBC extends Plugin implements CnUsernamePlugin { private final static MethodHandle DEFINE_CLASS_METHOD; static { @@ -84,17 +82,4 @@ public void onDisable() { Logging.info("已卸载"); // } - - public String readPluginPattern() { - try { - File f = new File(getDataFolder(), "pattern.txt"); - if (!f.exists()) { - f.createNewFile(); - } - return Files.readAllLines(f.toPath(), StandardCharsets.UTF_8).get(0); - } catch (Throwable e) { - e.printStackTrace(); - return null; - } - } } diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml index 0c77e04..0e88b36 100644 --- a/src/main/resources/bungee.yml +++ b/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: CnUsername main: me.xpyex.plugin.cnusername.bungee.CnUsernameBC -version: '1.0.4' +version: '${version}' author: XPYEX \ No newline at end of file