2017-07-06 7 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