diff --git a/src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java b/src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java index 8ae623a..6bd182d 100644 --- a/src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java +++ b/src/main/java/net/krakatoa/proxy/listener/SocketClientMessageListener.java @@ -1,7 +1,9 @@ package net.krakatoa.proxy.listener; import de.dytanic.cloudnet.driver.CloudNetDriver; +import de.dytanic.cloudnet.driver.service.ServiceConfiguration; import de.dytanic.cloudnet.driver.service.ServiceInfoSnapshot; +import de.dytanic.cloudnet.driver.service.ServiceTask; import de.dytanic.cloudnet.ext.bridge.BridgeServiceProperty; import de.dytanic.cloudnet.ext.bridge.player.ICloudPlayer; import de.dytanic.cloudnet.ext.bridge.player.IPlayerManager; @@ -66,31 +68,61 @@ public class SocketClientMessageListener implements KraSocketClientEventInterfac case 33329: { // stop server - server auto restart String serverName = kraProtocolMessage.getArgs().toLowerCase(); - ServiceInfoSnapshot serviceInfoSnapshot = CloudNetDriver.getInstance() - .getCloudServiceProvider() - .getCloudServiceByName(serverName); + if (serverName.equals("lobby")) { // start new lobby + if (CloudNetDriver.getInstance().getServiceTaskProvider().isServiceTaskPresent("Lobby")) { + ServiceTask serviceTask = CloudNetDriver.getInstance().getServiceTaskProvider() + .getServiceTask("Lobby"); - if (serviceInfoSnapshot != null) { - serviceInfoSnapshot.getProperty(BridgeServiceProperty.PLAYERS).ifPresent(players -> { - players.forEach(player -> { - ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy() - .getPlayer(player.getUniqueId()); - proxiedPlayer.sendMessage( - new TextComponent("§4AutoRestart §8» §cRestarting server...")); + if (serviceTask != null) { + ServiceInfoSnapshot serviceInfoSnapshot = ServiceConfiguration.builder(serviceTask) + .build().createNewService(); + + if (serviceInfoSnapshot != null) { + serviceInfoSnapshot.provider().start(); + } + } + } + } else { // game server + ServiceInfoSnapshot serviceInfoSnapshot = CloudNetDriver.getInstance() + .getCloudServiceProvider() + .getCloudServiceByName(serverName); + + if (serviceInfoSnapshot != null) { + serviceInfoSnapshot.getProperty(BridgeServiceProperty.PLAYERS).ifPresent(players -> { + players.forEach(player -> { + ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy() + .getPlayer(player.getUniqueId()); + proxiedPlayer.sendMessage( + new TextComponent("§4AutoRestart §8» §cRestarting server...")); + }); + + playersAutoRestartServerSystem.put(serverName, players); }); - playersAutoRestartServerSystem.put(serverName, players); - }); + // stop target server + CloudNetDriver.getInstance().getCloudServiceProvider(serviceInfoSnapshot).stop(); + } + - // stop target server - CloudNetDriver.getInstance().getCloudServiceProvider(serviceInfoSnapshot).stop(); } break; } case 59739: { // send players back to server - auto restart system String serverName = kraProtocolMessage.getArgs().toLowerCase(); - if (playersAutoRestartServerSystem.containsKey(serverName)) { + if (serverName.equals("lobby")) { // close old lobbies + Collection serviceInfoSnapshots = CloudNetDriver.getInstance() + .getCloudServiceProvider() + .getCloudServices("Lobby"); + + if (serviceInfoSnapshots != null) { + serviceInfoSnapshots.forEach(serviceInfoSnapshot -> { + if (!serverName.equals(serviceInfoSnapshot.getName())) { + serviceInfoSnapshot.provider().stop(); + } + }); + } + } else if (playersAutoRestartServerSystem.containsKey(serverName)) { // send players back playersAutoRestartServerSystem.get(serverName).forEach(servicePlayer -> { ICloudPlayer cloudPlayer = playerManager.getOnlinePlayer(servicePlayer.getUniqueId());