Added Kick and PanicBan

This commit is contained in:
Elias Müller 2023-12-10 14:29:08 +01:00
parent c059880ece
commit 933ea496c8
7 changed files with 176 additions and 1 deletions

View File

@ -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...");

View File

@ -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<ApplianceCommand<?>> commands() {
return List.of(new KickCommand());
}
}

View File

@ -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<Kick> {
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<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
return super.tabCompleteReducer(
Bukkit.getOnlinePlayers().stream().map(Player::getName).toList(),
args
);
}
}

View File

@ -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<UUID, Long> 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<ApplianceCommand<?>> commands() {
return List.of(new PanicBanCommand());
}
@Override
protected @NotNull List<Listener> eventHandlers() {
return List.of(new PanicBanJoinListener());
}
}

View File

@ -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<PanicBan> {
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<String> 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
);
}
}

View File

@ -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<PanicBan> {
@EventHandler
public void onLogin(AsyncPlayerPreLoginEvent event) {
if(getAppliance().isBanned(event.getUniqueId())) {
event.kickMessage(getAppliance().getDisconnectInfo(event.getUniqueId()).getComponent());
event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_BANNED);
}
}
}

View File

@ -31,4 +31,6 @@ commands:
aliases: ["dc"]
setPlayerLimit:
scheduleRestart:
cancelRestart:
cancelRestart:
kick:
panicBan: