2017-09-05 1 views
0

介して別のサーバーにプレイヤーを送信するだから私はこのコードを使用することによって、彼らが入力したときに、ロビーサーバに選手を送るために「/ロビー」を試してみました"/ help"と入力してください。 最初はない、なぜ私の質問があり、私もこのコードを試して読んだが、私は「A」、「B」、および「C」はバンジー

ByteArrayDataOutput out = ByteStreams.newDataOutput(); 
out.writeUTF("a"); 
out.writeUTF("b");  
//applies to the player you send it to. aka Kick To Server. 
Player player = Bukkit.getPlayerExact("c"); 
player.sendPluginMessage(this, "BungeeCord", out.toByteArray()); 

の場所に置くことがわかりませんメソッドが動作しない?また、どのように2番目のソリューションを動作させるのですか?私はバンジーサーバーに入れる必要があるコードはありますか?

答えて

2

ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); out.writeUTF("ServerName"); player.sendPluginMessage(PluginObject, "BungeeCord", out.toByteArray());

これは、あなたが探しているものです。あなたの質問に答えるために、 "a"は常に "Connect"です。 "b"は接続したいサーバーの名前です(あなたの場合は "ロビー"です)。 "c"はプレーヤーの名前です(これは、あなたはすでにプレーヤーオブジェクトを持っている場合は、これは必要ありません)。

なぜdispatchCommandが機能しないのかを理解するためには、クライアント上で/ serverを実行するとBungeecordにパケットが送信され、クライアントが接続されているので、コマンドパケットを傍受しますそれを読んでそれがサーバーコマンドであることを確認してください。次に、適切なサーバーに接続します。 BuckkitサーバーでdispatchCommandを使用すると、コマンドパケットを受信したかのようにコマンドが実行されます。これは、コマンドを実行するためにバンケットコードまたはクライアントにメッセージを送信しないことを意味します。 dispatchCommandメソッドは、bukkitサーバー上でのみ実行されます。

2つ目のソリューションが動作する理由は、Minecraftプロトコルには、クライアントとサーバー間のカスタムメッセージ用のプラグインメッセージチャネルと呼ばれるものがあるからです。 Bungeecordがクライアントとサーバーの中間に座ると、特定のメッセージを受信し、Connectでタグ付けされたメッセージはプレーヤーを指定されたサーバーに接続します。私はこれが理にかなってほしい。