2017-07-06 29 views
-2

是否有命令获取本地播放器的显示名称。 因此,如果我创建聊天消息,所有玩家都会在聊天中看到自己的名字。这是可能的和如何?本地播放器Bukkit/Spigot开发

回答

2

不,你不能得到“本地”玩家的名字,因为谁会运行代码是服务器,而不是客户端,所以你不能得到它,因为没有本地玩家。但是,您仍然可以为具有不同名称的不同人员发送自定义消息来模拟此效果。

总部设在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 ... 但是,如果没有Player对象,并且不浪费机器创建它的时间,这种解决方案会更好,您可以简单地使用tellraw。 ..但要简化回答,你可以使用Player::sendMessage方法(引用bcsb1001):

public static void sendMessage(Player player, String msg){ 
    player.sendMessage(msg.replaceAll("<playername>", player.getName())); 
} 

好的,但我怎样才能把它发送给每个人在一个组或阵列?
在这种情况下,您可以为每个玩家使用for each循环。

这里是代码发送hello报文的每一个玩家在线:

public static void sayHelloToEveryone() { 
    String msg = "Hello <playername>!"; 
    for (Player p : Bukkit.getServer().getOnlinePlayers()) { 
     p.sendMessage(msg.replaceAll("<playername>", p.getName())); 
    } 
} 

因此,当您使用sayHelloToEveryone(),它会根据自己的名义发送一条消息给大家:

如果有史蒂夫·鲁本线上,服务器会发送一个不同的消息,这两个用户:
史蒂夫的聊天:Hello Steve!
Ruben的聊天:Hello Ruben!

+1

当你只需要执行'Player :: sendMessage'时,使用tellraw有什么意义?你没有使用任何需要tellraw JSON的东西。 – bcsb1001

+0

@ bcsb1001使用tellraw的一点是,你实际上可以指定玩家的名字,而不是玩家对象,如果你打算在一个命令中指定他们,就会更容易......不过,我要添加这个从OP请求广播到答案,谢谢! – Mateus

相关问题