From 2c1a5cce36bc983b8faa1c6237e0294b4cbbfd4c Mon Sep 17 00:00:00 2001 From: XiaoLFeng Date: Thu, 12 Oct 2023 22:17:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontleaves/bungeecross/BungeeCross.java | 8 ++-- .../commands/PluginInfoCommand.java | 44 +++++++++++++---- .../commands/ProxyServerListCommand.java | 3 +- .../commands/ReturnHubCommand.java | 21 +++++--- .../commands/SendToServerCommand.java | 48 ++++++++++++++----- .../configuration/ServerEnable.java | 35 +++++++++----- .../configuration/VariableStorage.java | 16 +++++++ .../events/PlayerJoinProxyEvent.java | 25 ++++++++-- .../events/PlayerLeaveProxyEvent.java | 26 ++++++++-- 9 files changed, 179 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/frontleaves/bungeecross/BungeeCross.java b/src/main/java/com/frontleaves/bungeecross/BungeeCross.java index c173dd9..4373417 100644 --- a/src/main/java/com/frontleaves/bungeecross/BungeeCross.java +++ b/src/main/java/com/frontleaves/bungeecross/BungeeCross.java @@ -7,12 +7,13 @@ import com.frontleaves.bungeecross.commands.SendToServerCommand; import com.frontleaves.bungeecross.configuration.ServerEnable; import com.frontleaves.bungeecross.configuration.VariableStorage; import com.frontleaves.bungeecross.events.PlayerJoinProxyEvent; +import com.frontleaves.bungeecross.events.PlayerLeaveProxyEvent; import lombok.Getter; import net.md_5.bungee.api.plugin.Plugin; /** - * @version 见 final VERSION 变量 * @author 筱锋xiao_lfeng + * @version 见 final VERSION 变量 */ public final class BungeeCross extends Plugin { @Getter @@ -26,13 +27,14 @@ public final class BungeeCross extends Plugin { ServerEnable serverEnable = new ServerEnable(this); serverEnable.serverStart(); // 注册指令 - getProxy().getPluginManager().registerCommand(this, new PluginInfoCommand("bungeecross")); + getProxy().getPluginManager().registerCommand(this, new PluginInfoCommand("bungeecross", this)); getProxy().getPluginManager().registerCommand(this, new ProxyServerListCommand("server-list")); getProxy().getPluginManager().registerCommand(this, new ReturnHubCommand("lobby", this)); getProxy().getPluginManager().registerCommand(this, new SendToServerCommand("serverTo", this)); getProxy().getPluginManager().registerCommand(this, new SendToServerCommand("sto", this)); // 注册监听器 - getProxy().getPluginManager().registerListener(this, new PlayerJoinProxyEvent()); + getProxy().getPluginManager().registerListener(this, new PlayerJoinProxyEvent(this)); + getProxy().getPluginManager().registerListener(this, new PlayerLeaveProxyEvent(this)); } @Override diff --git a/src/main/java/com/frontleaves/bungeecross/commands/PluginInfoCommand.java b/src/main/java/com/frontleaves/bungeecross/commands/PluginInfoCommand.java index 290c205..ad5ffd5 100644 --- a/src/main/java/com/frontleaves/bungeecross/commands/PluginInfoCommand.java +++ b/src/main/java/com/frontleaves/bungeecross/commands/PluginInfoCommand.java @@ -1,9 +1,11 @@ package com.frontleaves.bungeecross.commands; import com.frontleaves.bungeecross.BungeeCross; +import com.frontleaves.bungeecross.configuration.ServerEnable; import com.frontleaves.bungeecross.configuration.VariableStorage; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; +import org.jetbrains.annotations.NotNull; /** * 输出插件基本信息 @@ -12,17 +14,43 @@ import net.md_5.bungee.api.plugin.Command; */ public class PluginInfoCommand extends Command { - public PluginInfoCommand(String name) { + private final BungeeCross plugin; + + public PluginInfoCommand(String name, BungeeCross bungeeCross) { super(name); + plugin = bungeeCross; } @Override - public void execute(CommandSender commandSender, String[] strings) { - commandSender.sendMessage("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); - commandSender.sendMessage(VariableStorage.getPrefix() + "蹦极插件:§2Bungee§aCross"); - commandSender.sendMessage(VariableStorage.getPrefix() + "作者:" + BungeeCross.getAUTHOR()); - commandSender.sendMessage(VariableStorage.getPrefix() + "版本:" + BungeeCross.getVERSION()); - commandSender.sendMessage(VariableStorage.getPrefix() + "§b您的版本为最新的"); - commandSender.sendMessage("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); + public void execute(@NotNull CommandSender commandSender, String @NotNull [] strings) { + switch (strings.length) { + case 1: { + if ("reload".equals(strings[0])) { + if (commandSender.hasPermission("bungeecross.admin")) { + ServerEnable serverEnable = new ServerEnable(plugin); + serverEnable.serverReload(); + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "您不是管理员,无法进行操作"); + } + } else if ("update".equals(strings[0])) { + if (commandSender.hasPermission("bungeecross.admin")) { + commandSender.sendMessage(VariableStorage.getPrefix() + "您的版本为最新的 " + BungeeCross.getVERSION()); + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "您不是管理员,无法进行操作"); + } + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "参数无效"); + } + } + break; + default: { + commandSender.sendMessage("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); + commandSender.sendMessage(VariableStorage.getPrefix() + "跨服插件:§2Bungee§aCross"); + commandSender.sendMessage(VariableStorage.getPrefix() + "§6作者:§e" + BungeeCross.getAUTHOR()); + commandSender.sendMessage(VariableStorage.getPrefix() + "§9版本:§d" + BungeeCross.getVERSION()); + commandSender.sendMessage(VariableStorage.getPrefix() + "§b您的版本为最新的"); + commandSender.sendMessage("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); + } + } } } diff --git a/src/main/java/com/frontleaves/bungeecross/commands/ProxyServerListCommand.java b/src/main/java/com/frontleaves/bungeecross/commands/ProxyServerListCommand.java index 08b08eb..e5876b5 100644 --- a/src/main/java/com/frontleaves/bungeecross/commands/ProxyServerListCommand.java +++ b/src/main/java/com/frontleaves/bungeecross/commands/ProxyServerListCommand.java @@ -3,6 +3,7 @@ package com.frontleaves.bungeecross.commands; import com.frontleaves.bungeecross.configuration.VariableStorage; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; +import org.jetbrains.annotations.NotNull; /** * 查询服务器列表 @@ -19,7 +20,7 @@ public class ProxyServerListCommand extends Command { } @Override - public void execute(CommandSender commandSender, String[] strings) { + public void execute(@NotNull CommandSender commandSender, String[] strings) { // 整理数据 serverList = null; VariableStorage.getProxyServer().forEach((key, serverInfo) -> { diff --git a/src/main/java/com/frontleaves/bungeecross/commands/ReturnHubCommand.java b/src/main/java/com/frontleaves/bungeecross/commands/ReturnHubCommand.java index b0e9c42..52561c7 100644 --- a/src/main/java/com/frontleaves/bungeecross/commands/ReturnHubCommand.java +++ b/src/main/java/com/frontleaves/bungeecross/commands/ReturnHubCommand.java @@ -3,19 +3,22 @@ package com.frontleaves.bungeecross.commands; import com.frontleaves.bungeecross.BungeeCross; import com.frontleaves.bungeecross.configuration.VariableStorage; import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import org.jetbrains.annotations.NotNull; +import java.util.Random; + /** * 返回大厅指令 * * @author 筱锋xiao_lfeng - * @since v1.0-SNAPSHOT * @version v1.0-SNAPSHOT + * @since v1.0-SNAPSHOT */ public class ReturnHubCommand extends Command { private final BungeeCross plugin; + public ReturnHubCommand(String name, BungeeCross bungeeCross) { super(name); plugin = bungeeCross; @@ -25,11 +28,17 @@ public class ReturnHubCommand extends Command { public void execute(@NotNull CommandSender commandSender, String[] strings) { // 检查玩家所属服务器 String playerName = commandSender.getName(); - ServerInfo serverInfo = plugin.getProxy().getPlayer(playerName).getServer().getInfo(); - if (VariableStorage.getLoginServer().contains(serverInfo.getName())) { - commandSender.sendMessage(VariableStorage.getPrefix() + "登录服无权限传送"); + if (commandSender instanceof ProxiedPlayer) { + String userServerInfo = plugin.getProxy().getPlayer(playerName).getServer().getInfo().getName(); + if (VariableStorage.getLoginServer().contains(userServerInfo)) { + commandSender.sendMessage(VariableStorage.getPrefix() + "登录服无权限传送"); + } else { + Random random = new Random(); + int getKey = random.nextInt(VariableStorage.getLobbyServer().size()); + plugin.getProxy().getPlayer(playerName).connect(plugin.getProxy().getServerInfo((String) VariableStorage.getLobbyServer().get(getKey))); + } } else { - plugin.getProxy().getPlayer(playerName).connect(plugin.getProxy().getServerInfo("登陆大厅")); + commandSender.sendMessage(VariableStorage.getPrefix() + "该指令只允许玩家使用"); } } } diff --git a/src/main/java/com/frontleaves/bungeecross/commands/SendToServerCommand.java b/src/main/java/com/frontleaves/bungeecross/commands/SendToServerCommand.java index 8332d1f..e784bb3 100644 --- a/src/main/java/com/frontleaves/bungeecross/commands/SendToServerCommand.java +++ b/src/main/java/com/frontleaves/bungeecross/commands/SendToServerCommand.java @@ -62,30 +62,56 @@ public class SendToServerCommand extends Command { ServerInfo serverInfo = plugin.getProxy().getServers().get(strings[0]); if (serverInfo != null) { ProxiedPlayer player = plugin.getProxy().getPlayer(strings[1]); - // 玩家是否已链接 - if (player != null) { - if (player.isConnected()) { - ServerInfo playerServer = player.getServer().getInfo(); - if (playerServer != serverInfo) { - player.connect(serverInfo); - commandSender.sendMessage(VariableStorage.getPrefix() + "已将 " + player.getName() + " 用户传送到 " + serverInfo.getName() + " 服务器"); + if (commandSender instanceof ProxiedPlayer) { + ServerInfo serverName = plugin.getProxy().getPlayer(commandSender.getName()).getServer().getInfo(); + if (!VariableStorage.getLoginServer().contains(serverName.getName())) { + // 玩家是否已链接 + if (player != null) { + if (player.isConnected()) { + ServerInfo playerServer = player.getServer().getInfo(); + if (playerServer != serverInfo) { + player.connect(serverInfo); + commandSender.sendMessage(VariableStorage.getPrefix() + "已将 " + player.getName() + " 用户传送到 " + serverInfo.getName() + " 服务器"); + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + player.getName() + " 正处于 " + playerServer.getName() + " 服务器中"); + } + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + player.getName() + " 不在线"); + } } else { - commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + player.getName() + " 正处于 " + playerServer.getName() + " 服务器中"); + commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + strings[1] + " 不在线"); } } else { - commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + player.getName() + " 不在线"); + commandSender.sendMessage(VariableStorage.getPrefix() + "登录服禁止进行服务器跳转"); } } else { - commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + strings[1] + " 不在线"); + // 玩家是否已链接 + if (player != null) { + if (player.isConnected()) { + ServerInfo playerServer = player.getServer().getInfo(); + if (playerServer != serverInfo) { + player.connect(serverInfo); + commandSender.sendMessage(VariableStorage.getPrefix() + "已将 " + player.getName() + " 用户传送到 " + serverInfo.getName() + " 服务器"); + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + player.getName() + " 正处于 " + playerServer.getName() + " 服务器中"); + } + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + player.getName() + " 不在线"); + } + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "玩家 " + strings[1] + " 不在线"); + } } } else { commandSender.sendMessage(VariableStorage.getPrefix() + "服务器不存在"); } + } else { + commandSender.sendMessage(VariableStorage.getPrefix() + "您不是管理员,无权限操作玩家"); } } break; default: { - commandSender.sendMessage(VariableStorage.getPrefix() + "参数无效"); + commandSender.sendMessage(VariableStorage.getPrefix() + "使用方法 /sto [player]"); } } } diff --git a/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java b/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java index a46aea6..598bb0d 100644 --- a/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java +++ b/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java @@ -37,6 +37,17 @@ public class ServerEnable { System.out.println("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); } + public void serverReload() { + this.getConfig(); + this.getLang(); + + System.out.println(VariableStorage.getPrefix() + "§c配置文件重载完毕"); + System.out.println("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); + System.out.println("§6作者:§e" + BungeeCross.getAUTHOR()); + System.out.println("§9版本:§d" + BungeeCross.getVERSION()); + System.out.println("§9§l§m=]=======§2 Bungee§aCross §9§l§m========[="); + } + private void getLang() { } @@ -95,24 +106,24 @@ public class ServerEnable { VariableStorage.setLobbyServer(config.getList("bungee-cord.server-login")); } // 获取登陆提醒 - if (config.getString("bungee-cord.login-reminder") != null && !config.getString("bungee-cord.login-reminder").isEmpty()) { + if (config.getString("bungee-cord.login-reminder") != null) { VariableStorage.setBungeeCordReminder(config.getBoolean("bungee-cord.login-reminder")); - if (config.getString("bungee-cord.join-message") != null && !config.getString("bungee-cord.join-message").isEmpty()) { - VariableStorage.setJoinMessage(config.getString("bungee-cord.join-message")); - } else { - VariableStorage.setJoinMessage("§7[§a+§7] §6%player%"); - } - if (config.getString("bungee-cord.leave-message") != null && !config.getString("bungee-cord.leave-message").isEmpty()) { - VariableStorage.setLeaveMessage(config.getString("bungee-cord.leave-message")); - } else { - VariableStorage.setLeaveMessage("§7[§c-§7] §6%player%"); - } } else { config.set("bungee-cord.login-reminder", true); VariableStorage.setBungeeCordReminder(true); } + if (config.getString("bungee-cord.join-message") != null && !config.getString("bungee-cord.join-message").isEmpty()) { + VariableStorage.setJoinMessage(config.getString("bungee-cord.join-message")); + } else { + VariableStorage.setJoinMessage("§7[§a+§7] §6%player%"); + } + if (config.getString("bungee-cord.leave-message") != null && !config.getString("bungee-cord.leave-message").isEmpty()) { + VariableStorage.setLeaveMessage(config.getString("bungee-cord.leave-message")); + } else { + VariableStorage.setLeaveMessage("§7[§c-§7] §6%player%"); + } // 是否开启管理员静默登录 - if (config.getString("bungee-cord.login-silent") != null && !config.getString("bungee-cord.login-silent").isEmpty()) { + if (config.getString("bungee-cord.login-silent") != null) { VariableStorage.setBungeeSilent(config.getBoolean("bungee-cord.login-silent")); } else { config.set("bungee-cord.login-silent", true); diff --git a/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java b/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java index 84235f4..eddff1a 100644 --- a/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java +++ b/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java @@ -28,4 +28,20 @@ public class VariableStorage { @Getter @Setter private static List lobbyServer; + + @Getter + @Setter + private static boolean bungeeCordReminder; + + @Getter + @Setter + private static String joinMessage; + + @Getter + @Setter + private static String leaveMessage; + + @Getter + @Setter + private static boolean bungeeSilent; } diff --git a/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java b/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java index 4fabfd7..64b9d77 100644 --- a/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java +++ b/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java @@ -1,11 +1,14 @@ package com.frontleaves.bungeecross.events; +import com.frontleaves.bungeecross.BungeeCross; import com.frontleaves.bungeecross.configuration.VariableStorage; -import net.md_5.bungee.api.event.ServerConnectedEvent; +import net.md_5.bungee.api.event.LoginEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import org.jetbrains.annotations.NotNull; +import java.util.regex.Pattern; + /** * 玩家登录服务器事件 * @@ -14,9 +17,25 @@ import org.jetbrains.annotations.NotNull; * @since v1.0-SNAPSHOT */ public class PlayerJoinProxyEvent implements Listener { + private final BungeeCross plugin; + + public PlayerJoinProxyEvent(BungeeCross bc) { + plugin = bc; + } @EventHandler - public void onPlayerJoinProxy(@NotNull ServerConnectedEvent event) { - event.getPlayer().connect(VariableStorage.getProxyServer().get("login_1")); + public void onPlayerJoinProxy(@NotNull LoginEvent event) { + // 发送用户登录信息 + String loginServerMessage = VariableStorage.getJoinMessage(); + if (VariableStorage.isBungeeCordReminder()) { + if (!VariableStorage.isBungeeSilent()) { + plugin.getProxy().getPlayers().forEach(proxiedPlayer -> { + String message = Pattern.compile("%player%").matcher(loginServerMessage).replaceAll(event.getConnection().getName()); + proxiedPlayer.sendMessage(message); + }); + } + } + String message = Pattern.compile("%player%").matcher(loginServerMessage).replaceAll(event.getConnection().getName()); + System.out.println(message); } } diff --git a/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java b/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java index 2350b1c..950a4e7 100644 --- a/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java +++ b/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java @@ -1,10 +1,14 @@ package com.frontleaves.bungeecross.events; -import net.md_5.bungee.api.event.ServerDisconnectEvent; +import com.frontleaves.bungeecross.BungeeCross; +import com.frontleaves.bungeecross.configuration.VariableStorage; +import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import org.jetbrains.annotations.NotNull; +import java.util.regex.Pattern; + /** * 玩家离开服务器事件 * @@ -13,9 +17,25 @@ import org.jetbrains.annotations.NotNull; * @since v1.0-SNAPSHOT */ public class PlayerLeaveProxyEvent implements Listener { + private final BungeeCross plugin; + + public PlayerLeaveProxyEvent(BungeeCross bc) { + plugin = bc; + } @EventHandler - public void onPlayerDisconnectEvent(@NotNull ServerDisconnectEvent event) { - + public void onPlayerDisconnectEvent(@NotNull PlayerDisconnectEvent event) { + // 发送用户登录信息 + String leaveServerMessage = VariableStorage.getLeaveMessage(); + if (VariableStorage.isBungeeCordReminder()) { + if (!VariableStorage.isBungeeSilent()) { + plugin.getProxy().getPlayers().forEach(proxiedPlayer -> { + String message = Pattern.compile("%player%").matcher(leaveServerMessage).replaceAll(event.getPlayer().getName()); + proxiedPlayer.sendMessage(message); + }); + } + } + String message = Pattern.compile("%player%").matcher(leaveServerMessage).replaceAll(event.getPlayer().getName()); + System.out.println(message); } }