diff --git a/src/de/steamwar/misslewars/MissileWars.java b/src/de/steamwar/misslewars/MissileWars.java index c677f08..4811fbb 100644 --- a/src/de/steamwar/misslewars/MissileWars.java +++ b/src/de/steamwar/misslewars/MissileWars.java @@ -19,9 +19,10 @@ package de.steamwar.misslewars; -import de.steamwar.misslewars.commands.CommandAcceptDecline; -import de.steamwar.misslewars.commands.CommandInvite; -import de.steamwar.misslewars.commands.CommandSpectate; +import de.steamwar.misslewars.commands.AcceptCommand; +import de.steamwar.misslewars.commands.DeclineCommand; +import de.steamwar.misslewars.commands.InviteCommand; +import de.steamwar.misslewars.commands.SpectateCommand; import de.steamwar.misslewars.countdowns.EndCountdown; import de.steamwar.misslewars.countdowns.ItemCountdown; import de.steamwar.misslewars.countdowns.WaitingCountdown; @@ -73,15 +74,12 @@ public class MissileWars extends JavaPlugin { new WaitingListener(); new FightListener(); new ChatListener(); - getCommand("spectate").setExecutor(new CommandSpectate()); + new SpectateCommand(); // Invitation Commands - CommandInvite commandInvite = new CommandInvite(); - getCommand("invite").setExecutor(commandInvite); - getCommand("invite").setTabCompleter(commandInvite); - - getCommand("accept").setExecutor(new CommandAcceptDecline()); - getCommand("decline").setExecutor(new CommandAcceptDecline()); + new InviteCommand(); + new AcceptCommand(); + new DeclineCommand(); new WaitingCountdown(); new ItemCountdown(); diff --git a/src/de/steamwar/misslewars/commands/CommandAcceptDecline.java b/src/de/steamwar/misslewars/commands/AcceptCommand.java similarity index 63% rename from src/de/steamwar/misslewars/commands/CommandAcceptDecline.java rename to src/de/steamwar/misslewars/commands/AcceptCommand.java index 2245310..db34a53 100644 --- a/src/de/steamwar/misslewars/commands/CommandAcceptDecline.java +++ b/src/de/steamwar/misslewars/commands/AcceptCommand.java @@ -2,7 +2,7 @@ * * This file is a part of the SteamWar software. * - * Copyright (C) 2020 SteamWar.de-Serverteam + * Copyright (C) 2023 SteamWar.de-Serverteam * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -16,49 +16,50 @@ * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . - * / */ package de.steamwar.misslewars.commands; +import de.steamwar.command.SWCommand; +import de.steamwar.command.TypeValidator; import de.steamwar.misslewars.Config; import de.steamwar.misslewars.MWTeam; import de.steamwar.misslewars.MissileWars; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -public class CommandAcceptDecline implements CommandExecutor { +public class AcceptCommand extends SWCommand { - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - if (!Config.isChallenge()) { - player.sendMessage("§cDieser Command ist deaktiviert."); - return false; - } + public AcceptCommand() { + super("accept"); + } + @Register + public void onCommand(@Validator Player player, String... varargs) { MWTeam teamInvitation = MissileWars.getInvitation(player); if (teamInvitation == null) { player.sendMessage("§cDu wurdest nicht eingeladen."); - return false; - } - - if (command.getName().equalsIgnoreCase("accept")) { + } else { teamInvitation.acceptInvite(player); message(teamInvitation, "§7Der Spieler §e" + player.getName() + "§7 ist dem Team §abeigetreten§7."); - } else { - MWTeam.removeInvitations(player); - message(teamInvitation, "§7Der Spieler §e" + player.getName() + "§7 hat die Einladung §cabgelehnt§7."); } - return false; + } + + @ClassValidator(value = Player.class, local = true) + public TypeValidator validator() { + return new TypeValidator() { + @Override + public boolean validate(CommandSender commandSender, Player player, MessageSender messageSender) { + if (Config.isChallenge()) { + messageSender.send("§cDieser Command ist deaktiviert."); + return false; + } + return true; + } + }; } private void message(MWTeam mwTeam, String s) { mwTeam.getPlayers().forEach(player -> player.sendMessage(s)); } - } diff --git a/src/de/steamwar/misslewars/commands/CommandInvite.java b/src/de/steamwar/misslewars/commands/CommandInvite.java deleted file mode 100644 index a34b9ed..0000000 --- a/src/de/steamwar/misslewars/commands/CommandInvite.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * - * This file is a part of the SteamWar software. - * - * Copyright (C) 2020 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * / - */ - -package de.steamwar.misslewars.commands; - -import de.steamwar.misslewars.Config; -import de.steamwar.misslewars.MWTeam; -import de.steamwar.misslewars.MissileWars; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class CommandInvite implements CommandExecutor, TabCompleter { - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - if (!Config.isChallenge()) { - player.sendMessage("§cDieser Command ist deaktiviert."); - return false; - } - - MWTeam team = MissileWars.getTeam(player); - if (!Config.RedLeader.equals(player.getUniqueId()) && !Config.BlueLeader.equals(player.getUniqueId()) || team == null) { - player.sendMessage("§cDu kannst keine Spieler einladen."); - return false; - } - - if (args.length != 1) { - player.sendMessage("§c/invite "); - return false; - } - - Player invitedPlayer = Bukkit.getPlayer(args[0]); - if (invitedPlayer == null) { - player.sendMessage("§cDieser Spieler ist nicht online."); - return false; - } - if (MissileWars.getTeam(invitedPlayer) != null) { - player.sendMessage("§cDieser Spieler ist bereits in einem Team."); - return false; - } - if (MissileWars.getInvitation(invitedPlayer) != null) { - player.sendMessage("§cDieser Spieler wurde bereits eingeladen."); - return false; - } - - team.invitePlayer(invitedPlayer); - player.sendMessage("§7Du hast §e" + invitedPlayer.getName() + " §7eingeladen."); - invitedPlayer.sendMessage("§7Du wurdest von §e" + player.getName() + "§7 in das Team §e" + MissileWars.getTeam(player).getColoredName() + "§7 eingeladen."); - invitedPlayer.sendMessage("§8/§eaccept §8- §7Zum akzeptieren."); - invitedPlayer.sendMessage("§8/§edecline §8- §7Zum ablehnen."); - return false; - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - if (args.length == 1) { - return Bukkit.getOnlinePlayers() - .stream() - .filter(p -> MissileWars.getTeam(p) != null) - .filter(p -> MissileWars.getInvitation(p) != null) - .map(Player::getName) - .collect(Collectors.toList()); - } - return new ArrayList<>(); - } - -} diff --git a/src/de/steamwar/misslewars/commands/CommandSpectate.java b/src/de/steamwar/misslewars/commands/CommandSpectate.java deleted file mode 100644 index 4a8c1f2..0000000 --- a/src/de/steamwar/misslewars/commands/CommandSpectate.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2020 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -package de.steamwar.misslewars.commands; - -import de.steamwar.misslewars.Config; -import de.steamwar.misslewars.MWTeam; -import de.steamwar.misslewars.MissileWars; -import org.bukkit.GameMode; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class CommandSpectate implements CommandExecutor { - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (!(sender instanceof Player)) return false; - Player player = (Player) sender; - if (Config.isChallenge()) { - player.sendMessage("§cDieser Command ist deaktiviert."); - return false; - } - - MWTeam mwTeam = MissileWars.getTeam(player); - if (mwTeam == null) return false; - if (mwTeam.size() == 1) { - player.sendMessage("§cDu bist alleine im Team, zuschauen ist daher nicht möglich."); - return false; - } - MissileWars.leave(player); - player.setGameMode(GameMode.SPECTATOR); - player.getInventory().clear(); - player.updateInventory(); - return true; - } - -} diff --git a/src/de/steamwar/misslewars/commands/DeclineCommand.java b/src/de/steamwar/misslewars/commands/DeclineCommand.java new file mode 100644 index 0000000..0041788 --- /dev/null +++ b/src/de/steamwar/misslewars/commands/DeclineCommand.java @@ -0,0 +1,65 @@ +/* + * + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.misslewars.commands; + +import de.steamwar.command.SWCommand; +import de.steamwar.command.TypeValidator; +import de.steamwar.misslewars.Config; +import de.steamwar.misslewars.MWTeam; +import de.steamwar.misslewars.MissileWars; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DeclineCommand extends SWCommand { + + public DeclineCommand() { + super("decline"); + } + + @Register + public void onCommand(@Validator Player player, String... varargs) { + MWTeam teamInvitation = MissileWars.getInvitation(player); + if (teamInvitation == null) { + player.sendMessage("§cDu wurdest nicht eingeladen."); + } else { + MWTeam.removeInvitations(player); + message(teamInvitation, "§7Der Spieler §e" + player.getName() + "§7 hat die Einladung §cabgelehnt§7."); + } + } + + @ClassValidator(value = Player.class, local = true) + public TypeValidator validator() { + return new TypeValidator() { + @Override + public boolean validate(CommandSender commandSender, Player player, MessageSender messageSender) { + if (!Config.isChallenge()) { + messageSender.send("§cDieser Command ist deaktiviert."); + return false; + } + return true; + } + }; + } + + private void message(MWTeam mwTeam, String s) { + mwTeam.getPlayers().forEach(player -> player.sendMessage(s)); + } +} diff --git a/src/de/steamwar/misslewars/commands/InviteCommand.java b/src/de/steamwar/misslewars/commands/InviteCommand.java new file mode 100644 index 0000000..52e3af1 --- /dev/null +++ b/src/de/steamwar/misslewars/commands/InviteCommand.java @@ -0,0 +1,101 @@ +/* + * + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.misslewars.commands; + +import de.steamwar.command.PreviousArguments; +import de.steamwar.command.SWCommand; +import de.steamwar.command.TypeMapper; +import de.steamwar.command.TypeValidator; +import de.steamwar.misslewars.Config; +import de.steamwar.misslewars.MWTeam; +import de.steamwar.misslewars.MissileWars; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Collection; +import java.util.stream.Collectors; + +public class InviteCommand extends SWCommand { + + public InviteCommand() { + super("invite", "inv"); + } + + @Register + public void onCommand(@Validator Player player, @AllowNull @OptionalValue("") Player invitedPlayer) { + MWTeam team = MissileWars.getTeam(player); + + if (!Config.RedLeader.equals(player.getUniqueId()) && !Config.BlueLeader.equals(player.getUniqueId()) || team == null) { + player.sendMessage("§cDu kannst keine Spieler einladen."); + } else if (invitedPlayer == null) { + player.sendMessage("§cDieser Spieler ist nicht online."); + } else if (MissileWars.getTeam(invitedPlayer) != null) { + player.sendMessage("§cDieser Spieler ist bereits in einem Team."); + } else if (MissileWars.getInvitation(invitedPlayer) != null) { + player.sendMessage("§cDieser Spieler wurde bereits eingeladen."); + } else { + team.invitePlayer(invitedPlayer); + player.sendMessage("§7Du hast §e" + invitedPlayer.getName() + " §7eingeladen."); + invitedPlayer.sendMessage("§7Du wurdest von §e" + player.getName() + "§7 in das Team §e" + MissileWars.getTeam(player).getColoredName() + "§7 eingeladen."); + invitedPlayer.sendMessage("§8/§eaccept §8- §7Zum akzeptieren."); + invitedPlayer.sendMessage("§8/§edecline §8- §7Zum ablehnen."); + } + } + + @ClassMapper(value = Player.class, local = true) + public TypeMapper typeMapper() { + return new TypeMapper() { + @Override + public Player map(CommandSender commandSender, String[] previousArguments, String s) { + return Bukkit.getPlayer(s); + } + + @Override + public Collection tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) { + return Bukkit.getOnlinePlayers() + .stream() + .filter(p -> MissileWars.getTeam(p) != null) + .filter(p -> MissileWars.getInvitation(p) != null) + .map(Player::getName) + .collect(Collectors.toList()); + } + }; + } + + @ClassValidator(value = Player.class, local = true) + public TypeValidator validator() { + return new TypeValidator() { + @Override + public boolean validate(CommandSender commandSender, Player player, MessageSender messageSender) { + if (Config.isChallenge()) { + messageSender.send("§cDieser Command ist deaktiviert."); + return false; + } + return true; + } + }; + } + + private void message(MWTeam mwTeam, String s) { + mwTeam.getPlayers().forEach(player -> player.sendMessage(s)); + } +} diff --git a/src/de/steamwar/misslewars/commands/SpectateCommand.java b/src/de/steamwar/misslewars/commands/SpectateCommand.java new file mode 100644 index 0000000..1fdbc6b --- /dev/null +++ b/src/de/steamwar/misslewars/commands/SpectateCommand.java @@ -0,0 +1,64 @@ +/* + * + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.misslewars.commands; + +import de.steamwar.command.SWCommand; +import de.steamwar.command.TypeValidator; +import de.steamwar.misslewars.Config; +import de.steamwar.misslewars.MWTeam; +import de.steamwar.misslewars.MissileWars; +import org.bukkit.GameMode; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SpectateCommand extends SWCommand { + + public SpectateCommand() { + super("spectate", "spec"); + } + + @Register + public void onCommand(@Validator Player player) { + MWTeam mwTeam = MissileWars.getTeam(player); + if (mwTeam == null) return; + if (mwTeam.size() == 1) { + player.sendMessage("§cDu bist alleine im Team, zuschauen ist daher nicht möglich."); + } + MissileWars.leave(player); + player.setGameMode(GameMode.SPECTATOR); + player.getInventory().clear(); + player.updateInventory(); + } + + @ClassValidator(value = Player.class, local = true) + public TypeValidator validator() { + return new TypeValidator() { + @Override + public boolean validate(CommandSender commandSender, Player player, MessageSender messageSender) { + if (Config.isChallenge()) { + messageSender.send("§cDieser Command ist deaktiviert."); + return false; + } + return true; + } + }; + } +}