2017-09-05 3 views
0

J'ai essayé d'envoyer les joueurs au serveur du lobby quand on tape «/lobby » en utilisant ce code:Envoi joueur à un autre serveur par Bungee

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

Mais dans le jeu, il retourne « Unknown Commande Tapez "/ help" pour obtenir de l'aide. " J'ai aussi lu pour essayer ce code, mais je ne sais pas quoi mettre en place des « a », « b » et « 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()); 

Alors ma question est pourquoi le premier méthode ne fonctionne pas? Aussi, comment faites-vous fonctionner la deuxième solution? Y a-t-il du code que je dois mettre dans le serveur bungee?

Répondre

2

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

C'est ce que vous recherchez. Pour répondre à votre question, "a" est toujours "Connect". "b" est le nom du serveur auquel vous voulez vous connecter (dans votre cas c'est "lobby"), et "c" sera le nom du joueur (C'est parce que dans l'exemple que vous avez fourni votre get le joueur par son nom, cependant si vous avez déjà l'objet joueur, ce n'est pas nécessaire). Et juste pour que vous compreniez pourquoi dispatchCommand ne fonctionne pas, c'est parce que quand vous faites/server sur votre client, il envoie un paquet au Bungeecord car c'est ce à quoi votre client est connecté, et il intercepte ce paquet de commande lisez-le et voyez que c'est une commande de serveur. Il va ensuite vous connecter au bon serveur. Si vous utilisez dispatchCommand sur le serveur Bukkit, il exécutera la commande comme s'il venait de recevoir un paquet de commande, ce qui signifie qu'il n'enverra jamais aucun type de message au bungeecord ou au client pour qu'il exécute une commande. La méthode dispatchCommand ne sera exécutée que sur le serveur bukkit.

La raison pour laquelle la deuxième solution fonctionne est parce que dans le protocole Minecraft il y a ce qu'on appelle le canal de messagerie plugin, pour les messages personnalisés entre le client et le serveur. Et encore une fois que le Bungeecord se trouve au milieu du client et du serveur, il écoute sur certains messages, et l'un d'eux marqué avec Connect connectera un joueur au serveur spécifié. J'espère que cela a du sens.