2017-09-05 1 views
0

Also habe ich versucht, die Spieler in dem Lobby-Server zu senden, wenn sie „/ Lobby“ geben, indem Sie diesen Code verwenden:Spieler auf einem anderen Server durch Bungee Senden

Bukkit.getServer().dispatchCommand((Player) player, "server lobby"); 

Aber in Spiel, gibt es „Unbekannten Befehl Geben Sie "/ help" für Hilfe ein. " Ich habe auch diesen Code, um zu versuchen zu lesen, aber ich weiß nicht, was anstelle von „a“ zu setzen, „b“ und „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()); 

So ist meine Frage, warum tut dem erst Methode funktioniert nicht? Wie funktioniert die zweite Lösung? Gibt es Code, den ich in den Bungee-Server legen muss?

Antwort

2

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

Dies ist, was Sie suchen. Um Ihre Frage zu beantworten, ist "a" immer "Verbinden". "b" ist der Name des Servers, mit dem Sie eine Verbindung herstellen möchten (in Ihrem Fall ist dies "Lobby"), und "c" wird der Name des Spielers sein (Dies liegt daran, dass Sie in dem Beispiel Ihre bekommen haben der Spieler mit seinem Namen, aber wenn Sie das Spielerobjekt bereits haben, wird dies nicht benötigt).

Und damit Sie verstehen, warum dispatchCommand nicht funktioniert, liegt es daran, dass wenn Sie/server auf Ihrem Client ein Paket an das Bungeecord senden, da Ihr Client damit verbunden ist und dieses Befehlspaket abfängt lese es und sieh, dass es ein Serverbefehl ist. Es wird dann fortfahren, Sie mit dem richtigen Server zu verbinden. Wenn Sie dispatchCommand auf dem Bukkit-Server verwenden, wird der Befehl so ausgeführt, als hätte er gerade ein Befehlspaket erhalten, was bedeutet, dass er niemals irgendeine Art von Nachricht an das Bungeecord oder an den Client sendet, um einen Befehl auszuführen. Die Methode dispatchCommand wird nur auf dem Bukkit-Server ausgeführt.

Der Grund, dass die zweite Lösung funktioniert, ist, weil im Minecraft-Protokoll gibt es diese Sache, die den plugin messaging channel, für benutzerdefinierte Nachrichten zwischen dem Client und dem Server. Und noch einmal, da das Bungeecord in der Mitte des Clients und des Servers sitzt, hört es bestimmte Nachrichten ab, und alle, die mit Connect markiert sind, verbinden einen Spieler mit dem spezifizierten Server. Ich hoffe das macht Sinn.

Verwandte Themen