diff --git a/msb-example-server/msb-example-server.yml b/msb-example-server/msb-example-server.yml index 5350a35..2874a2b 100644 --- a/msb-example-server/msb-example-server.yml +++ b/msb-example-server/msb-example-server.yml @@ -63,18 +63,3 @@ spec: value: ws://kubik-discovery:8080 - name: KUBIK_GROUP_ID value: lobby ---- -apiVersion: v1 -kind: Service - -metadata: - name: lobby - -spec: - type: NodePort - selector: - app: lobby - ports: - - port: 25565 - targetPort: 25565 - protocol: TCP \ No newline at end of file diff --git a/velocity-plugin/src/main/java/ru/dragonestia/kubik/plugin/KubikPlugin.java b/velocity-plugin/src/main/java/ru/dragonestia/kubik/plugin/KubikPlugin.java index 6b39cd8..0efb5e9 100644 --- a/velocity-plugin/src/main/java/ru/dragonestia/kubik/plugin/KubikPlugin.java +++ b/velocity-plugin/src/main/java/ru/dragonestia/kubik/plugin/KubikPlugin.java @@ -3,6 +3,7 @@ package ru.dragonestia.kubik.plugin; import com.google.gson.Gson; import com.google.inject.Inject; import com.velocitypowered.api.event.connection.PluginMessageEvent; +import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.proxy.ProxyShutdownEvent; @@ -46,6 +47,9 @@ public class KubikPlugin implements ProxyServerRegistry { private final Map> pluginChannelHandlers = new ConcurrentHashMap<>(); private final Map registeredServers = new ConcurrentHashMap<>(); + private Kubik kubik; + private String initialServerGroupId; + @Inject public KubikPlugin(ProxyServer proxyServer, Logger logger) { this.proxyServer = proxyServer; @@ -56,8 +60,10 @@ public class KubikPlugin implements ProxyServerRegistry { logger.info("Using kubik urls: {}, {}", kubikHttpUrl, kubikWsUrl); - var kubik = new Kubik(kubikHttpUrl, kubikWsUrl); + kubik = new Kubik(kubikHttpUrl, kubikWsUrl); proxyControl = kubik.initProxy(this); + + initialServerGroupId = EnvUtil.getString("KUBIK_INITIAL_SERVER_GROUP_ID", "lobby"); } @Subscribe @@ -86,6 +92,33 @@ public class KubikPlugin implements ProxyServerRegistry { proxyControl.dispose(); } + @Subscribe + public void onChooseInitialServer(PlayerChooseInitialServerEvent event) { + var player = event.getPlayer(); + + if (initialServerGroupId == null) { + logger.error("Initial server group id is null"); + player.disconnect(Component.text("Неправильно сконфигурировано лобби сервера")); + return; + } + + var serverId = kubik.pickServer(initialServerGroupId); + if (serverId == null) { + logger.error("Could not find server with groupId '{}'", initialServerGroupId); + player.disconnect(Component.text("Нет доступных серверов для лобби")); + return; + } + + var server = registeredServers.get(serverId); + if (server == null) { + logger.error("Server '{}' is not registered for groupId '{}'", serverId, initialServerGroupId); + player.disconnect(Component.text("Не зарегистрирован сервер для лобби")); + return; + } + + event.setInitialServer(server); + } + @Subscribe public void onTakenPluginMessage(PluginMessageEvent event) { var handler = pluginChannelHandlers.get(event.getIdentifier().getId()); diff --git a/velocity/kubik-proxy.yml b/velocity/kubik-proxy.yml index c736cb7..0f03250 100644 --- a/velocity/kubik-proxy.yml +++ b/velocity/kubik-proxy.yml @@ -29,6 +29,8 @@ spec: value: http://kubik-discovery:8080 - name: KUBIK_DISCOVERY_WS_URL value: ws://kubik-discovery:8080 + - name: KUBIK_INITIAL_SERVER_GROUP_ID + value: lobby --- apiVersion: v1 kind: Service diff --git a/velocity/velocity.toml b/velocity/velocity.toml index 4b2eeec..f9aa772 100644 --- a/velocity/velocity.toml +++ b/velocity/velocity.toml @@ -77,20 +77,15 @@ enable-player-address-logging = true [servers] # Configure your servers here. Each key represents the server's name, and the value # represents the IP address of the server to connect to. -lobby = "lobby:25565" - +#lobby = "lobby:25565" # In what order we should try servers when a player logs in or is kicked from a server. try = [ - "lobby" +# "lobby" ] [forced-hosts] # Configure your forced hosts here. -"lobby.example.com" = [ - "lobby" -] - [advanced] # How large a Minecraft packet has to be before we compress it. Setting this to zero will