Skip to content

Commit 13480af

Browse files
committed
Rename PingRetriever to BukkitPingRetriever, add VelocityPingRetriever and VelocityTPSRetriever implementations, and enhance ITPSRetriever with default method
1 parent 92c0e16 commit 13480af

File tree

7 files changed

+84
-6
lines changed

7 files changed

+84
-6
lines changed

api/src/main/java/it/renvins/serverpulse/api/metrics/ITPSRetriever.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,16 @@
22

33
public interface ITPSRetriever {
44

5-
double[] getTPS();
5+
/**
6+
* Retrieves the TPS (Ticks Per Second) of the server.
7+
*
8+
* @return an array of doubles representing the TPS values.
9+
* The first value is the average TPS over the last minute,
10+
* the second value is the average TPS over the last 5 minutes,
11+
* and the third value is the average TPS over the last 15 minutes.
12+
* @throws UnsupportedOperationException if the platform does not support this operation.
13+
*/
14+
default double[] getTPS() {
15+
throw new UnsupportedOperationException("This method is not supported on this platform.");
16+
}
617
}

bukkit/src/main/java/it/renvins/serverpulse/bukkit/ServerPulseBukkitLoader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import it.renvins.serverpulse.common.metrics.DiskRetriever;
1919
import it.renvins.serverpulse.bukkit.config.BukkitDatabaseConfiguration;
2020
import it.renvins.serverpulse.bukkit.config.BukkitMetricsConfiguration;
21-
import it.renvins.serverpulse.bukkit.metrics.PingRetriever;
21+
import it.renvins.serverpulse.bukkit.metrics.BukkitPingRetriever;
2222
import it.renvins.serverpulse.bukkit.metrics.PaperTPSRetriever;
2323
import it.renvins.serverpulse.bukkit.platform.BukkitPlatform;
2424
import it.renvins.serverpulse.bukkit.scheduler.BukkitTaskScheduler;
@@ -62,7 +62,7 @@ public ServerPulseBukkitLoader(ServerPulseBukkit plugin) {
6262
this.tpsRetriever = new BukkitTPSRetriever(plugin);
6363
}
6464
this.diskRetriever = new DiskRetriever(plugin.getDataFolder());
65-
this.pingRetriever = new PingRetriever();
65+
this.pingRetriever = new BukkitPingRetriever();
6666
}
6767

6868
@Override

bukkit/src/main/java/it/renvins/serverpulse/bukkit/metrics/PingRetriever.java renamed to bukkit/src/main/java/it/renvins/serverpulse/bukkit/metrics/BukkitPingRetriever.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import org.bukkit.Bukkit;
55
import org.bukkit.entity.Player;
66

7-
public class PingRetriever implements IPingRetriever {
7+
public class BukkitPingRetriever implements IPingRetriever {
88

99
@Override
1010
public int getMinPing() {

common/src/main/java/it/renvins/serverpulse/common/MetricsService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,12 @@ private SyncMetricsSnapshot collectSnapshot() {
100100
throw new IllegalStateException("This method must be called on the main thread.");
101101
}
102102
try {
103-
double[] tps = ServerPulseProvider.get().getTPSRetriever().getTPS();
103+
double[] tps = new double[]{0.0, 0.0, 0.0}; // Default TPS to 0.0 for non-ticking platforms
104104
int playerCount = platform.getOnlinePlayerCount();
105105

106106
Map<String, WorldData> worldsData = null;
107107
try {
108+
tps = ServerPulseProvider.get().getTPSRetriever().getTPS();
108109
worldsData = platform.getWorldsData();
109110
} catch (UnsupportedOperationException e) {
110111
worldsData = Map.of();

velocity/src/main/java/it/renvins/serverpulse/velocity/ServerPulseVelocity.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package it.renvins.serverpulse.velocity;
22

3+
import java.io.IOException;
4+
import java.nio.file.Files;
5+
import java.nio.file.Path;
6+
37
import com.google.common.eventbus.Subscribe;
48
import com.google.inject.Inject;
59
import com.velocitypowered.api.plugin.Plugin;
10+
import com.velocitypowered.api.plugin.annotation.DataDirectory;
611
import com.velocitypowered.api.proxy.ProxyServer;
712
import it.renvins.serverpulse.api.service.IDatabaseService;
813
import it.renvins.serverpulse.api.service.IMetricsService;
914
import it.renvins.serverpulse.common.DatabaseService;
1015
import it.renvins.serverpulse.common.MetricsService;
16+
import it.renvins.serverpulse.common.config.DatabaseConfiguration;
1117
import lombok.Getter;
1218
import org.slf4j.Logger;
1319

@@ -17,19 +23,24 @@ public class ServerPulseVelocity {
1723

1824
@Getter private final ProxyServer server;
1925
private final Logger logger;
26+
private final Path dataDirectory;
2027

2128
private IDatabaseService databaseService;
2229
private IMetricsService metricsService;
2330

2431
@Inject
25-
public ServerPulseVelocity(ProxyServer server, Logger logger) {
32+
public ServerPulseVelocity(ProxyServer server, Logger logger, @DataDirectory Path dataDirectory) {
2633
this.server = server;
2734
this.logger = logger;
35+
this.dataDirectory = dataDirectory;
2836
}
2937

3038
@Subscribe
3139
public void onProxyInitialization() {
3240
this.databaseService = new DatabaseService();
3341
this.metricsService = new MetricsService();
3442
}
43+
44+
private void loadConfig() {
45+
}
3546
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package it.renvins.serverpulse.velocity.metrics;
2+
3+
import com.velocitypowered.api.proxy.Player;
4+
import it.renvins.serverpulse.api.metrics.IPingRetriever;
5+
import it.renvins.serverpulse.velocity.ServerPulseVelocity;
6+
import lombok.RequiredArgsConstructor;
7+
8+
@RequiredArgsConstructor
9+
public class VelocityPingRetriever implements IPingRetriever {
10+
11+
private final ServerPulseVelocity plugin;
12+
13+
@Override
14+
public int getMinPing() {
15+
int minPing = Integer.MAX_VALUE;
16+
if (plugin.getServer().getAllPlayers().isEmpty()) {
17+
return 0;
18+
}
19+
for (Player player : plugin.getServer().getAllPlayers()) {
20+
minPing = Math.toIntExact(Math.min(minPing, player.getPing()));
21+
}
22+
return minPing;
23+
}
24+
25+
@Override
26+
public int getMaxPing() {
27+
int maxPing = 0;
28+
if (plugin.getServer().getAllPlayers().isEmpty()) {
29+
return 0;
30+
}
31+
for (Player player : plugin.getServer().getAllPlayers()) {
32+
maxPing = Math.toIntExact(Math.max(maxPing, player.getPing()));
33+
}
34+
return maxPing;
35+
}
36+
37+
@Override
38+
public int getAveragePing() {
39+
int totalPing = 0;
40+
int playerCount = plugin.getServer().getAllPlayers().size();
41+
if (playerCount == 0) {
42+
return 0;
43+
}
44+
for (Player player : plugin.getServer().getAllPlayers()) {
45+
totalPing += (int) player.getPing();
46+
}
47+
return totalPing / playerCount;
48+
}
49+
}
50+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package it.renvins.serverpulse.velocity.metrics;
2+
3+
import it.renvins.serverpulse.api.metrics.ITPSRetriever;
4+
5+
public class VelocityTPSRetriever implements ITPSRetriever {}

0 commit comments

Comments
 (0)