Skip to content

Commit 4b1fb06

Browse files
some refactoring and version and player hover info WIP
1 parent 0ac95ae commit 4b1fb06

File tree

4 files changed

+66
-53
lines changed

4 files changed

+66
-53
lines changed

.idea/workspace.xml

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/org/zeroBzeroT/serverPingPlayerList/Config.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,15 @@ private void createDefaultConfig() {
5454
}
5555
}
5656

57-
public String getValue(String key) {
57+
public String getString(String key) {
5858
return configValues.getOrDefault(key, "").toString();
5959
}
6060

6161
public boolean getBoolean(String key) {
6262
return Boolean.parseBoolean(configValues.getOrDefault(key, "false").toString());
6363
}
64+
65+
public Integer getInt(String key) {
66+
return Integer.parseInt(configValues.getOrDefault(key, "false").toString());
67+
}
6468
}

src/main/java/org/zeroBzeroT/serverPingPlayerList/Main.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import java.util.concurrent.TimeUnit;
1818

1919
public class Main {
20-
2120
private final ProxyServer server;
2221
private final Logger logger;
2322
private final Path dataDirectory;
@@ -39,18 +38,26 @@ public Main(ProxyServer server, Logger logger, @DataDirectory Path dataDirectory
3938
public void onProxyInitialize(ProxyInitializeEvent event) {
4039
logger.info("ServerPingPlayerList is starting up...");
4140

42-
4341
config = new Config(dataDirectory, logger);
4442

4543
// Register Event Listeners
46-
serverListListener = new ServerListListener(this, logger, config);
44+
serverListListener = new ServerListListener(this, config);
4745
server.getEventManager().register(this, serverListListener);
4846

47+
// Commands
4948
registerCommands();
5049

50+
// Server Ping Update Task
5151
startPingTask();
5252

53+
// Some output to the console ;)
5354
logConfig();
55+
56+
// TODO Load Plugin Metrics
57+
if (config.getBoolean("bStats")) {
58+
// bStats is Velocity Metrics v2, so you would prolly need to set up differently if you want to support it.
59+
// so this is js a placeholder for your metrics setup if needed.
60+
}
5461
}
5562

5663
private void registerCommands() {
@@ -62,10 +69,6 @@ public ProxyServer getServer() {
6269
return server;
6370
}
6471

65-
public Config getConfig() {
66-
return config;
67-
}
68-
6972
public ServerPing getMainPing() {
7073
return mainPing;
7174
}
@@ -83,39 +86,36 @@ public void startPingTask() {
8386
if (pingTask != null) {
8487
pingTask.cancel();
8588
}
89+
8690
mainPing = null;
8791

8892
if (config.getBoolean("useMainServer")) {
89-
Optional<RegisteredServer> mainServer = server.getServer(config.getValue("mainServer"));
93+
Optional<RegisteredServer> mainServer = server.getServer(config.getString("mainServer"));
9094
if (mainServer.isEmpty()) {
91-
logger.warn("Main server '{}' not found! Ping task will not start.", config.getValue("mainServer"));
95+
logger.warn("Main server '{}' not found! Ping task will not start.", config.getString("mainServer"));
9296
return;
9397
}
9498

9599
// Schedule repeating task to update mainPing every 5 seconds
96100
pingTask = server.getScheduler().buildTask(this, () -> mainServer.get().ping().thenAccept(ping -> {
97101
mainPing = ping;
98-
logger.debug("Cached ping updated for main server '{}'", config.getValue("mainServer"));
102+
logger.debug("Cached ping updated for main server '{}'", config.getString("mainServer"));
99103
}).exceptionally(t -> {
100-
logger.error("Failed to ping main server '{}'", config.getValue("mainServer"), t);
104+
logger.error("Failed to ping main server '{}'", config.getString("mainServer"), t);
101105
return null;
102106
})).repeat(5, TimeUnit.SECONDS).schedule();
103107
}
104108
}
105109

106110
private void logConfig() {
107-
logger.info("[config] Version Name: {}", config.getValue("versionName"));
108-
logger.info("[config] Version Minimum Protocol: {}", config.getValue("versionMinProtocol"));
109-
logger.info("[config] Set Hover Info: {}", config.getValue("setHoverInfo"));
111+
logger.info("[config] Version Name: {}", config.getString("versionName"));
112+
logger.info("[config] Version Minimum Protocol: {}", config.getString("versionMinProtocol"));
113+
logger.info("[config] Set Hover Info: {}", config.getString("setHoverInfo"));
110114
if (config.getBoolean("messageOfTheDayOverride")) {
111-
logger.info("[config] Message Of The Day: {}", config.getValue("messageOfTheDay"));
115+
logger.info("[config] Message Of The Day: {}", config.getString("messageOfTheDay"));
112116
}
113117
if (config.getBoolean("useMainServer")) {
114-
logger.info("[config] Ping Pass-Through-Server: {}", config.getValue("mainServer"));
115-
}
116-
if (config.getBoolean("bStats")) {
117-
// TODO bStats is Velocity Metrics v2, so you would prolly need to set up differently if you want to support it.
118-
// so this is js a placeholder for your metrics setup if needed.
118+
logger.info("[config] Ping Pass-Through-Server: {}", config.getString("mainServer"));
119119
}
120120
}
121121
}

src/main/java/org/zeroBzeroT/serverPingPlayerList/listener/ServerListListener.java

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,59 +3,65 @@
33
import com.velocitypowered.api.event.Subscribe;
44
import com.velocitypowered.api.event.proxy.ProxyPingEvent;
55
import com.velocitypowered.api.proxy.server.ServerPing;
6+
import com.velocitypowered.api.proxy.server.ServerPing.Players;
7+
import com.velocitypowered.api.proxy.server.ServerPing.SamplePlayer;
68
import net.kyori.adventure.text.Component;
7-
import org.slf4j.Logger;
89
import org.zeroBzeroT.serverPingPlayerList.Config;
910
import org.zeroBzeroT.serverPingPlayerList.Main;
1011

11-
import java.util.concurrent.TimeUnit;
12-
12+
import java.util.List;
13+
import java.util.stream.Collectors;
1314

1415
public final class ServerListListener {
1516
private final Main plugin;
16-
private final Logger logger;
1717
private Config config;
18-
private volatile ServerPing cachedPing;
19-
2018

21-
public ServerListListener(Main plugin, Logger logger, Config config) {
19+
public ServerListListener(Main plugin, Config config) {
2220
this.plugin = plugin;
23-
this.logger = logger;
2421
this.config = config;
2522
}
2623

2724
public void setConfig(Config config) {
2825
this.config = config;
2926
}
3027

31-
public void startCachingPing() {
32-
plugin.getServer().getScheduler().buildTask(plugin, () -> plugin.getServer().getServer(config.getValue("mainServer")).ifPresent(server -> {
33-
server.ping().thenAccept(ping -> cachedPing = ping);
34-
})).repeat(5, TimeUnit.SECONDS).schedule();
35-
}
36-
3728
@Subscribe
38-
public void onProxyPing(ProxyPingEvent event) {
29+
public void onProxyPing(final ProxyPingEvent event) {
3930
var pingResponseBuilder = event.getPing().asBuilder();
40-
pingResponseBuilder.version(event.getPing().getVersion());
4131

32+
// Version
33+
int protocol = pingResponseBuilder.getVersion().getProtocol();
34+
String name = config.getString("versionName");
35+
if (protocol < config.getInt("versionMinProtocol")) protocol = config.getInt("versionMinProtocol");
36+
pingResponseBuilder.version(new ServerPing.Version(protocol, name));
37+
38+
// Message of the day
4239
if (config.getBoolean("messageOfTheDayOverride")) {
43-
pingResponseBuilder.description(Component.text(config.getValue("messageOfTheDay")));
40+
pingResponseBuilder.description(Component.text(config.getString("messageOfTheDay")));
4441
}
4542

46-
// THIS IS WHERE I GOT ERRORS!
47-
48-
//if (config.getBoolean("setHoverInfo")) {
49-
// if (config.getBoolean("useMainServer") && cachedPing != null) {
50-
// pingResponseBuilder.onlinePlayers(cachedPing.getPlayersOnline());
51-
// pingResponseBuilder.samplePlayers(cachedPing.getPlayers().getSample());
52-
// } else {
53-
// pingResponseBuilder.samplePlayers(plugin.getServer().getAllPlayers().stream()
54-
// .map(player -> new com.velocitypowered.api.proxy.player.Profile(player.getUniqueId(), player.getUsername()))
55-
// .toArray(com.velocitypowered.api.proxy.player.Profile[]::new));
56-
// pingResponseBuilder.onlinePlayers(plugin.getServer().getPlayerCount());
57-
// }
58-
//}
43+
// Server info player list
44+
if (config.getBoolean("setHoverInfo")) {
45+
int onlinePlayersCount;
46+
List<SamplePlayer> sampleProfiles;
47+
48+
if (config.getBoolean("useMainServer") && plugin.getMainPing() != null && plugin.getMainPing().getPlayers().isPresent()) {
49+
Players players = plugin.getMainPing().getPlayers().get();
50+
51+
onlinePlayersCount = players.getOnline();
52+
sampleProfiles = players.getSample();
53+
} else {
54+
onlinePlayersCount = plugin.getServer().getPlayerCount();
55+
sampleProfiles = plugin.getServer().getAllPlayers().stream()
56+
.map(player -> new SamplePlayer(player.getUsername(), player.getUniqueId()))
57+
.collect(Collectors.toList());
58+
}
59+
60+
pingResponseBuilder.onlinePlayers(onlinePlayersCount);
61+
62+
SamplePlayer[] array = new SamplePlayer[sampleProfiles.size()];
63+
pingResponseBuilder.samplePlayers(sampleProfiles.toArray(array));
64+
}
5965

6066
event.setPing(pingResponseBuilder.build());
6167
}

0 commit comments

Comments
 (0)