diff --git a/src/main/java/org/geysermc/connect/extension/PacketHandler.java b/src/main/java/org/geysermc/connect/extension/PacketHandler.java index 6e0927c..5a0444b 100644 --- a/src/main/java/org/geysermc/connect/extension/PacketHandler.java +++ b/src/main/java/org/geysermc/connect/extension/PacketHandler.java @@ -75,8 +75,16 @@ public class PacketHandler extends UpstreamPacketHandler { public PacketSignal handle(SetLocalPlayerAsInitializedPacket packet) { geyserConnect.logger().debug("Player initialized: " + Utils.displayName(session)); + // Check to see if the server is full and we have a hard player cap + if (geyserConnect.config().hardPlayerLimit()) { + if (session.getGeyser().getSessionManager().size() > session.getGeyser().getConfig().getMaxPlayers()) { + session.disconnect("disconnectionScreen.serverFull"); + return PacketSignal.HANDLED; + } + } + // Handle the virtual host if specified - VirtualHostSection vhost = GeyserConnect.instance().config().vhost(); + VirtualHostSection vhost = geyserConnect.config().vhost(); if (vhost.enabled()) { String domain = session.getClientData().getServerAddress().split(":")[0]; if (!domain.equals(vhost.baseDomain()) && domain.endsWith("." + vhost.baseDomain())) { @@ -104,7 +112,7 @@ public class PacketHandler extends UpstreamPacketHandler { } // Log the virtual host usage - GeyserConnect.instance().logger().info(Utils.displayName(session) + " is using virtualhost: " + address + ":" + port + (!online ? " (offline)" : "")); + geyserConnect.logger().info(Utils.displayName(session) + " is using virtualhost: " + address + ":" + port + (!online ? " (offline)" : "")); // Send the player to the wanted server Utils.sendToServer(session, originalPacketHandler, new Server(address, port, online, false, null, null, null)); diff --git a/src/main/java/org/geysermc/connect/extension/config/Config.java b/src/main/java/org/geysermc/connect/extension/config/Config.java index 46b2f8e..ec05c27 100644 --- a/src/main/java/org/geysermc/connect/extension/config/Config.java +++ b/src/main/java/org/geysermc/connect/extension/config/Config.java @@ -32,6 +32,7 @@ import java.util.List; public record Config( @JsonProperty("welcome-file") String welcomeFile, + @JsonProperty("hard-player-limit") boolean hardPlayerLimit, List servers, @JsonProperty("custom-servers") CustomServersSection customServers, VirtualHostSection vhost) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 637bacc..74a29db 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -6,6 +6,10 @@ # This is loaded live so will update without a server restart welcome-file: welcome.txt +# Enabled hard max player limit +# This will kick players if the server is full +hard-player-limit: false + # A global list of servers sent to all clients servers: - name: The Hive