通过蹦极将玩家发送到另一台服务器

时间:2017-09-05 21:21:59

标签: java minecraft bukkit

所以当他们输入" / lobby"时,我试图将玩家送到大厅服务器。使用此代码:

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

但在游戏中,它会返回"未知命令。输入" / help"寻求帮助。" 我也读过试试这段代码,但我不知道应该代替" a"," b"和" c& #34;

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());

所以我的问题是为什么第一种方法不起作用?另外,您如何使第二个解决方案工作?我需要在蹦极服务器中放置代码吗?

1 个答案:

答案 0 :(得分:2)

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

这就是你要找的东西。要回答你的问题," a"总是"连接"。 " B"是您要连接的服务器的名称(在您的情况下,这是" lobby")," c"将是玩家的名字(这是因为在你举例说明你已经按照他们的名字获得了玩家,但是如果你已经获得玩家对象,则不需要)。

只是为了让你理解为什么dispatchCommand不起作用,这是因为当你在客户端上执行/服务器时,它会向Bungeecord发送一个数据包,就像你的客户端所连接的那样to,它将拦截该命令包读取它并看到它是服务器命令。然后它将继续将您连接到正确的服务器。如果你在Bukkit服务器上使用dispatchCommand,它将执行命令,好像它只是收到一个命令包,这意味着它永远不会向bungeecord或客户端发送任何类型的消息来让它执行命令。 dispatchCommand方法只能在bukkit服务器上运行。

第二个解决方案的工作原因是因为在Minecraft协议中,这个东西称为插件消息传递通道,用于客户端和服务器之间的自定义消息。然而,当Bungeecord位于客户端和服务器的中间时,它会侦听某些消息,并且任何标记为Connect的都会将播放器连接到指定的服务器。我希望这是有道理的。