File tree Expand file tree Collapse file tree 3 files changed +48
-0
lines changed
src/main/java/pro/cloudnode/smp/smpcore Expand file tree Collapse file tree 3 files changed +48
-0
lines changed Original file line number Diff line number Diff line change @@ -242,6 +242,21 @@ public boolean delete() {
242242 return members ;
243243 }
244244
245+ public static int count () {
246+ try (
247+ final @ NotNull Connection conn = SMPCore .getInstance ().db ()
248+ .getConnection (); final @ NotNull PreparedStatement stmt = conn .prepareStatement ("SELECT COUNT(*) as `n` FROM `members`" )
249+ ) {
250+ final @ NotNull ResultSet rs = stmt .executeQuery ();
251+ rs .next ();
252+ return rs .getInt ("n" );
253+ }
254+ catch (final @ NotNull SQLException e ) {
255+ SMPCore .getInstance ().getLogger ().log (Level .SEVERE , "could not count members" , e );
256+ return 0 ;
257+ }
258+ }
259+
245260 public static @ NotNull Set <@ NotNull String > getNames () {
246261 return get ().stream ().map (m -> m .player ().getName ()).filter (Objects ::nonNull ).collect (Collectors .toSet ());
247262 }
Original file line number Diff line number Diff line change 1515import pro .cloudnode .smp .smpcore .command .TimeCommand ;
1616import pro .cloudnode .smp .smpcore .command .UnbanCommand ;
1717import pro .cloudnode .smp .smpcore .listener .NationTeamUpdaterListener ;
18+ import pro .cloudnode .smp .smpcore .listener .PlayerSlotsListener ;
1819
1920import java .io .IOException ;
2021import java .io .InputStream ;
@@ -69,6 +70,7 @@ public void onEnable() {
6970 initDatabase ();
7071
7172 getServer ().getPluginManager ().registerEvents (new NationTeamUpdaterListener (), this );
73+ getServer ().getPluginManager ().registerEvents (new PlayerSlotsListener (), this );
7274
7375 final @ NotNull HashMap <@ NotNull String , @ NotNull Command > commands = new HashMap <>() {{
7476 put ("smpcore" , new MainCommand ());
Original file line number Diff line number Diff line change 1+ package pro .cloudnode .smp .smpcore .listener ;
2+
3+ import org .bukkit .event .EventHandler ;
4+ import org .bukkit .event .Listener ;
5+ import org .bukkit .event .player .PlayerLoginEvent ;
6+ import org .bukkit .event .server .ServerListPingEvent ;
7+ import org .jetbrains .annotations .NotNull ;
8+ import pro .cloudnode .smp .smpcore .Member ;
9+
10+ import java .util .Optional ;
11+
12+ public final class PlayerSlotsListener implements Listener {
13+ /**
14+ * Change the max players number in server list ping
15+ */
16+ @ EventHandler
17+ public void onServerListPing (final @ NotNull ServerListPingEvent event ) {
18+ event .setMaxPlayers (Member .count ());
19+ }
20+
21+ /**
22+ * If the player is a member, but the server thinks it's full, allow them to join
23+ */
24+ @ EventHandler
25+ public void onPlayerLogin (final @ NotNull PlayerLoginEvent event ) {
26+ if (event .getResult () == PlayerLoginEvent .Result .KICK_FULL ) {
27+ final @ NotNull Optional <@ NotNull Member > member = Member .get (event .getPlayer ());
28+ if (member .isPresent ()) event .allow ();
29+ }
30+ }
31+ }
You can’t perform that action at this time.
0 commit comments