Skip to content

Commit ea71518

Browse files
authored
Hotfix Update 3.2.1
Default Setup, ServiceInfoSnapshot-OnlineCount and SmartModule AutoStop Hotfix
2 parents a6f6391 + c52684e commit ea71518

File tree

14 files changed

+75
-24
lines changed

14 files changed

+75
-24
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defaultTasks 'clean', 'build', 'test', 'jar'
22

33
allprojects {
44

5-
def major = 3, minor = 2, patch = 0, versionType = "RELEASE"
5+
def major = 3, minor = 2, patch = 1, versionType = "RELEASE"
66

77
group 'de.dytanic.cloudnet'
88
version "$major.$minor.$patch-$versionType"

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/bukkit/BukkitCloudNetBridgePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public synchronized void onDisable() {
3535

3636
private void initListeners() {
3737
//BukkitAPI
38-
Bukkit.getServer().getPluginManager().registerEvents(new BukkitPlayerListener(), this);
38+
Bukkit.getServer().getPluginManager().registerEvents(new BukkitPlayerListener(this), this);
3939

4040
//CloudNet
4141
CloudNetDriver.getInstance().getEventManager().registerListener(new BukkitCloudNetListener());

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/bukkit/listener/BukkitPlayerListener.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import de.dytanic.cloudnet.ext.bridge.BridgeConfiguration;
66
import de.dytanic.cloudnet.ext.bridge.BridgeConfigurationProvider;
77
import de.dytanic.cloudnet.ext.bridge.BridgeHelper;
8+
import de.dytanic.cloudnet.ext.bridge.bukkit.BukkitCloudNetBridgePlugin;
89
import de.dytanic.cloudnet.ext.bridge.bukkit.BukkitCloudNetHelper;
910
import de.dytanic.cloudnet.wrapper.Wrapper;
1011
import org.bukkit.Bukkit;
@@ -19,11 +20,14 @@
1920

2021
public final class BukkitPlayerListener implements Listener {
2122

23+
private final BukkitCloudNetBridgePlugin plugin;
24+
2225
private final BridgeConfiguration bridgeConfiguration;
2326

2427
private final boolean onlyProxyProtection;
2528

26-
public BukkitPlayerListener() {
29+
public BukkitPlayerListener(BukkitCloudNetBridgePlugin plugin) {
30+
this.plugin = plugin;
2731
this.bridgeConfiguration = BridgeConfigurationProvider.load();
2832
this.onlyProxyProtection = !Bukkit.getOnlineMode()
2933
&& this.bridgeConfiguration != null
@@ -71,7 +75,7 @@ public void handle(PlayerQuitEvent event) {
7175
BridgeHelper.sendChannelMessageServerDisconnect(BukkitCloudNetHelper.createNetworkConnectionInfo(event.getPlayer()),
7276
BukkitCloudNetHelper.createNetworkPlayerServerInfo(event.getPlayer(), false));
7377

74-
BridgeHelper.updateServiceInfo();
78+
Bukkit.getScheduler().runTask(this.plugin, BridgeHelper::updateServiceInfo);
7579
}
7680

7781
}

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/bungee/BungeeCloudNetBridgePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private void registerCommands() {
6565

6666
private void initListeners() {
6767
//BungeeCord API
68-
ProxyServer.getInstance().getPluginManager().registerListener(this, new BungeePlayerListener());
68+
ProxyServer.getInstance().getPluginManager().registerListener(this, new BungeePlayerListener(this));
6969

7070
//CloudNet
7171
CloudNetDriver.getInstance().getEventManager().registerListener(new BungeeCloudNetListener());

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/bungee/listener/BungeePlayerListener.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import de.dytanic.cloudnet.driver.service.ServiceInfoSnapshot;
44
import de.dytanic.cloudnet.ext.bridge.BridgeHelper;
5+
import de.dytanic.cloudnet.ext.bridge.bungee.BungeeCloudNetBridgePlugin;
56
import de.dytanic.cloudnet.ext.bridge.bungee.BungeeCloudNetHelper;
67
import de.dytanic.cloudnet.ext.bridge.player.NetworkServiceInfo;
78
import net.md_5.bungee.api.ProxyServer;
@@ -11,8 +12,16 @@
1112
import net.md_5.bungee.api.plugin.Listener;
1213
import net.md_5.bungee.event.EventHandler;
1314

15+
import java.util.concurrent.TimeUnit;
16+
1417
public final class BungeePlayerListener implements Listener {
1518

19+
private BungeeCloudNetBridgePlugin plugin;
20+
21+
public BungeePlayerListener(BungeeCloudNetBridgePlugin plugin) {
22+
this.plugin = plugin;
23+
}
24+
1625
@EventHandler
1726
public void handle(LoginEvent event) {
1827
BridgeHelper.sendChannelMessageProxyLoginRequest(BungeeCloudNetHelper.createNetworkConnectionInfo(event.getConnection()));
@@ -77,6 +86,6 @@ public void handle(ServerKickEvent event) {
7786
public void handle(PlayerDisconnectEvent event) {
7887
BridgeHelper.sendChannelMessageProxyDisconnect(BungeeCloudNetHelper.createNetworkConnectionInfo(event.getPlayer().getPendingConnection()));
7988

80-
BridgeHelper.updateServiceInfo();
89+
ProxyServer.getInstance().getScheduler().schedule(this.plugin, BridgeHelper::updateServiceInfo, 50, TimeUnit.MILLISECONDS);
8190
}
8291
}

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/nukkit/listener/NukkitPlayerListener.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import cn.nukkit.event.player.PlayerJoinEvent;
99
import cn.nukkit.event.player.PlayerLoginEvent;
1010
import cn.nukkit.event.player.PlayerQuitEvent;
11+
import cn.nukkit.scheduler.Task;
1112
import de.dytanic.cloudnet.common.collection.Iterables;
1213
import de.dytanic.cloudnet.driver.service.ServiceTask;
1314
import de.dytanic.cloudnet.ext.bridge.BridgeConfiguration;
@@ -70,7 +71,12 @@ public void handle(PlayerQuitEvent event) {
7071
BridgeHelper.sendChannelMessageServerDisconnect(NukkitCloudNetHelper.createNetworkConnectionInfo(event.getPlayer()),
7172
NukkitCloudNetHelper.createNetworkPlayerServerInfo(event.getPlayer(), false));
7273

73-
BridgeHelper.updateServiceInfo();
74+
event.getPlayer().getServer().getScheduler().scheduleDelayedTask(new Task() {
75+
@Override
76+
public void onRun(int currentTick) {
77+
BridgeHelper.updateServiceInfo();
78+
}
79+
}, 1);
7480
}
7581

7682
}

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/sponge/SpongeCloudNetBridgePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public synchronized void handle(GameStoppingServerEvent event) {
3939

4040
private void initListeners() {
4141
//Sponge API
42-
Sponge.getEventManager().registerListeners(this, new SpongePlayerListener());
42+
Sponge.getEventManager().registerListeners(this, new SpongePlayerListener(this));
4343

4444
//CloudNet
4545
CloudNetDriver.getInstance().getEventManager().registerListener(new SpongeCloudNetListener());
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
11
package de.dytanic.cloudnet.ext.bridge.sponge.listener;
22

33
import de.dytanic.cloudnet.ext.bridge.BridgeHelper;
4+
import de.dytanic.cloudnet.ext.bridge.sponge.SpongeCloudNetBridgePlugin;
45
import de.dytanic.cloudnet.ext.bridge.sponge.SpongeCloudNetHelper;
6+
import org.spongepowered.api.Sponge;
57
import org.spongepowered.api.event.Listener;
68
import org.spongepowered.api.event.network.ClientConnectionEvent;
9+
import org.spongepowered.api.scheduler.SpongeExecutorService;
710

811
public final class SpongePlayerListener {
912

13+
private SpongeExecutorService executorService;
14+
15+
public SpongePlayerListener(SpongeCloudNetBridgePlugin plugin) {
16+
this.executorService = Sponge.getGame().getScheduler().createSyncExecutor(plugin);
17+
}
18+
1019
@Listener
1120
public void handle(ClientConnectionEvent.Join event) {
1221
BridgeHelper.sendChannelMessageServerLoginSuccess(SpongeCloudNetHelper.createNetworkConnectionInfo(event.getTargetEntity()),
1322
SpongeCloudNetHelper.createNetworkPlayerServerInfo(event.getTargetEntity(), false)
1423
);
1524

16-
BridgeHelper.updateServiceInfo();
25+
this.executorService.execute(BridgeHelper::updateServiceInfo);
1726
}
1827

1928
@Listener
2029
public void handle(ClientConnectionEvent.Disconnect event) {
2130
BridgeHelper.sendChannelMessageServerDisconnect(SpongeCloudNetHelper.createNetworkConnectionInfo(event.getTargetEntity()),
2231
SpongeCloudNetHelper.createNetworkPlayerServerInfo(event.getTargetEntity(), false));
2332

24-
BridgeHelper.updateServiceInfo();
33+
this.executorService.execute(BridgeHelper::updateServiceInfo);
2534
}
2635
}

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/velocity/VelocityCloudNetBridgePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void handleShutdown(ProxyShutdownEvent event) {
5353

5454
private void initListeners() {
5555
//Velocity API
56-
this.proxyServer.getEventManager().register(this, new VelocityPlayerListener());
56+
this.proxyServer.getEventManager().register(this, new VelocityPlayerListener(this));
5757

5858
//CloudNet
5959
CloudNetDriver.getInstance().getEventManager().registerListener(new VelocityCloudNetListener());

cloudnet-modules/cloudnet-bridge/src/main/java/de/dytanic/cloudnet/ext/bridge/velocity/listener/VelocityPlayerListener.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,20 @@
1010
import de.dytanic.cloudnet.driver.service.ServiceInfoSnapshot;
1111
import de.dytanic.cloudnet.ext.bridge.BridgeHelper;
1212
import de.dytanic.cloudnet.ext.bridge.player.NetworkServiceInfo;
13+
import de.dytanic.cloudnet.ext.bridge.velocity.VelocityCloudNetBridgePlugin;
1314
import de.dytanic.cloudnet.ext.bridge.velocity.VelocityCloudNetHelper;
1415
import net.kyori.text.TextComponent;
1516

17+
import java.util.concurrent.TimeUnit;
18+
1619
public final class VelocityPlayerListener {
1720

21+
private VelocityCloudNetBridgePlugin plugin;
22+
23+
public VelocityPlayerListener(VelocityCloudNetBridgePlugin plugin) {
24+
this.plugin = plugin;
25+
}
26+
1827
@Subscribe
1928
public void handle(LoginEvent event) {
2029
BridgeHelper.sendChannelMessageProxyLoginRequest(VelocityCloudNetHelper.createNetworkConnectionInfo(event.getPlayer()));
@@ -24,7 +33,8 @@ public void handle(LoginEvent event) {
2433
public void handle(PostLoginEvent event) {
2534
BridgeHelper.sendChannelMessageProxyLoginSuccess(VelocityCloudNetHelper.createNetworkConnectionInfo(event.getPlayer()));
2635

27-
VelocityCloudNetHelper.updateServiceInfo();
36+
VelocityCloudNetHelper.getProxyServer().getScheduler().buildTask(this.plugin, VelocityCloudNetHelper::updateServiceInfo)
37+
.delay(50, TimeUnit.MILLISECONDS).schedule();
2838
}
2939

3040
@Subscribe
@@ -82,6 +92,7 @@ public void handle(KickedFromServerEvent event) {
8292
public void handle(DisconnectEvent event) {
8393
BridgeHelper.sendChannelMessageProxyDisconnect(VelocityCloudNetHelper.createNetworkConnectionInfo(event.getPlayer()));
8494

85-
VelocityCloudNetHelper.updateServiceInfo();
95+
VelocityCloudNetHelper.getProxyServer().getScheduler().buildTask(this.plugin, VelocityCloudNetHelper::updateServiceInfo)
96+
.delay(50, TimeUnit.MILLISECONDS).schedule();
8697
}
8798
}

cloudnet-modules/cloudnet-smart/src/main/java/de/dytanic/cloudnet/ext/smart/listener/CloudNetTickListener.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.UUID;
2020
import java.util.concurrent.TimeUnit;
2121
import java.util.concurrent.atomic.AtomicInteger;
22+
import java.util.stream.Collectors;
2223

2324
public final class CloudNetTickListener {
2425

@@ -67,12 +68,16 @@ private void autoGeneratePreparedServices(SmartServiceTaskConfig task, ServiceTa
6768
}
6869

6970
private void handleAutoStop() {
70-
Collection<ServiceInfoSnapshot> serviceInfoSnapshots = Iterables.filter(CloudNetDriver.getInstance().getCloudServiceProvider().getCloudServices(), cloudService -> CloudNetSmartModule.getInstance().getProvidedSmartServices().containsKey(cloudService.getServiceId().getUniqueId()) &&
71-
cloudService.getLifeCycle() == ServiceLifeCycle.RUNNING &&
72-
cloudService.getProperties().contains("Online-Count") &&
73-
cloudService.getProperties().contains("Max-Players"));
74-
75-
for (ServiceInfoSnapshot serviceInfoSnapshot : serviceInfoSnapshots) {
71+
Collection<ServiceInfoSnapshot> runningServiceInfoSnapshots = CloudNetDriver.getInstance().getCloudServiceProvider().getCloudServices()
72+
.stream()
73+
.filter(serviceInfoSnapshot -> serviceInfoSnapshot.getLifeCycle() == ServiceLifeCycle.RUNNING)
74+
.collect(Collectors.toList());
75+
Collection<ServiceInfoSnapshot> onlineServiceInfoSnapshots = runningServiceInfoSnapshots.stream()
76+
.filter(serviceInfoSnapshot -> serviceInfoSnapshot.getProperties().contains("Online-Count"))
77+
.filter(serviceInfoSnapshot -> serviceInfoSnapshot.getProperties().contains("Max-Players"))
78+
.collect(Collectors.toList());
79+
80+
for (ServiceInfoSnapshot serviceInfoSnapshot : onlineServiceInfoSnapshots) {
7681
SmartServiceTaskConfig smartTask = CloudNetSmartModule.getInstance().getSmartServiceTaskConfig(serviceInfoSnapshot);
7782
if (smartTask == null) {
7883
continue;
@@ -88,9 +93,9 @@ private void handleAutoStop() {
8893
serviceInfoSnapshot.getProperties().getInt("Max-Players")
8994
) <= smartTask.getPercentOfPlayersToCheckShouldAutoStopTheServiceInFuture()) {
9095

91-
int onlineServices = CloudNet.getInstance().getCloudServiceProvider().getServicesCountByTask(serviceInfoSnapshot.getServiceId().getTaskName());
96+
int runningServices = (int) runningServiceInfoSnapshots.stream().filter(runningServiceInfoSnapshot -> runningServiceInfoSnapshot.getServiceId().getTaskName().equals(serviceInfoSnapshot.getServiceId().getTaskName())).count();
9297
ServiceTask serviceTask = CloudNet.getInstance().getServiceTaskProvider().getServiceTask(serviceInfoSnapshot.getServiceId().getTaskName());
93-
if (onlineServices <= serviceTask.getMinServiceCount()) {
98+
if (runningServices <= serviceTask.getMinServiceCount()) {
9499
continue;
95100
}
96101

cloudnet/src/main/java/de/dytanic/cloudnet/DefaultInstallation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public List<String> getCompletableAnswers() {
198198
if (animation.hasResult("internalHost")) {
199199
HostAndPort defaultHost = (HostAndPort) animation.getResult("internalHost");
200200

201-
this.cloudNet.getConfig().setDefaultHostAddress(defaultHost.getHost());
201+
this.cloudNet.getConfig().setHostAddress(defaultHost.getHost());
202202
this.cloudNet.getConfig().setIdentity(new NetworkClusterNode(
203203
animation.hasResult("nodeId") ? (String) animation.getResult("nodeId") : "Node-" + UUID.randomUUID().toString().split("-")[0],
204204
new HostAndPort[]{defaultHost}

cloudnet/src/main/java/de/dytanic/cloudnet/conf/IConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public interface IConfiguration {
1818

1919
String getHostAddress();
2020

21+
void setHostAddress(String hostAddress);
22+
2123
NetworkClusterNode getIdentity();
2224

2325
void setIdentity(NetworkClusterNode identity);

cloudnet/src/main/java/de/dytanic/cloudnet/conf/JsonConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public final class JsonConfiguration implements IConfiguration {
2626
}.getType(),
2727
CLUSTER = new TypeToken<NetworkCluster>() {
2828
}.getType(),
29-
COLLECTION_STRING = new TypeToken<Collection<String>>() {
29+
SET_STRING = new TypeToken<Set<String>>() {
3030
}.getType(),
3131
HOST_AND_PORT_COLLECTION = new TypeToken<Collection<HostAndPort>>() {
3232
}.getType();
@@ -105,7 +105,7 @@ public void load() {
105105
addresses.addAll(Arrays.asList(System.getenv("CLOUDNET_DEFAULT_IP_WHITELIST").split(",")));
106106
}
107107

108-
this.ipWhitelist = this.document.get("ipWhitelist", COLLECTION_STRING, addresses);
108+
this.ipWhitelist = this.document.get("ipWhitelist", SET_STRING, addresses);
109109

110110
this.clusterConfig = this.document.get("cluster", CLUSTER, new NetworkCluster(
111111
System.getenv("CLOUDNET_CLUSTER_ID") != null ?
@@ -303,6 +303,11 @@ public void setHttpListeners(Collection<HostAndPort> httpListeners) {
303303
this.save();
304304
}
305305

306+
@Override
307+
public void setHostAddress(String hostAddress) {
308+
this.hostAddress = hostAddress;
309+
}
310+
306311
public ConfigurationOptionSSL getClientSslConfig() {
307312
return this.clientSslConfig;
308313
}

0 commit comments

Comments
 (0)