gpt4 book ai didi

java - 通过 Bungee 将玩家发送到另一个服务器

转载 作者:行者123 更新时间:2023-12-02 02:37:32 32 4
gpt4 key购买 nike

因此,我尝试使用以下代码在玩家输入“/lobby”时将其发送到大厅服务器:

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

但在游戏中,它返回“未知命令。键入“/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());

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

最佳答案

ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("连接");
out.writeUTF("服务器名称");
player.sendPluginMessage(PluginObject, "BungeeCord", out.toByteArray());

这就是您正在寻找的东西。为了回答你的问题,“a”始终是“连接”。 “b”是您要连接的服务器的名称(在您的情况下是“lobby”),“c”是玩家的名称(这是因为在示例中您提供了获取的信息)玩家的名字,但是如果您已经获得了玩家对象,则不需要)。

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

第二个解决方案有效的原因是,在 Minecraft 协议(protocol)中,有一个称为插件消息 channel 的东西,用于客户端和服务器之间的自定义消息。而且,当 Bungeecord 位于客户端和服务器中间时,它会监听某些消息,并且任何带有 Connect 标记的消息都会将玩家连接到指定的服务器。我希望这是有道理的。

关于java - 通过 Bungee 将玩家发送到另一个服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063531/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com