私は、Bungee - > Bungeeからのプラグインメッセージを送信して、その情報を要求することによって、プレーヤーに関するデータ(特に、それらが入っているチャットチャネル)を受信するためにBungeeCord/Bukkitプラグインメッセージングチャネルを使用しようとしています。 ここに私の問題があります。 (プラグインメッセージの形式で)BungeeCordサーバーからの応答のためにを待ってから、それを受信したら使用する必要があります。Bukkit Plugin Messaging
私はチュートリアルhereを使用しますが、プラグインのメッセージがバンジーサーバから受け取っているときonPluginMessageReceived
が発生しませんので、notifyAll
は発生しませんので、サーバーだけでクラッシュします。ここで
は、情報を要求するためのコードです:
public synchronized Object get(Player p, String... data) {
sendToBungeeCord(p,"get",data);
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
return obj.get(p);
}
そしてここでは、受け取っれているプラグインのメッセージのためのコードです:
@Override
public synchronized void onPluginMessageReceived(String channel, Player player, byte[] message) {
player.sendMessage("return");
if (channel.equals("BungeeCord")) {
ByteArrayDataInput in = ByteStreams.newDataInput(message);
String action = in.readUTF();
if (action.equals("get")) {
String dataType = in.readUTF();
String id = in.readUTF();
if (dataType.equals("channel")) {
obj.put(player,id);
this.notifyAll();
}
} else if (action.equals("test")) {
player.sendMessage(in.readUTF());
}
}
}
残りをINGのwait
せずにこれを行う方法がある場合(プラグインの残りの部分は、応答を待っている間に実行できます)私はそれについてどうやって行くのか理解してください。