Bukkit 1.20 跨服传送插件:使用 BungeeCord 实现玩家自由传送

这是一个使用Java编写的Bukkit插件,用于实现BungeeCord与Spigot服务器之间的玩家传送功能,允许玩家通过/tpa指令进行跨服传送。

功能:

  • 玩家在A服务器输入/tpa <玩家名称>指令,即可向B服务器上的目标玩家发送传送请求。* 目标玩家收到请求后,可以选择接受或拒绝。* 接受请求后,A服务器的玩家会被传送到B服务器目标玩家的身边。

**代码:**javaimport net.md_5.bungee.api.ChatColor;import net.md_5.bungee.api.chat.TextComponent;import org.bukkit.Bukkit;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.plugin.java.JavaPlugin;import org.bukkit.plugin.messaging.PluginMessageListener;

public class PlayerTeleportPlugin extends JavaPlugin implements PluginMessageListener {

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

@Override    public void onDisable() {        getServer().getMessenger().unregisterIncomingPluginChannel(this);    }

@Override    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {        if (cmd.getName().equalsIgnoreCase('tpa')) {            if (!(sender instanceof Player)) {                sender.sendMessage('该命令只能由玩家执行!');                return true;            }

        Player player = (Player) sender;            if (args.length != 1) {                player.sendMessage(ChatColor.RED + '正确的命令格式:/tpa <玩家名称>');                return true;            }

        Player targetPlayer = Bukkit.getPlayer(args[0]);            if (targetPlayer == null) {                player.sendMessage(ChatColor.RED + '找不到玩家 ' + args[0]);                return true;            }

        sendTeleportRequest(player, targetPlayer);            return true;        }        return false;    }

private void sendTeleportRequest(Player player, Player targetPlayer) {        String serverName = player.getServer().getInfo().getName();        String targetServerName = targetPlayer.getServer().getInfo().getName();

    TextComponent message = new TextComponent();        message.setText('Connect');        message.setColor(net.md_5.bungee.api.ChatColor.GREEN);        message.setBold(true);        message.setClickEvent(new net.md_5.bungee.api.chat.ClickEvent(net.md_5.bungee.api.chat.ClickEvent.Action.RUN_COMMAND, '/server ' + targetServerName));        message.setHoverEvent(new net.md_5.bungee.api.chat.HoverEvent(net.md_5.bungee.api.chat.HoverEvent.Action.SHOW_TEXT, new TextComponent[]{new TextComponent('点击接受传送请求')}));

    player.sendMessage(ChatColor.GREEN + '传送请求已发送给 ' + targetPlayer.getName());        targetPlayer.sendMessage(ChatColor.YELLOW + player.getName() + ' 请求传送到你的身边。');        targetPlayer.spigot().sendMessage(message);    }

@Override    public void onPluginMessageReceived(String channel, Player player, byte[] message) {        if (!channel.equals('BungeeCord')) {            return;        }

    String data = new String(message);        if (data.startsWith('PlayerTeleport')) {            String[] parts = data.split(':');            if (parts.length == 3) {                String playerName = parts[1];                String targetPlayerName = parts[2];

            Player targetPlayer = Bukkit.getPlayer(targetPlayerName);                if (targetPlayer != null) {                    player.teleport(targetPlayer);                    player.sendMessage(ChatColor.GREEN + '你已被传送到 ' + targetPlayer.getName() + ' 的身边。');                } else {                    player.sendMessage(ChatColor.RED + '找不到玩家 ' + targetPlayerName);                }            }        }    }}

使用方法:

  1. 将代码保存为 PlayerTeleportPlugin.java 文件。2. 使用 Java 编译器编译代码,生成 .jar 文件。3. 将 .jar 文件放置在 BungeeCord 服务器的 plugins 文件夹和所有 Spigot 服务器的 plugins 文件夹中。4. 重启 BungeeCord 服务器和所有 Spigot 服务器。

注意:

  • 该插件需要配合 BungeeCord 插件使用。* 确保所有服务器都已安装并启用了该插件。

希望这个插件可以帮助你在你的 Minecraft 服务器上实现跨服传送功能!


原文地址: https://www.cveoy.top/t/topic/fUak 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录