From 5f9609614b61abb8d6a806428fa220f90e0ae60c Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Wed, 10 May 2023 18:48:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(hamster-auto-server-info):=20=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hamster-auto-server-info/build.gradle | 9 +++++ .../auto/server/info/ServerInfoPlugin.java | 37 ++++++++++++++++++ .../info/listener/ServerInfoListener.java | 39 +++++++++++++++++++ .../server/info/util/ServerInfoUtils.java | 19 +++++++++ 4 files changed, 104 insertions(+) create mode 100644 hamster-auto-server-info/build.gradle create mode 100644 hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/ServerInfoPlugin.java create mode 100644 hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/listener/ServerInfoListener.java create mode 100644 hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/util/ServerInfoUtils.java diff --git a/hamster-auto-server-info/build.gradle b/hamster-auto-server-info/build.gradle new file mode 100644 index 0000000..cd42d02 --- /dev/null +++ b/hamster-auto-server-info/build.gradle @@ -0,0 +1,9 @@ +version = '1.0.0' +setArchivesBaseName("HamsterAuto-ServerInfo") + +dependencies { + //noinspection VulnerableLibrariesLocal + compileOnly "net.md-5:bungeecord-api:${bungee_api_version}" + + compileOnly "cn.hamster3.mc.plugin.ball:common:${hamster_ball_version}" +} diff --git a/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/ServerInfoPlugin.java b/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/ServerInfoPlugin.java new file mode 100644 index 0000000..08960e9 --- /dev/null +++ b/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/ServerInfoPlugin.java @@ -0,0 +1,37 @@ +package cn.hamster3.mc.plugin.auto.server.info; + +import cn.hamster3.mc.plugin.auto.server.info.listener.ServerInfoListener; +import cn.hamster3.mc.plugin.auto.server.info.util.ServerInfoUtils; +import cn.hamster3.mc.plugin.ball.common.api.BallAPI; +import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; +import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; +import cn.hamster3.mc.plugin.ball.common.listener.BallListener; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.plugin.Plugin; + +public class ServerInfoPlugin extends Plugin implements BallListener { + private static ServerInfoPlugin instance; + + public static ServerInfoPlugin getInstance() { + return instance; + } + + + @Override + public void onLoad() { + instance = this; + } + + @Override + public void onEnable() { + ProxyServer.getInstance().getServers().clear(); + for (BallServerInfo serverInfo : BallAPI.getInstance().getAllServerInfo().values()) { + if (serverInfo.getType() != BallServerType.GAME) { + continue; + } + ProxyServer.getInstance().getServers().put(serverInfo.getId(), ServerInfoUtils.getServerInfo(serverInfo)); + getLogger().info("已添加子服 " + serverInfo.getId() + " 的接入点配置."); + } + BallAPI.getInstance().addListener(ServerInfoListener.INSTANCE); + } +} diff --git a/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/listener/ServerInfoListener.java b/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/listener/ServerInfoListener.java new file mode 100644 index 0000000..98df8ef --- /dev/null +++ b/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/listener/ServerInfoListener.java @@ -0,0 +1,39 @@ +package cn.hamster3.mc.plugin.auto.server.info.listener; + +import cn.hamster3.mc.plugin.auto.server.info.ServerInfoPlugin; +import cn.hamster3.mc.plugin.auto.server.info.util.ServerInfoUtils; +import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; +import cn.hamster3.mc.plugin.ball.common.entity.BallServerType; +import cn.hamster3.mc.plugin.ball.common.event.server.ServerOfflineEvent; +import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent; +import cn.hamster3.mc.plugin.ball.common.listener.BallListener; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; + +public class ServerInfoListener implements BallListener { + public static final ServerInfoListener INSTANCE = new ServerInfoListener(); + + private ServerInfoListener() { + } + + @Override + public void onServerOnline(@NotNull ServerOnlineEvent event) { + BallServerInfo serverInfo = event.getServerInfo(); + if (serverInfo.getType() != BallServerType.GAME) { + return; + } + ProxyServer.getInstance().getServers().put(serverInfo.getId(), ServerInfoUtils.getServerInfo(serverInfo)); + ServerInfoPlugin.getInstance().getLogger().info("已添加子服 " + serverInfo.getId() + " 的接入点配置."); + } + + @Override + public void onServerOffline(@NotNull ServerOfflineEvent event) { + Map map = ProxyServer.getInstance().getServers(); + if (map.remove(event.getServerID()) != null) { + ServerInfoPlugin.getInstance().getLogger().info("已移除子服 " + event.getServerID() + " 的接入点配置."); + } + } +} diff --git a/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/util/ServerInfoUtils.java b/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/util/ServerInfoUtils.java new file mode 100644 index 0000000..32ed74e --- /dev/null +++ b/hamster-auto-server-info/src/main/java/cn/hamster3/mc/plugin/auto/server/info/util/ServerInfoUtils.java @@ -0,0 +1,19 @@ +package cn.hamster3.mc.plugin.auto.server.info.util; + +import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; + +import java.net.InetSocketAddress; + +public final class ServerInfoUtils { + + public static ServerInfo getServerInfo(BallServerInfo serverInfo) { + return ProxyServer.getInstance().constructServerInfo( + serverInfo.getId(), + new InetSocketAddress(serverInfo.getHost(), serverInfo.getPort()), + serverInfo.getName(), + false + ); + } +}