本地玩家Bukkit / Spigot开发

时间:2017-07-06 20:31:05

标签: java minecraft bukkit

是否有命令获取本地播放器的显示名称。 因此,如果我创建聊天消息,所有玩家在聊天中都会看到自己的名字。有可能吗?怎么样?

1 个答案:

答案 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!