Bukkit 1.20 跨服传送插件:使用 BungeeCord 实现玩家自由传送
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); } } } }}
使用方法:
- 将代码保存为
PlayerTeleportPlugin.java文件。2. 使用 Java 编译器编译代码,生成.jar文件。3. 将.jar文件放置在 BungeeCord 服务器的plugins文件夹和所有 Spigot 服务器的plugins文件夹中。4. 重启 BungeeCord 服务器和所有 Spigot 服务器。
注意:
- 该插件需要配合 BungeeCord 插件使用。* 确保所有服务器都已安装并启用了该插件。
希望这个插件可以帮助你在你的 Minecraft 服务器上实现跨服传送功能!
原文地址: https://www.cveoy.top/t/topic/fUak 著作权归作者所有。请勿转载和采集!