This commit is contained in:
okx-code
2025-09-22 23:35:54 +01:00
parent b4a70fb9ce
commit 94a683ca02
25 changed files with 234 additions and 42 deletions

View File

@@ -6,6 +6,7 @@ import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.event.player.KickedFromServerEvent;
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
import com.velocitypowered.api.event.player.ServerPreConnectEvent;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.Dependency;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.proxy.Player;
@@ -13,12 +14,10 @@ import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.ServerConnection;
import com.velocitypowered.api.proxy.server.RegisteredServer;
import java.time.Instant;
import java.util.Comparator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.model.user.UserManager;
@@ -46,6 +45,15 @@ public class CivProxyPlugin {
}
public Logger getLogger() {
return logger;
}
@Subscribe
public void onProxyInitialization(ProxyInitializeEvent event) {
new PlayerCount(this, server).start();
}
@Subscribe
public void onToMain(KickedFromServerEvent event) {
// Other than banned players, kicked servers should go to the queue on the PvP server
@@ -95,7 +103,7 @@ public class CivProxyPlugin {
// if (mini != null && mini.getPlayersConnected().size() < 110) {
// event.setResult(ServerPreConnectEvent.ServerResult.allowed(server.getServer("mini").get()));
// } else {
event.setResult(ServerPreConnectEvent.ServerResult.allowed(server.getServer("pvp").get()));
event.setResult(ServerPreConnectEvent.ServerResult.allowed(server.getServer("pvp").get()));
// }
players.put(event.getPlayer(), new QueueRecord(Instant.now(), name));

View File

@@ -0,0 +1,47 @@
package net.civmc.civproxy;
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
import com.velocitypowered.api.proxy.server.RegisteredServer;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
public class PlayerCount {
private static final MinecraftChannelIdentifier PLAYER_COUNT_ID = MinecraftChannelIdentifier.create("civproxy", "player_count");
private final CivProxyPlugin plugin;
private final ProxyServer server;
public PlayerCount(CivProxyPlugin plugin, ProxyServer server) {
this.plugin = plugin;
this.server = server;
}
public void start() {
server.getEventManager().register(plugin, this);
server.getScheduler().buildTask(plugin, () -> {
try {
Map<String, Integer> count = new HashMap<>();
for (RegisteredServer server : server.getAllServers()) {
count.put(server.getServerInfo().getName(), server.getPlayersConnected().size());
}
for (RegisteredServer server : server.getAllServers()) {
server.sendPluginMessage(PLAYER_COUNT_ID, out -> {
out.writeInt(count.size() - 1);
for (Map.Entry<String, Integer> entry : count.entrySet()) {
if (!entry.getKey().equals(server.getServerInfo().getName())) {
out.writeUTF(entry.getKey());
out.writeInt(entry.getValue());
}
}
});
}
} catch (RuntimeException ex) {
plugin.getLogger().warn("Ticking player counts", ex);
}
}).delay(Duration.ZERO).repeat(Duration.ofSeconds(2)).schedule();
}
}