添加跨服提醒,子服务器用户提醒

This commit is contained in:
筱锋xiao_lfeng 2023-10-20 00:02:17 +08:00
parent 9e548cb850
commit dff6e63dc8
6 changed files with 100 additions and 5 deletions

View File

@ -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

View File

@ -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<String, Map<String, Object>> serverAllMap = new HashMap<>();
config.getSection("server").getKeys().forEach(server -> {
HashMap<String, Object> 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);

View File

@ -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<String, Map<String, Object>> 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<String, Map<String, Object>> proxyServerConfiguration) {
VariableStorage.proxyServerConfiguration = proxyServerConfiguration;
}
public static Map<String, Map<String, Object>> getProxyServerConfiguration() {
return proxyServerConfiguration;
}
}

View File

@ -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<String, Map<String, Object>> getServerConfiguration = VariableStorage.getProxyServerConfiguration();
try {
Map<String, Object> getFromServerConfiguration = getServerConfiguration.get(event.getFrom().getName());
Map<String, Object> 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());
}
}
}

View File

@ -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<String, Map<String, Object>> getServerConfiguration = VariableStorage.getProxyServerConfiguration();
plugin.getProxy().getPlayers().forEach(proxiedPlayer -> {
String message = Pattern.compile("%player%").matcher(loginServerMessage).replaceAll(event.getConnection().getName());
proxiedPlayer.sendMessage(message);
Map<String, Object> 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);
}
});
}
}

View File

@ -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<String, Map<String, Object>> getServerConfiguration = VariableStorage.getProxyServerConfiguration();
plugin.getProxy().getPlayers().forEach(proxiedPlayer -> {
String message = Pattern.compile("%player%").matcher(leaveServerMessage).replaceAll(event.getPlayer().getName());
proxiedPlayer.sendMessage(message);
Map<String, Object> 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 {
}
});
}
}