本帖最后由 LaoguaB 于 2020-8-25 10:52 编辑 
设置完中文名 可以正常使用
当重启服务器后 中文名就没了
主类↓
https://www.mcbbs.net/thread-1053547-1-1.html
这是我原来的插件帖子
代码和上面的差不多 但是我把两个文件合起来用一个命令了 就用不了了
当重启服务器后 中文名就没了
主类↓
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
这是我原来的插件帖子
代码和上面的差不多 但是我把两个文件合起来用一个命令了 就用不了了
设置完中文名 可以正常使用
当重启服务器后 中文名就没了
主类↓
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);不提倡此种写法。
你这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可以删掉
注意这段代码
-  @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);
 
-         }
 
- }
请不要在网络线程操作实体,如需操作实体请在主线程操作
没必要监听玩家聊天事件
监听玩家进服和退服事件就行了