这里小雨.
本帖最后由 LaoguaB 于 2020-8-25 10:52 编辑

设置完中文名 可以正常使用
当重启服务器后 中文名就没了
主类↓




https://www.mcbbs.net/thread-1053547-1-1.html

这是我原来的插件帖子
代码和上面的差不多 但是我把两个文件合起来用一个命令了 就用不了了



2021.12 数据,可能有更多内容设置完中文名 可以正常使用
当重启服务器后 中文名就没了
主类↓
package xiaoyu;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class ChineseName extends JavaPlugin {
    private static ChineseName instance;

    public static ChineseName getInstance() {
  return instance;
    }


    @Override
    public void onEnable() {
  instance = this;
  getConfig().options().copyDefaults();
  saveDefaultConfig();
  getCommand("pcn").setExecutor(new pcn());
  Bukkit.getConsoleSender().sendMessage("§d================================");
  Bukkit.getConsoleSender().sendMessage(" ");
  Bukkit.getConsoleSender().sendMessage("§d[ChineseName]中文名插件已加载");
  Bukkit.getConsoleSender().sendMessage(" ");
  Bukkit.getConsoleSender().sendMessage(" §d作者:小雨  QQ:2563818664");
  Bukkit.getConsoleSender().sendMessage(" ");
  Bukkit.getConsoleSender().sendMessage("§d================================");
    }


    @Override
    public void onDisable() {
  Bukkit.getConsoleSender().sendMessage("§4[ChineseName]插件已卸载");
    }


    @EventHandler
    //玩家聊天事件
    public void onPlayerChat(AsyncPlayerChatEvent e) {
  //获取配置文件是否有玩家名字,如果有则执行
  if (this.getConfig().getString(e.getPlayer().getName()) != null) {
   e.getPlayer().setDisplayName(this.getConfig().getString(e.getPlayer().getName()) + ChatColor.RESET);
  }
    }
}
pcn.java


package xiaoyu;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.Plugin;

public class pcn implements CommandExecutor {
    public boolean onCommand(CommandSender commandSender, Command cmd, String commandLabel, String[] strings) {
  Plugin plugin = ChineseName.getPlugin(ChineseName.class);
  if (commandSender instanceof Player) {
   Player p = (Player) commandSender;
   if (strings.length == 1) {
    if (p.hasPermission("pcn.use")) {
  String name = strings[0];
  name = name.replaceAll("&", "§");
  p.sendMessage("§e§l你的中文名设置好了:" + ChatColor.RESET + name);
  p.setDisplayName(name + ChatColor.RESET);
  ChineseName.getInstance().getConfig().set(p.getName(), (Object)name);
  ChineseName.getInstance().saveConfig();
    } else {
  p.sendMessage("你没有pcn.use这条权限");
    }
   } else if (strings.length == 2) {
    if (p.hasPermission("pcn.pcn.use")) {
  String name = strings[1];
  String pname = strings[0];
  if (Bukkit.getPlayer(pname) != null){
  Player p1 = Bukkit.getPlayer(strings[0]);
  name = name.replaceAll("&", "§");
  p.sendMessage(pname + " §a的中文名设置好了:" + ChatColor.RESET + name);
  p1.setDisplayName(name + ChatColor.RESET);
  ChineseName.getInstance().getConfig().set(p1.getName(), (Object)name);
  ChineseName.getInstance().saveConfig();
  }
  else {
   p.sendMessage("§4§l玩家不在线!");
  }
    } else {
  p.sendMessage("§4[ChineseName]你没有pcn.pcn.use这条权限");
    }
   } else {
    p.sendMessage("§a----------------§e[ChineseName]§a-------------------");
    p.sendMessage("§e插件食用方法:");
    p.sendMessage("§e/cn 中文名");
    p.sendMessage("§e/pcn ID 中文名");
    p.sendMessage("§e/pcncard 获取改名卡");
    p.sendMessage("§e/usecard 使用改名卡");
    p.sendMessage("§e作者QQ2563818664 bug请及时反映");
    p.sendMessage("§a----------------§e[ChineseName]§a-------------------");
   }
  } else {
   commandSender.sendMessage("§c§l不能给后台命名哦~");
  }
  return false;
    }


    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
  if (ChineseName.getInstance().getConfig().getString(event.getPlayer().getName()) != null) {
   event.getPlayer().setDisplayName(String.valueOf(ChineseName.getInstance().getConfig().getString(event.getPlayer().getName())) + ChatColor.RESET);
  }
    }
}


https://www.mcbbs.net/thread-1053547-1-1.html


这是我原来的插件帖子
代码和上面的差不多 但是我把两个文件合起来用一个命令了 就用不了了



南柯郡守
getConfig().options().copyDefaults();
这一句去掉

洞穴夜莺
为啥你在聊天事件里设置玩家名字啊?
你这pcn这奇怪的类名是什么玩意?
你哪注册了事件监听器了?
ChineseName.getPlugin(ChineseName.class);不提倡此种写法。

这里小雨.
南柯郡守 发表于 2020-8-24 10:18
getConfig().options().copyDefaults();
这一句去掉

不顶用啊

洞穴夜莺

这句话只会浪费CPU资源,不会造成主楼所提到的现象

这里小雨.
洞穴夜莺 发表于 2020-8-25 10:54
这句话只会浪费CPU资源,不会造成主楼所提到的现象

你上面是说
加这个吗Bukkit.getServer().getPluginManager().registerEvents((Listener) new pcn(),this);

洞穴夜莺
LaoguaB 发表于 2020-8-25 10:58
你上面是说
加这个吗Bukkit.getServer().getPluginManager().registerEvents((Listener) new pcn(),this) ...

在extends JavaPlugin后面加上implements Listener不过建议将插件主类和事件监听分开俩类
onEnable方法里Bukkit.getServer().getPluginManager().registerEvents(this,this);
pcn类里那个onPlayerChat可以删掉

注意这段代码
  1. @EventHandler
  2.     //玩家聊天事件
  3.     public void onPlayerChat(AsyncPlayerChatEvent e) {
  4.         //获取配置文件是否有玩家名字,如果有则执行
  5.         if (this.getConfig().getString(e.getPlayer().getName()) != null) {
  6.             e.getPlayer().setDisplayName(this.getConfig().getString(e.getPlayer().getName()) + ChatColor.RESET);
  7.         }
  8.     }
复制代码

请不要在网络线程操作实体,如需操作实体请在主线程操作

cioyenn
没必要监听玩家聊天事件

cioyenn
监听玩家进服和退服事件就行了