feat: 自动添加接入 ball 的子服接入点配置

This commit is contained in:
2022-10-29 18:05:39 +08:00
parent 793b09741a
commit 71bd002088
3 changed files with 56 additions and 7 deletions

View File

@@ -1,7 +1,11 @@
package cn.hamster3.mc.plugin.core.bungee; 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.api.BallBungeeCordAPI;
import cn.hamster3.mc.plugin.core.bungee.listener.BallBungeeCordListener; 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.ProxyServer;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
@@ -34,6 +38,13 @@ public class HamsterBallPlugin extends Plugin {
Logger logger = getLogger(); Logger logger = getLogger();
ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE); ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE);
logger.info("已注册 BallBungeeCordListener."); 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 已启动."); logger.info("HamsterBall 已启动.");
} }

View File

@@ -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.api.BallAPI;
import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; 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.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.entity.BallServerType;
import cn.hamster3.mc.plugin.ball.common.event.operate.*; 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.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.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.bungee.util.BallBungeeCordUtils;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.constant.CoreConstantObjects; 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.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.BaseComponent; 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.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.*; import net.md_5.bungee.api.event.*;
import net.md_5.bungee.api.plugin.Listener; 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 net.md_5.bungee.event.EventPriority;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
public final class BallBungeeCordListener extends BallListener implements Listener { public final class BallBungeeCordListener extends BallListener implements Listener {
@@ -30,11 +36,6 @@ public final class BallBungeeCordListener extends BallListener implements Listen
private BallBungeeCordListener() { private BallBungeeCordListener() {
} }
@Override
public void onReconnectFailed() {
ProxyServer.getInstance().stop();
}
@Override @Override
public void onMessageReceived(@NotNull BallMessageInfo info) { public void onMessageReceived(@NotNull BallMessageInfo info) {
switch (info.getAction()) { switch (info.getAction()) {
@@ -85,8 +86,8 @@ public final class BallBungeeCordListener extends BallListener implements Listen
} }
case SendMessageToPlayerEvent.ACTION: { case SendMessageToPlayerEvent.ACTION: {
SendMessageToPlayerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), SendMessageToPlayerEvent.class); SendMessageToPlayerEvent event = CoreConstantObjects.GSON.fromJson(info.getContent(), SendMessageToPlayerEvent.class);
for (UUID uuid : event.getReceiver()) { for (UUID receiver : event.getReceivers()) {
Audience audience = CoreAPI.getInstance().getAudienceProvider().player(uuid); Audience audience = CoreAPI.getInstance().getAudienceProvider().player(receiver);
event.getMessage().show(audience); event.getMessage().show(audience);
} }
break; 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<String, ServerInfo> map = ProxyServer.getInstance().getServers();
if (map.remove(event.getServerID()) != null) {
HamsterBallPlugin.getInstance().getLogger().info("已移除子服 " + event.getServerID() + " 的接入点配置.");
}
}
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPreLogin(PreLoginEvent event) { public void onPreLogin(PreLoginEvent event) {
BallAPI.getInstance().sendBallMessage( BallAPI.getInstance().sendBallMessage(

View File

@@ -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.api.BallAPI;
import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; 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.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server; import net.md_5.bungee.api.connection.Server;
import java.net.InetSocketAddress;
public final class BallBungeeCordUtils { public final class BallBungeeCordUtils {
private BallBungeeCordUtils() { private BallBungeeCordUtils() {
} }
@@ -19,4 +24,13 @@ public final class BallBungeeCordUtils {
online online
); );
} }
public static ServerInfo getServerInfo(BallServerInfo serverInfo) {
return ProxyServer.getInstance().constructServerInfo(
serverInfo.getId(),
new InetSocketAddress(serverInfo.getHost(), serverInfo.getPort()),
serverInfo.getName(),
false
);
}
} }