diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index 471c5dc..83278ad 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -39,6 +39,7 @@ public final class Main extends JavaPlugin { new Report(), new Event(), new Help(), + new PlayerLimit(), new Debug() ); Bukkit.getLogger().info("Loading appliances..."); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/PlayerLimit.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/PlayerLimit.java new file mode 100644 index 0000000..a2d72ab --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/PlayerLimit.java @@ -0,0 +1,47 @@ +package eu.mhsl.craftattack.spawn.appliances.playerlimit; + +import eu.mhsl.craftattack.spawn.Main; +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.appliances.playerlimit.command.SetPlayerLimitCommand; +import eu.mhsl.craftattack.spawn.appliances.playerlimit.listener.PlayerJoinLimiterListener; +import eu.mhsl.craftattack.spawn.config.Configuration; +import org.bukkit.Bukkit; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class PlayerLimit extends Appliance { + private static final String playerLimitKey = "maxPlayers"; + private int limit; + public PlayerLimit() { + super("playerLimit"); + this.limit = localConfig().getInt(playerLimitKey); + Bukkit.setMaxPlayers(Integer.MAX_VALUE); + } + + public void setPlayerLimit(int limit) { + this.limit = limit; + localConfig().set(playerLimitKey, limit); + Configuration.saveChanges(); + } + + public int getLimit() { + return limit; + } + + @Override + protected @NotNull List eventHandlers() { + return List.of( + new PlayerJoinLimiterListener() + ); + } + + @Override + protected @NotNull List> commands() { + return List.of( + new SetPlayerLimitCommand() + ); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/command/SetPlayerLimitCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/command/SetPlayerLimitCommand.java new file mode 100644 index 0000000..4d90408 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/command/SetPlayerLimitCommand.java @@ -0,0 +1,18 @@ +package eu.mhsl.craftattack.spawn.appliances.playerlimit.command; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +public class SetPlayerLimitCommand extends ApplianceCommand { + public SetPlayerLimitCommand() { + super("setPlayerLimit"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + getAppliance().setPlayerLimit(Integer.parseInt(args[0])); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/listener/PlayerJoinLimiterListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/listener/PlayerJoinLimiterListener.java new file mode 100644 index 0000000..aa5383e --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/playerlimit/listener/PlayerJoinLimiterListener.java @@ -0,0 +1,18 @@ +package eu.mhsl.craftattack.spawn.appliances.playerlimit.listener; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent; + +public class PlayerJoinLimiterListener extends ApplianceListener { + @EventHandler + public void onLogin(PlayerLoginEvent playerPreLoginEvent) { + playerPreLoginEvent.kickMessage(Component.text("Der Server ist derzeit voll! Versuche es bitte später erneut.", NamedTextColor.RED)); + if(Bukkit.getOnlinePlayers().size() >= getAppliance().getLimit()) playerPreLoginEvent.setResult(PlayerLoginEvent.Result.KICK_FULL); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/whitelist/PlayerJoinListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/whitelist/PlayerJoinListener.java new file mode 100644 index 0000000..815225a --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/whitelist/PlayerJoinListener.java @@ -0,0 +1,12 @@ +package eu.mhsl.craftattack.spawn.appliances.whitelist; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; + +public class PlayerJoinListener extends ApplianceListener { + @EventHandler + public void preLoginEvent(AsyncPlayerPreLoginEvent preLoginEvent) { + + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 466ac1f..687c3c0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -29,3 +29,4 @@ commands: aliases: ["ts"] discord: aliases: ["dc"] + setPlayerLimit: