Skip to content

Commit fee8caa

Browse files
authored
Set server max players to number of total members (#25)
2 parents 9a47442 + 323d912 commit fee8caa

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

src/main/java/pro/cloudnode/smp/smpcore/Member.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

src/main/java/pro/cloudnode/smp/smpcore/SMPCore.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import pro.cloudnode.smp.smpcore.command.TimeCommand;
1616
import pro.cloudnode.smp.smpcore.command.UnbanCommand;
1717
import pro.cloudnode.smp.smpcore.listener.NationTeamUpdaterListener;
18+
import pro.cloudnode.smp.smpcore.listener.PlayerSlotsListener;
1819

1920
import java.io.IOException;
2021
import 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());
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}

0 commit comments

Comments
 (0)