From 933ea496c8bbc97fc51860cd243ecf478779f397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 10 Dec 2023 14:29:08 +0100 Subject: [PATCH] Added Kick and PanicBan --- .../java/eu/mhsl/craftattack/spawn/Main.java | 4 ++ .../spawn/appliances/kick/Kick.java | 32 ++++++++++++ .../spawn/appliances/kick/KickCommand.java | 35 +++++++++++++ .../spawn/appliances/panicBan/PanicBan.java | 51 +++++++++++++++++++ .../appliances/panicBan/PanicBanCommand.java | 36 +++++++++++++ .../panicBan/PanicBanJoinListener.java | 15 ++++++ src/main/resources/plugin.yml | 4 +- 7 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/Kick.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/KickCommand.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBan.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanCommand.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanJoinListener.java diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index ab91b43..b9bf48a 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -2,7 +2,9 @@ package eu.mhsl.craftattack.spawn; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker; +import eu.mhsl.craftattack.spawn.appliances.kick.Kick; import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; +import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan; import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart; import eu.mhsl.craftattack.spawn.appliances.debug.Debug; import eu.mhsl.craftattack.spawn.appliances.event.Event; @@ -45,6 +47,8 @@ public final class Main extends JavaPlugin { new PlayerLimit(), new Whitelist(), new Restart(), + new Kick(), + new PanicBan(), new Debug() ); Bukkit.getLogger().info("Loading appliances..."); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/Kick.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/Kick.java new file mode 100644 index 0000000..ad7fd61 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/Kick.java @@ -0,0 +1,32 @@ +package eu.mhsl.craftattack.spawn.appliances.kick; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class Kick extends Appliance { + public void kick(@NotNull String playerName, @Nullable String message) { + Player player = Bukkit.getPlayer(playerName); + + if(player == null) + throw new ApplianceCommand.Error("Player not found"); + + new DisconnectInfo( + "Administrator Eingriff", + "Du wurdest von einem Admin vom Server geworfen.", + message, + player.getUniqueId() + ).applyKick(player); + } + + @Override + protected @NotNull List> commands() { + return List.of(new KickCommand()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/KickCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/KickCommand.java new file mode 100644 index 0000000..94bc647 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/kick/KickCommand.java @@ -0,0 +1,35 @@ +package eu.mhsl.craftattack.spawn.appliances.kick; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class KickCommand extends ApplianceCommand { + public KickCommand() { + super("kick"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { + getAppliance().kick( + args[0], + Arrays.stream(args).skip(1).collect(Collectors.joining(" ")) + ); + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return super.tabCompleteReducer( + Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(), + args + ); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBan.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBan.java new file mode 100644 index 0000000..ef6bb8b --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBan.java @@ -0,0 +1,51 @@ +package eu.mhsl.craftattack.spawn.appliances.panicBan; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +public class PanicBan extends Appliance { + private final Map panicBans = new HashMap<>(); + + public void panicBan(@NotNull String playerName) { + Player player = Bukkit.getPlayer(playerName); + + if(player == null) + throw new ApplianceCommand.Error("Player not found"); + + panicBans.put(player.getUniqueId(), System.currentTimeMillis()); + this.getDisconnectInfo(player.getUniqueId()).applyKick(player); + } + + public boolean isBanned(UUID player) { + if(panicBans.containsKey(player) && panicBans.get(player) < System.currentTimeMillis() - 15 * 60 * 1000) + panicBans.remove(player); + + return panicBans.containsKey(player); + } + + public DisconnectInfo getDisconnectInfo(UUID playerUuid) { + return new DisconnectInfo( + "Temporäre Sperre", + "Du wurdest von einen Admin vom Server geworfen!", + "Du bist bis zur endgültigen Klärung gesperrt.", + playerUuid + ); + } + + @Override + protected @NotNull List> commands() { + return List.of(new PanicBanCommand()); + } + + @Override + protected @NotNull List eventHandlers() { + return List.of(new PanicBanJoinListener()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanCommand.java new file mode 100644 index 0000000..9c74fe3 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanCommand.java @@ -0,0 +1,36 @@ +package eu.mhsl.craftattack.spawn.appliances.panicBan; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class PanicBanCommand extends ApplianceCommand { + public PanicBanCommand() { + super("panicBan"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { + getAppliance().panicBan(args[0]); + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return super.tabCompleteReducer( + Stream.concat( + Bukkit.getOnlinePlayers().stream().map(Player::getName), + Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getName) + ).toList(), + args + ); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanJoinListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanJoinListener.java new file mode 100644 index 0000000..fa4dc2f --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/panicBan/PanicBanJoinListener.java @@ -0,0 +1,15 @@ +package eu.mhsl.craftattack.spawn.appliances.panicBan; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; + +public class PanicBanJoinListener extends ApplianceListener { + @EventHandler + public void onLogin(AsyncPlayerPreLoginEvent event) { + if(getAppliance().isBanned(event.getUniqueId())) { + event.kickMessage(getAppliance().getDisconnectInfo(event.getUniqueId()).getComponent()); + event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_BANNED); + } + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b0abf69..e3883f3 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -31,4 +31,6 @@ commands: aliases: ["dc"] setPlayerLimit: scheduleRestart: - cancelRestart: \ No newline at end of file + cancelRestart: + kick: + panicBan: \ No newline at end of file