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/AcceptCommand.java b/src/de/steamwar/misslewars/commands/AcceptCommand.java
index b411460..db34a53 100644
--- a/src/de/steamwar/misslewars/commands/AcceptCommand.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,20 +16,20 @@
*
* 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 de.steamwar.command.SWCommand;
-import de.steamwar.command.TypeValidator;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class AcceptCommand extends SWCommand {
+
public AcceptCommand() {
super("accept");
}
@@ -39,8 +39,7 @@ public class AcceptCommand extends SWCommand {
MWTeam teamInvitation = MissileWars.getInvitation(player);
if (teamInvitation == null) {
player.sendMessage("§cDu wurdest nicht eingeladen.");
- }
- else {
+ } else {
teamInvitation.acceptInvite(player);
message(teamInvitation, "§7Der Spieler §e" + player.getName() + "§7 ist dem Team §abeigetreten§7.");
}
diff --git a/src/de/steamwar/misslewars/commands/CommandAcceptDecline.java b/src/de/steamwar/misslewars/commands/CommandAcceptDecline.java
deleted file mode 100644
index 2245310..0000000
--- a/src/de/steamwar/misslewars/commands/CommandAcceptDecline.java
+++ /dev/null
@@ -1,64 +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.entity.Player;
-
-public class CommandAcceptDecline 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 teamInvitation = MissileWars.getInvitation(player);
- if (teamInvitation == null) {
- player.sendMessage("§cDu wurdest nicht eingeladen.");
- return false;
- }
-
- if (command.getName().equalsIgnoreCase("accept")) {
- 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;
- }
-
- 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
index a667c80..0041788 100644
--- a/src/de/steamwar/misslewars/commands/DeclineCommand.java
+++ b/src/de/steamwar/misslewars/commands/DeclineCommand.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,21 +16,20 @@
*
* 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 de.steamwar.command.SWCommand;
-import de.steamwar.command.TypeValidator;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-
public class DeclineCommand extends SWCommand {
+
public DeclineCommand() {
super("decline");
}
@@ -40,8 +39,7 @@ public class DeclineCommand extends SWCommand {
MWTeam teamInvitation = MissileWars.getInvitation(player);
if (teamInvitation == null) {
player.sendMessage("§cDu wurdest nicht eingeladen.");
- }
- else {
+ } else {
MWTeam.removeInvitations(player);
message(teamInvitation, "§7Der Spieler §e" + player.getName() + "§7 hat die Einladung §cabgelehnt§7.");
}
@@ -64,5 +62,4 @@ public class DeclineCommand extends SWCommand {
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
index a6b22f3..52e3af1 100644
--- a/src/de/steamwar/misslewars/commands/InviteCommand.java
+++ b/src/de/steamwar/misslewars/commands/InviteCommand.java
@@ -1,43 +1,58 @@
+/*
+ *
+ * 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.Command;
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.Collection;
import java.util.stream.Collectors;
-public class InviteCommand extends SWCommand implements TabCompleter {
+public class InviteCommand extends SWCommand {
public InviteCommand() {
super("invite", "inv");
}
@Register
- public void onCommand(@Validator Player player, String playerName, String... varargs) {
+ public void onCommand(@Validator Player player, @AllowNull @OptionalValue("") Player invitedPlayer) {
MWTeam team = MissileWars.getTeam(player);
- Player invitedPlayer = Bukkit.getPlayer(playerName);
+
if (!Config.RedLeader.equals(player.getUniqueId()) && !Config.BlueLeader.equals(player.getUniqueId()) || team == null) {
player.sendMessage("§cDu kannst keine Spieler einladen.");
- }
- else if (invitedPlayer == null) {
+ } else if (invitedPlayer == null) {
player.sendMessage("§cDieser Spieler ist nicht online.");
- }
- else if (MissileWars.getTeam(invitedPlayer) != null) {
+ } else if (MissileWars.getTeam(invitedPlayer) != null) {
player.sendMessage("§cDieser Spieler ist bereits in einem Team.");
- }
- else if (MissileWars.getInvitation(invitedPlayer) != null) {
+ } else if (MissileWars.getInvitation(invitedPlayer) != null) {
player.sendMessage("§cDieser Spieler wurde bereits eingeladen.");
- }
- else {
+ } 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.");
@@ -46,17 +61,24 @@ public class InviteCommand extends SWCommand implements TabCompleter {
}
}
- @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<>();
+ @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)
diff --git a/src/de/steamwar/misslewars/commands/SpectateCommand.java b/src/de/steamwar/misslewars/commands/SpectateCommand.java
index 07b0763..1fdbc6b 100644
--- a/src/de/steamwar/misslewars/commands/SpectateCommand.java
+++ b/src/de/steamwar/misslewars/commands/SpectateCommand.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,28 +16,27 @@
*
* 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 de.steamwar.command.SWCommand;
-import de.steamwar.command.TypeValidator;
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, String... varargs) {
+ public void onCommand(@Validator Player player) {
MWTeam mwTeam = MissileWars.getTeam(player);
if (mwTeam == null) return;
if (mwTeam.size() == 1) {