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;
+ }
+ };
+ }
+}