diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index a412d11..c866c09 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -15,9 +15,10 @@ import de.fanta.challenges.scoreboard.ScoreManager; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.VanishUtils; import de.fanta.challenges.utils.Statistics; +import de.fanta.challenges.utils.VanishUtils; import de.iani.cubesidestats.api.CubesideStatisticsAPI; +import de.speedy64.globalport.GlobalApi; import org.apache.commons.io.FileUtils; import org.bukkit.BanList; import org.bukkit.Bukkit; @@ -93,6 +94,8 @@ private static final ArrayList statisticPlayers = new ArrayList<>(); + private static final ArrayList bannedPlayers = new ArrayList<>(); + public boolean resetwithseed; public static Challenges getPlugin() { @@ -246,6 +249,10 @@ Config.setValue("editsettings", true); } + for (String UUIDString : Config.getStringList("bannedPlayers")) { + addBannedPlayer(UUID.fromString(UUIDString), false); + } + if (plugin.getServerType() == ServerType.ADVENTURE || plugin.getServerType() == ServerType.CHALLENGE_LOAD) { startResetTask(); } @@ -522,6 +529,14 @@ return Bukkit.getWorld("world").getGameRuleValue(GameRule.NATURAL_REGENERATION); } + public void portPlayerToLobby(Player player) { + if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD || plugin.getServerType() == ServerType.CHALLENGE_EVENT) { + GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge"); + } else if (plugin.getServerType() == ServerType.ADVENTURE) { + GlobalApi.portOnlinePlayerToLocation(player.getName(), "adventure"); + } + } + public Timer getTimer() { return timer; } @@ -605,4 +620,26 @@ public ArrayList getstatisticPlayers() { return statisticPlayers; } + + public void addBannedPlayer(UUID uuid, boolean isPermaBan) { + bannedPlayers.add(uuid); + if (isPermaBan) { + List bannedPlayer = Config.getStringList("bannedPlayers"); + bannedPlayer.add(uuid.toString()); + Config.setValue("bannedPlayers", bannedPlayer, false); + } + } + + public void removeBannedPlayer(UUID uuid, Boolean removeConfig) { + bannedPlayers.remove(uuid); + if (removeConfig) { + List bannedPlayer = Config.getStringList("bannedPlayers"); + bannedPlayer.remove(uuid.toString()); + Config.setValue("bannedPlayers", bannedPlayer, false); + } + } + + public boolean isPlayerBanned(UUID uuid) { + return bannedPlayers.contains(uuid); + } } diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index 6ce3f65..ececa0b 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.commands.challenges.ChallengeMaxPlayersCommand; +import de.fanta.challenges.commands.challenges.ChallengesBanCommand; import de.fanta.challenges.commands.challenges.ChallengesCommand; import de.fanta.challenges.commands.challenges.ChallengesEnderSeeCommand; import de.fanta.challenges.commands.challenges.ChallengesHelpCommand; @@ -11,6 +12,7 @@ import de.fanta.challenges.commands.challenges.ChallengesPingCommand; import de.fanta.challenges.commands.challenges.ChallengesSaveCommand; import de.fanta.challenges.commands.challenges.ChallengesSpeedCommand; +import de.fanta.challenges.commands.challenges.ChallengesUnBanCommand; import de.fanta.challenges.commands.challenges.TeleportCommand; import de.fanta.challenges.commands.challenges.CheckItemsCommand; import de.fanta.challenges.commands.coords.CoordsCommand; @@ -55,6 +57,8 @@ challengesRouter.addCommandMapping(new ChallengesCommand(plugin)); challengesRouter.addCommandMapping(new ChallengesHelpCommand(plugin), "help"); challengesRouter.addCommandMapping(new ChallengesKickCommand(plugin), "kick"); + challengesRouter.addCommandMapping(new ChallengesBanCommand(plugin), "ban"); + challengesRouter.addCommandMapping(new ChallengesUnBanCommand(plugin), "unban"); challengesRouter.addCommandMapping(new ChallengesSaveCommand(plugin), "save"); challengesRouter.addCommandMapping(new ChallengesPingCommand(), "ping"); challengesRouter.addCommandMapping(new ChallengesMemoryCommand(), "mem"); diff --git a/src/main/java/de/fanta/challenges/commands/LeaveCommand.java b/src/main/java/de/fanta/challenges/commands/LeaveCommand.java index 5763438..fc20381 100644 --- a/src/main/java/de/fanta/challenges/commands/LeaveCommand.java +++ b/src/main/java/de/fanta/challenges/commands/LeaveCommand.java @@ -24,11 +24,7 @@ ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); return true; } else { - if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD || plugin.getServerType() == ServerType.CHALLENGE_EVENT) { - GlobalApi.portOnlinePlayerToLocation(p.getName(), "challenge"); - } else if (plugin.getServerType() == ServerType.ADVENTURE) { - GlobalApi.portOnlinePlayerToLocation(p.getName(), "adventure"); - } + plugin.portPlayerToLobby(p); } return true; } diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesBanCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesBanCommand.java new file mode 100644 index 0000000..2fff3a9 --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesBanCommand.java @@ -0,0 +1,65 @@ +package de.fanta.challenges.commands.challenges; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import de.speedy64.globalport.GlobalApi; +import org.bukkit.BanList; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesBanCommand extends SubCommand { + private final Challenges plugin; + + public ChallengesBanCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + Player punishedPlayer = Bukkit.getPlayer(playerName); + + if (punishedPlayer == null) { + ChatUtil.sendErrorMessage(player, "Dieser Spieler ist nicht online!"); + return true; + } + + if (punishedPlayer == player) { + ChatUtil.sendErrorMessage(player, "Du kannst dich nicht selbst bannen."); + return true; + } + + if (punishedPlayer.hasPermission("Challenges.editor.override")) { + ChatUtil.sendErrorMessage(player, "Diese Person kannst du nicht bannen."); + return true; + } + + ChatUtil.sendWarningMessage(punishedPlayer, "Du wurdest vom Editor gebannt!"); + plugin.addBannedPlayer(punishedPlayer.getUniqueId(), true); + plugin.portPlayerToLobby(punishedPlayer); + ChatUtil.sendNormalMessage(player, "Du hast " + ChatUtil.BLUE + punishedPlayer.getName() + ChatUtil.GREEN + " gebannt."); + return true; + } else { + ChatUtil.sendWarningMessage(player, "/challenge ban [Player]"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler bannen."); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } +} diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java index ba75886..c15b29f 100644 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesKickCommand.java @@ -20,48 +20,51 @@ @Override public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player)) { + if (!(sender instanceof Player player)) { ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); return true; } - if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { if (args.hasNext()) { String playerName = args.getNext(); - Player player = Bukkit.getPlayer(playerName); + Player punishedPlayer = Bukkit.getPlayer(playerName); - if (player == null) { - ChatUtil.sendErrorMessage(sender, "Dieser Spieler ist nicht online!"); + if (punishedPlayer == null) { + ChatUtil.sendErrorMessage(player, "Dieser Spieler ist nicht online!"); return true; } - if (player == sender) { - ChatUtil.sendErrorMessage(sender, "Du kannst dich nicht selbst kicken."); + if (punishedPlayer == player) { + ChatUtil.sendErrorMessage(player, "Du kannst dich nicht selbst kicken."); return true; } - if (player.hasPermission("Challenges.editor.override")) { - ChatUtil.sendErrorMessage(sender, "Diese Person kannst du nicht kicken."); + if (punishedPlayer.hasPermission("Challenges.editor.override")) { + ChatUtil.sendErrorMessage(player, "Diese Person kannst du nicht kicken."); return true; } - ChatUtil.sendWarningMessage(player, "Du wurdest vom Editor gekickt!"); - ChatUtil.sendWarningMessage(player, "Du kannst in einer Minute wieder joinen"); - GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge"); + ChatUtil.sendWarningMessage(punishedPlayer, "Du wurdest vom Editor gekickt!"); + ChatUtil.sendWarningMessage(punishedPlayer, "Du kannst in einer Minute wieder joinen"); + plugin.addBannedPlayer(punishedPlayer.getUniqueId(), false); + plugin.portPlayerToLobby(punishedPlayer); + ChatUtil.sendNormalMessage(player, "Du hast " + ChatUtil.BLUE + punishedPlayer.getName() + ChatUtil.GREEN + " gekickt. Der Spieler kann in einer Minute wieder Joinen"); Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - player.banPlayer("Du wurdest vom Editor gekickt."); - }, 5L); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - Bukkit.getBanList(BanList.Type.NAME).pardon(player.getName()); + if (plugin.isPlayerBanned(punishedPlayer.getUniqueId())) { + plugin.removeBannedPlayer(punishedPlayer.getUniqueId(), false); + } }, 20 * 60); return true; + } else { + ChatUtil.sendWarningMessage(player, "/challenge kick [Player]"); } - return false; + return true; } else if (plugin.getCurrentEditor() != null) { - ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler kicken."); + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler kicken."); return true; } else { - ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); - ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); return true; } } diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesUnBanCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesUnBanCommand.java new file mode 100644 index 0000000..0b86515 --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesUnBanCommand.java @@ -0,0 +1,67 @@ +package de.fanta.challenges.commands.challenges; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.UUID; + +public class ChallengesUnBanCommand extends SubCommand { + private final Challenges plugin; + + public ChallengesUnBanCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (plugin.isEditor(player) || player.hasPermission("Challenges.editor.override")) { + if (args.hasNext()) { + String playerName = args.getNext(); + OfflinePlayer punishedPlayer = Bukkit.getOfflinePlayer(playerName); + + if (!plugin.isPlayerBanned(punishedPlayer.getUniqueId())) { + ChatUtil.sendWarningMessage(player, ChatUtil.BLUE + punishedPlayer.getName() + ChatUtil.GREEN + " ist nicht gebannt."); + return true; + } + + plugin.removeBannedPlayer(punishedPlayer.getUniqueId(), true); + ChatUtil.sendNormalMessage(player, "Du hast " + ChatUtil.BLUE + punishedPlayer.getName() + ChatUtil.GREEN + " entbannt."); + return true; + } else { + ChatUtil.sendWarningMessage(player, "/challenge unban [Player]"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(player, "Du bist kein Editor! Nur " + plugin.getCurrentEditor().getName() + " kann Spieler entbannen."); + return true; + } else { + ChatUtil.sendErrorMessage(player, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(player, "Um selbst Editor zu werden musst du dir im Freebuild VIP kaufen!"); + return true; + } + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + ArrayList tablist = new ArrayList<>(); + for (String UUIDString : Config.getStringList("bannedPlayers")) { + OfflinePlayer tempOfflinePlayer = Bukkit.getOfflinePlayer(UUID.fromString(UUIDString)); + tablist.add(tempOfflinePlayer.getName()); + } + return tablist; + } +} diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java index 9bfe2a6..a3dadc7 100644 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java +++ b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java @@ -47,11 +47,10 @@ for (Player p : Bukkit.getOnlinePlayers()) { if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD || plugin.getServerType() == ServerType.CHALLENGE_EVENT) { p.sendTitle(ChatUtil.BLUE + "Server wird zurückgesetzt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10); - GlobalApi.portOnlinePlayerToLocation(p.getName(), "challenge"); } else if (plugin.getServerType() == ServerType.ADVENTURE) { p.sendTitle(ChatUtil.BLUE + "Server wird gestoppt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10); - GlobalApi.portOnlinePlayerToLocation(p.getName(), "adventure"); } + plugin.portPlayerToLobby(p); } if (plugin.getServerType() == ServerType.ADVENTURE) { plugin.delteTexturePack(); diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 3ff6b57..65fa2e2 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -94,6 +94,11 @@ } + if (plugin.isPlayerBanned(e.getPlayer().getUniqueId())) { + e.setResult(PlayerLoginEvent.Result.KICK_OTHER); + e.setKickMessage("Du wurdest von dieser Lobby gebannt."); + } + if (plugin.isWaitingForShutdown()) { e.setResult(PlayerLoginEvent.Result.KICK_OTHER); e.setKickMessage("Der Server wird gerade neu gestartet."); diff --git a/src/main/java/de/fanta/challenges/teams/TeamListener.java b/src/main/java/de/fanta/challenges/teams/TeamListener.java index fb572c3..13b4eb9 100644 --- a/src/main/java/de/fanta/challenges/teams/TeamListener.java +++ b/src/main/java/de/fanta/challenges/teams/TeamListener.java @@ -161,7 +161,7 @@ } } } - if (Config.getBoolean("event.teams") && plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(e.getPlayer())) == 0) { + if (Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(e.getPlayer())) == 0) { plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), 0); } } diff --git a/src/main/java/de/fanta/challenges/utils/Config.java b/src/main/java/de/fanta/challenges/utils/Config.java index 5189b6a..6d5176b 100644 --- a/src/main/java/de/fanta/challenges/utils/Config.java +++ b/src/main/java/de/fanta/challenges/utils/Config.java @@ -7,6 +7,8 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; +import java.util.List; + public class Config { private static final Challenges plugin = Challenges.getPlugin(); @@ -66,6 +68,10 @@ return plugin.getConfig().getConfigurationSection(path); } + public static List getStringList(String path) { + return plugin.getConfig().getStringList(path); + } + public static boolean contains(String path) { return plugin.getConfig().contains(path); }