是否有命令获取本地播放器的显示名称。 因此,如果我创建聊天消息,所有玩家在聊天中都会看到自己的名字。有可能吗?怎么样?
答案 0 :(得分:2)
不,你不能得到" local"玩家名称,因为谁将运行代码是服务器,而不是客户端,所以你不能得到它,因为没有本地玩家。但是,您仍然可以为具有不同名称的不同人发送自定义消息,以模拟此效果。
基于this示例,您只需通过/ tellraw命令向您要发送消息的玩家发送消息,例如:
public static void sendMessage(String playerName, String msg) {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),
"/tellraw " + playerName + " {\"text\":\"" + msg.replaceAll("<playername>", playerName) + "\"}");
}
在这种情况下,我使用<playername>
作为关键字来引用播放器,因此Hello <playername>
应该返回Hello yourname
...
但是,当你没有玩家对象时,这个解决方案会更好,并且不浪费你的机器创建它的时间,你可以简单地使用tellraw ...但是为了简化答案,你可以使用Player::sendMessage
方法(引用bcsb1001)。:
public static void sendMessage(Player player, String msg){
player.sendMessage(msg.replaceAll("<playername>", player.getName()));
}
好的,但是如何将它发送给群组中的每个人或阵列?
在这种情况下,您可以为每个玩家使用for each
循环。
以下是完整代码,可以在线向每位玩家发送问候消息:
public static void sayHelloToEveryone() {
String msg = "Hello <playername>!";
for (Player p : Bukkit.getServer().getOnlinePlayers()) {
p.sendMessage(msg.replaceAll("<playername>", p.getName()));
}
}
因此,当您使用sayHelloToEveryone()
时,它会根据姓名向所有人发送消息:
如果Steve和Ruben在线,服务器将向两个用户发送不同的消息:
史蒂夫的聊天: Hello Steve!
Ruben的聊天: Hello Ruben!