0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2023

Day 18

Bungeecord で接続したサーバーに存在するプレイヤーを他のサーバーにテレポートさせる

Last updated at Posted at 2023-12-07

はじめに

Bukkit プラグインから Bungeecord で管理しているサーバーに接続したプレイヤーを他のサーバーにテレポートさせる方法について。

準備

他のサーバーにテレポートさせるにはサーバーに BungeeCord plugin チャンネルを登録する必要があるので、onEnable メソッドに登録するコードを含めておきましょう。

@Override
public void onEnable() {
    this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
}

これにより、Bukkit プラグインから BungeeCord に文字列を送信する準備が整いました。

送信する文字列の準備

登録したチャンネルに命令を送り込むには、文字列を Byte 配列に変換する必要があります。
Spigot のリファレンスには Google Guava の ByteArrayDataoutput, DataInputStream を使うといいよと書いてあるので、それに従うことにします。

The byte array you will send (and receive) will use output generated by the DataInputStream and DataOutputStream classes. For convenience, we will use the ByteArrayDataInput and ByteArrayDataOutput classes from Google Guava, which silences IOException for us.
BungeeCord Plugin Messaging Channel

ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Connect");
out.writeUTF("サーバー名");
Byte[] data = out.toByteArray();

プレイヤーのテレポート

いよいよプレイヤーをテレポートさせます。
(今回は ytshiyugh というプレイヤーを対象とします。)

Plugin plugin = プラグインのインスタンス;
Player player = Bukkit.getPlayer("ytshiyugh");
player.sendPluginMessage(plugin, "BungeeCord", data);

["Connect", "サーバ―名"] を BungeeCord チャンネルに書き込みました。
対象とした名前のサーバーが存在する場合はサーバー変更が行われます。

おわりに

ただ単に player.chat("/server main") のように書いても、上記のような手順を踏まない限り書いた内容が BungeeCord によって拾われることはないので、プロキシ配下の他のサーバーに接続することは出来ません。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?