From 71bd0020880698cc8fe41446a4417628495cbcd7 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Sat, 29 Oct 2022 18:05:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=8A=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=20ball=20=E7=9A=84=E5=AD=90=E6=9C=8D?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=82=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/core/bungee/HamsterBallPlugin.java | 11 ++++++ .../listener/BallBungeeCordListener.java | 38 +++++++++++++++---- .../core/bungee/util/BallBungeeCordUtils.java | 14 +++++++ 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java index 2228976..62c7697 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterBallPlugin.java @@ -1,7 +1,11 @@ package cn.hamster3.mc.plugin.core.bungee; +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.core.bungee.api.BallBungeeCordAPI; import cn.hamster3.mc.plugin.core.bungee.listener.BallBungeeCordListener; +import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.plugin.Plugin; @@ -34,6 +38,13 @@ public class HamsterBallPlugin extends Plugin { Logger logger = getLogger(); ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE); logger.info("已注册 BallBungeeCordListener."); + for (BallServerInfo serverInfo : BallAPI.getInstance().getAllServerInfo().values()) { + if (serverInfo.getType() != BallServerType.GAME) { + continue; + } + ProxyServer.getInstance().getServers().put(serverInfo.getId(), BallBungeeCordUtils.getServerInfo(serverInfo)); + HamsterBallPlugin.getInstance().getLogger().info("已添加子服 " + serverInfo.getId() + " 的接入点配置."); + } logger.info("HamsterBall 已启动."); } diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java index 1d2cf10..c5fe400 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/listener/BallBungeeCordListener.java @@ -3,10 +3,14 @@ package cn.hamster3.mc.plugin.core.bungee.listener; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; +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.operate.*; import cn.hamster3.mc.plugin.ball.common.event.player.*; +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 cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin; import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.constant.CoreConstantObjects; @@ -15,6 +19,7 @@ import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.*; import net.md_5.bungee.api.plugin.Listener; @@ -22,6 +27,7 @@ import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; import org.jetbrains.annotations.NotNull; +import java.util.Map; import java.util.UUID; public final class BallBungeeCordListener extends BallListener implements Listener { @@ -30,11 +36,6 @@ public final class BallBungeeCordListener extends BallListener implements Listen private BallBungeeCordListener() { } - @Override - public void onReconnectFailed() { - ProxyServer.getInstance().stop(); - } - @Override public void onMessageReceived(@NotNull BallMessageInfo info) { switch (info.getAction()) { @@ -85,8 +86,8 @@ public final class BallBungeeCordListener extends BallListener implements Listen } case SendMessageToPlayerEvent.ACTION: { SendMessageToPlayerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), SendMessageToPlayerEvent.class); - for (UUID uuid : event.getReceiver()) { - Audience audience = CoreAPI.getInstance().getAudienceProvider().player(uuid); + for (UUID receiver : event.getReceivers()) { + Audience audience = CoreAPI.getInstance().getAudienceProvider().player(receiver); event.getMessage().show(audience); } break; @@ -94,6 +95,29 @@ public final class BallBungeeCordListener extends BallListener implements Listen } } + @Override + public void onReconnectFailed() { + ProxyServer.getInstance().stop("HamsterBall 重连失败."); + } + + @Override + public void onServerOnline(@NotNull ServerOnlineEvent event) { + BallServerInfo serverInfo = event.getServerInfo(); + if (serverInfo.getType() != BallServerType.GAME) { + return; + } + ProxyServer.getInstance().getServers().put(serverInfo.getId(), BallBungeeCordUtils.getServerInfo(serverInfo)); + HamsterBallPlugin.getInstance().getLogger().info("已添加子服 " + serverInfo.getId() + " 的接入点配置."); + } + + @Override + public void onServerOffline(@NotNull ServerOfflineEvent event) { + Map map = ProxyServer.getInstance().getServers(); + if (map.remove(event.getServerID()) != null) { + HamsterBallPlugin.getInstance().getLogger().info("已移除子服 " + event.getServerID() + " 的接入点配置."); + } + } + @EventHandler(priority = EventPriority.HIGH) public void onPreLogin(PreLoginEvent event) { BallAPI.getInstance().sendBallMessage( diff --git a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java index 46f3d1e..6e5abe2 100644 --- a/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java +++ b/hamster-ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BallBungeeCordUtils.java @@ -2,9 +2,14 @@ package cn.hamster3.mc.plugin.core.bungee.util; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; +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 net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.Server; +import java.net.InetSocketAddress; + public final class BallBungeeCordUtils { private BallBungeeCordUtils() { } @@ -19,4 +24,13 @@ public final class BallBungeeCordUtils { online ); } + + public static ServerInfo getServerInfo(BallServerInfo serverInfo) { + return ProxyServer.getInstance().constructServerInfo( + serverInfo.getId(), + new InetSocketAddress(serverInfo.getHost(), serverInfo.getPort()), + serverInfo.getName(), + false + ); + } }