2121import org .bukkit .command .TabExecutor ;
2222import org .bukkit .configuration .file .YamlConfiguration ;
2323import org .bukkit .entity .Player ;
24+ import org .bukkit .event .EventHandler ;
25+ import org .bukkit .event .HandlerList ;
2426import org .bukkit .event .Listener ;
27+ import org .bukkit .event .player .AsyncPlayerChatEvent ;
2528import org .bukkit .plugin .java .JavaPlugin ;
2629
2730import java .io .File ;
3437
3538public final class UseTranslatedNames extends JavaPlugin implements CommandExecutor , TabExecutor , Listener {
3639
40+ public static UseTranslatedNames plugin ;
41+
3742 // 用户配置版本
3843 public static int _configVersion ;
3944 // 解析器模式
@@ -48,31 +53,48 @@ public final class UseTranslatedNames extends JavaPlugin implements CommandExecu
4853 int listSize = 0 ;
4954
5055 // 调试模式
51- private int _debug = 0 ;
56+ public static int _debug = 0 ;
5257
5358 // 记录统计信息
54- Status status = new Status ();
59+ static Status status = new Status ();
5560
5661 // 用于静默发送聊天消息, 绕过消息监听器
57- private ProtocolManager protocolManager ;
62+ public static ProtocolManager protocolManager ;
5863
5964
6065 @ Override
6166 public void onEnable () {
67+ plugin = this ;
6268 loadConfig ();
6369 Util .load (this );
6470
6571 // bStats
66- if (getConfig ().getBoolean ("bStats" , true )){
67- new Metrics (this , 20766 );
68- }
72+ // 收集一些性能数据和消息总数
73+ Metrics metrics = new Metrics (this , 20766 );
74+ // 平均消息延迟
75+ metrics .addCustomChart (new Metrics .SimplePie ("AverageTime" , () -> {
76+ double TotalTime = status .TotalTime / 1_000_000.0 ;
77+ double AverageTime = TotalTime / status .MsgCount ;
78+ return String .format ("%.2f" , AverageTime ) +"ms" ;
79+ }));
80+ // 其他统计信息
81+ // metrics.addCustomChart(new Metrics.MultiLineChart("Status", () -> {
82+ // Map<String, Integer> map = new HashMap<>();
83+ // map.put("NumberOfMessages", Math.toIntExact(status.MsgCount));
84+ // map.put("NumberOfMatches", Math.toIntExact(status.MatchesCount));
85+ // map.put("NumberOfTotalTime", Math.toIntExact(Math.round(status.TotalTime / 1e9)));
86+ // return map;
87+ // }));
88+ metrics .addCustomChart (new Metrics .SingleLineChart ("MsgCount" , () -> Math .toIntExact (status .MsgCount )));
89+ metrics .addCustomChart (new Metrics .SingleLineChart ("MatchesCount" , () -> Math .toIntExact (status .MatchesCount )));
90+ metrics .addCustomChart (new Metrics .SingleLineChart ("TotalTime" , () -> Math .toIntExact (Math .round (status .TotalTime / 1e9 ))));
6991
7092 // 注册指令
7193 Objects .requireNonNull (getCommand ("utn" )).setExecutor (this );
7294
95+ // 用于静默发送聊天消息, 绕过消息监听器
7396 protocolManager = ProtocolLibrary .getProtocolManager ();
7497
75-
7698 // 添加一个数据包监听器
7799 ProtocolLibrary .getProtocolManager ().addPacketListener (new PacketAdapter (this ,
78100 ListenerPriority .LOW , // 监听器优先级
@@ -114,7 +136,7 @@ public void onPacketSending(PacketEvent event){
114136 }
115137
116138 // 记录运行时间
117- status .Messages ++;
139+ status .MsgCount ++;
118140 status .TotalTime += System .nanoTime () - _startTime ;
119141 }
120142 });
@@ -169,7 +191,7 @@ public boolean runJsonTestReplaceConfig(PacketEvent event, Player player, String
169191 Matcher matcher = cli .regExp .matcher (jsonTest );
170192 while (matcher .find ()){
171193
172- status .Matches ++;
194+ status .MatchesCount ++;
173195
174196 if (_debug >= 4 ){
175197 getLogger ().info (" - [HIT]" );
@@ -418,10 +440,42 @@ public long loadConfig(){
418440 }
419441 listSize = list .size ();
420442
443+ // 配置玩家消息监听器
444+ onPlayerChat .mode = switch (getConfig ().getString ("dev.convertPlayerMessages" , "NONE" )){
445+ case "Convert" -> Key .Convert ;
446+ case "ConvertBypass" -> Key .ConvertBypass ;
447+ default -> Key .NONE ;
448+ };
449+ // 注册和注销监听器
450+ if (onPlayerChat .mode == Key .NONE ){
451+ if (onPlayerChat .func != null ){
452+ HandlerList .unregisterAll (onPlayerChat .func );
453+ onPlayerChat .func = null ;
454+ }
455+ }else {
456+ if (onPlayerChat .func == null ){
457+ onPlayerChat .func = new onPlayerChat ();
458+ getServer ().getPluginManager ().registerEvents (onPlayerChat .func , this );
459+ }
460+ }
461+
421462 return Math .round ((System .nanoTime () - _startTime ) / 1_000_000.0 );
422463 }
423464
424465
466+ @ EventHandler
467+ public void onPlayerChat (AsyncPlayerChatEvent event ){
468+ String message = event .getMessage ();
469+
470+ // 在这里处理玩家发送的消息
471+ // 你可以根据需要进行逻辑处理或条件检查
472+
473+ // 示例:将玩家发送的消息改为大写
474+ String upperCaseMessage = message .toUpperCase ();
475+ event .setMessage (upperCaseMessage );
476+ }
477+
478+
425479 @ Override // 指令补全
426480 public List <String > onTabComplete (CommandSender sender , Command command , String label , String [] args ) {
427481 if (args .length == 1 ){
@@ -443,10 +497,10 @@ public List<String> onTabComplete(CommandSender sender, Command command, String
443497 return null ;
444498 }
445499 @ Override // 执行指令
446- public boolean onCommand (CommandSender sender , Command command , String label , String [] args ) {
500+ public boolean onCommand (CommandSender sender , Command command , String label , String [] args ){
447501
448502 double TotalTime = status .TotalTime / 1_000_000.0 ;
449- double AverageTime = TotalTime / status .Messages ;
503+ double AverageTime = TotalTime / status .MsgCount ;
450504
451505 // 默认输出插件信息
452506 if (args .length == 0 ){
@@ -458,8 +512,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
458512 " - /utn reload - 重载配置\n " +
459513 " - /utn debug [Level] - 调试模式\n " +
460514 " 统计信息:\n " +
461- " - 监听消息: " + status .Messages +"\n " +
462- " - 成功匹配: " + status .Matches +"\n " +
515+ " - 监听消息: " + status .MsgCount +"\n " +
516+ " - 成功匹配: " + status .MatchesCount +"\n " +
463517 " - 平均延迟: " + String .format ("%.2f" , AverageTime ) +" ms [累计: " + String .format ("%.2f" , TotalTime ) +" ms]\n "
464518 );
465519 return true ;
0 commit comments