From dff6e63dc81da85e03727b2027476859c851a69b Mon Sep 17 00:00:00 2001 From: XiaoLFeng Date: Fri, 20 Oct 2023 00:02:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B7=A8=E6=9C=8D=E6=8F=90?= =?UTF-8?q?=E9=86=92=EF=BC=8C=E5=AD=90=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontleaves/bungeecross/BungeeCross.java | 2 + .../configuration/ServerEnable.java | 17 +++++- .../configuration/VariableStorage.java | 10 ++++ .../events/PlayerCrossServerEvent.java | 56 +++++++++++++++++++ .../events/PlayerJoinProxyEvent.java | 10 +++- .../events/PlayerLeaveProxyEvent.java | 10 +++- 6 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/frontleaves/bungeecross/events/PlayerCrossServerEvent.java diff --git a/src/main/java/com/frontleaves/bungeecross/BungeeCross.java b/src/main/java/com/frontleaves/bungeecross/BungeeCross.java index 4f559ad..efd0e9e 100644 --- a/src/main/java/com/frontleaves/bungeecross/BungeeCross.java +++ b/src/main/java/com/frontleaves/bungeecross/BungeeCross.java @@ -6,6 +6,7 @@ import com.frontleaves.bungeecross.commands.ReturnHubCommand; import com.frontleaves.bungeecross.commands.SendToServerCommand; import com.frontleaves.bungeecross.configuration.ServerEnable; import com.frontleaves.bungeecross.configuration.VariableStorage; +import com.frontleaves.bungeecross.events.PlayerCrossServerEvent; import com.frontleaves.bungeecross.events.PlayerJoinProxyEvent; import com.frontleaves.bungeecross.events.PlayerLeaveProxyEvent; import net.md_5.bungee.api.plugin.Plugin; @@ -32,6 +33,7 @@ public final class BungeeCross extends Plugin { // 注册监听器 getProxy().getPluginManager().registerListener(this, new PlayerJoinProxyEvent(this)); getProxy().getPluginManager().registerListener(this, new PlayerLeaveProxyEvent(this)); + getProxy().getPluginManager().registerListener(this, new PlayerCrossServerEvent(this)); } @Override diff --git a/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java b/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java index ca4a8f0..2575887 100644 --- a/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java +++ b/src/main/java/com/frontleaves/bungeecross/configuration/ServerEnable.java @@ -11,6 +11,8 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +import java.util.HashMap; +import java.util.Map; /** @@ -134,7 +136,6 @@ public class ServerEnable { } // 获取服务器列表 - plugin.getProxy().getServers().forEach((string, serverInfo) -> { if (config.getSection("server").getKeys().contains(string)) { if (config.getString("server." + string + ".display-name") == null && config.getString("server." + string + ".display-name").isEmpty()) { @@ -159,6 +160,7 @@ public class ServerEnable { } if (config.getString("server." + string + ".join-server-inform.leave-message") == null && config.getString("server." + string + ".join-server-inform.leave-message").isEmpty()) { this.reloadTheDefaultConfig(configFile); + return; } } else { config.set("server." + serverInfo.getName() + ".display-name", serverInfo.getName()); @@ -168,6 +170,19 @@ public class ServerEnable { config.set("server." + serverInfo.getName() + ".join-server-inform.join-message", "[+] %player% 加入到 %server_display% 服务器"); config.set("server." + serverInfo.getName() + ".join-server-inform.leave-message", "[-] %player% 加入到 %server_display% 服务器"); } + // 将获取的信息载入数组 + Map> serverAllMap = new HashMap<>(); + config.getSection("server").getKeys().forEach(server -> { + HashMap serverMap = new HashMap<>(); + serverMap.put("displayName", config.getString("server." + server + ".display-name")); + serverMap.put("bungeeJoinServerReminder", config.getBoolean("server." + server + ".bungee-join-server-reminder")); + serverMap.put("joinEnable", config.getBoolean("server." + server + ".join-server-inform.join-enable")); + serverMap.put("leaveEnable", config.getBoolean("server." + server + ".join-server-inform.leave-enable")); + serverMap.put("joinMessage", config.getString("server." + server + ".join-server-inform.join-message")); + serverMap.put("leaveMessage", config.getString("server." + server + ".join-server-inform.leave-message")); + serverAllMap.put(server, serverMap); + }); + VariableStorage.setProxyServerConfiguration(serverAllMap); }); try { ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, configFile); diff --git a/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java b/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java index a69df03..4c6d146 100644 --- a/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java +++ b/src/main/java/com/frontleaves/bungeecross/configuration/VariableStorage.java @@ -2,6 +2,7 @@ package com.frontleaves.bungeecross.configuration; import net.md_5.bungee.api.config.ServerInfo; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,6 +20,7 @@ public class VariableStorage { private static String joinMessage; private static String leaveMessage; private static boolean bungeeSilent; + private static Map> proxyServerConfiguration = new HashMap<>(); public static String getPrefix() { return prefix; @@ -83,4 +85,12 @@ public class VariableStorage { public static void setBungeeSilent(boolean bungeeSilent) { VariableStorage.bungeeSilent = bungeeSilent; } + + public static void setProxyServerConfiguration(Map> proxyServerConfiguration) { + VariableStorage.proxyServerConfiguration = proxyServerConfiguration; + } + + public static Map> getProxyServerConfiguration() { + return proxyServerConfiguration; + } } diff --git a/src/main/java/com/frontleaves/bungeecross/events/PlayerCrossServerEvent.java b/src/main/java/com/frontleaves/bungeecross/events/PlayerCrossServerEvent.java new file mode 100644 index 0000000..87a6ca9 --- /dev/null +++ b/src/main/java/com/frontleaves/bungeecross/events/PlayerCrossServerEvent.java @@ -0,0 +1,56 @@ +package com.frontleaves.bungeecross.events; + +import com.frontleaves.bungeecross.BungeeCross; +import com.frontleaves.bungeecross.configuration.VariableStorage; +import net.md_5.bungee.api.event.ServerSwitchEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; +import java.util.regex.Pattern; + +/** + * 玩家切换子服事件 + * + * @author 筱锋xiao_lfeng + * @version v1.0-SNAPSHOT + * @since v1.0-SNAPSHOT + */ +public class PlayerCrossServerEvent implements Listener { + private final BungeeCross plugin; + + public PlayerCrossServerEvent(BungeeCross bc) { + plugin = bc; + } + + @EventHandler + public void onPlayerCrossServer(@NotNull ServerSwitchEvent event) { + // 登录服务器默认不通知 + Map> getServerConfiguration = VariableStorage.getProxyServerConfiguration(); + try { + Map getFromServerConfiguration = getServerConfiguration.get(event.getFrom().getName()); + Map getToServerConfiguration = getServerConfiguration.get(event.getPlayer().getServer().getInfo().getName()); + if ((boolean) getFromServerConfiguration.get("leaveEnable")) { + event.getFrom().getPlayers().forEach(proxiedPlayer -> { + String leaveServerMessage = String.valueOf(getFromServerConfiguration.get("leaveMessage")); + String message = Pattern.compile("%player%").matcher(leaveServerMessage).replaceAll(event.getPlayer().getName()); + message = Pattern.compile("%server_display%").matcher(message).replaceAll(event.getFrom().getName()); + proxiedPlayer.sendMessage(message); + }); + } + if ((boolean) getToServerConfiguration.get("joinEnable")) { + event.getPlayer().getServer().getInfo().getPlayers().forEach(proxiedPlayer -> { + String joinServerMessage = String.valueOf(getToServerConfiguration.get("joinMessage")); + String message = Pattern.compile("%player%").matcher(joinServerMessage).replaceAll(event.getPlayer().getName()); + message = Pattern.compile("%server_display%").matcher(message).replaceAll(event.getPlayer().getServer().getInfo().getName()); + proxiedPlayer.sendMessage(message); + }); + } + System.out.print(VariableStorage.getPrefix() + "玩家 " + event.getPlayer().getName() + " 从 " + event.getFrom().getName() +" 跳转到 " + event.getPlayer().getServer().getInfo().getName()); + } catch (NullPointerException ignore) { + System.out.print(VariableStorage.getPrefix() + "玩家 " + event.getPlayer().getName() + " 加入到服务器 " + event.getPlayer().getServer().getInfo().getName()); + + } + } +} diff --git a/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java b/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java index bb154b6..9e3e3df 100644 --- a/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java +++ b/src/main/java/com/frontleaves/bungeecross/events/PlayerJoinProxyEvent.java @@ -7,6 +7,8 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import org.jetbrains.annotations.NotNull; +import java.util.HashMap; +import java.util.Map; import java.util.regex.Pattern; /** @@ -29,9 +31,13 @@ public class PlayerJoinProxyEvent implements Listener { String loginServerMessage = VariableStorage.getJoinMessage(); if (VariableStorage.isBungeeCordReminder()) { if (!VariableStorage.isBungeeSilent()) { + Map> getServerConfiguration = VariableStorage.getProxyServerConfiguration(); plugin.getProxy().getPlayers().forEach(proxiedPlayer -> { - String message = Pattern.compile("%player%").matcher(loginServerMessage).replaceAll(event.getConnection().getName()); - proxiedPlayer.sendMessage(message); + Map server = getServerConfiguration.get(proxiedPlayer.getServer().getInfo().getName()); + if (((boolean) server.get("bungeeJoinServerReminder"))) { + String message = Pattern.compile("%player%").matcher(loginServerMessage).replaceAll(event.getConnection().getName()); + proxiedPlayer.sendMessage(message); + } }); } } diff --git a/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java b/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java index 2ac4fad..a6e9f19 100644 --- a/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java +++ b/src/main/java/com/frontleaves/bungeecross/events/PlayerLeaveProxyEvent.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import org.jetbrains.annotations.NotNull; +import java.util.Map; import java.util.regex.Pattern; /** @@ -29,9 +30,14 @@ public class PlayerLeaveProxyEvent implements Listener { String leaveServerMessage = VariableStorage.getLeaveMessage(); if (VariableStorage.isBungeeCordReminder()) { if (!VariableStorage.isBungeeSilent()) { + Map> getServerConfiguration = VariableStorage.getProxyServerConfiguration(); plugin.getProxy().getPlayers().forEach(proxiedPlayer -> { - String message = Pattern.compile("%player%").matcher(leaveServerMessage).replaceAll(event.getPlayer().getName()); - proxiedPlayer.sendMessage(message); + Map server = getServerConfiguration.get(proxiedPlayer.getServer().getInfo().getName()); + if (((boolean) server.get("bungeeJoinServerReminder"))) { + String message = Pattern.compile("%player%").matcher(leaveServerMessage).replaceAll(event.getPlayer().getName()); + proxiedPlayer.sendMessage(message); + } else { + } }); } }