Browse Source

Reworking Command System

RedstoneFuture 2 years ago
parent
commit
1e1515d523

+ 2 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/MissileWars.java

@@ -20,6 +20,7 @@ package de.butzlabben.missilewars;
 
 import co.aikar.commands.PaperCommandManager;
 import de.butzlabben.missilewars.commands.MWCommands;
+import de.butzlabben.missilewars.commands.SetupCommands;
 import de.butzlabben.missilewars.commands.StatsCommands;
 import de.butzlabben.missilewars.commands.UserCommands;
 import de.butzlabben.missilewars.configuration.Config;
@@ -167,7 +168,7 @@ public class MissileWars extends JavaPlugin {
         manager.registerCommand(new MWCommands());
         manager.registerCommand(new StatsCommands());
         manager.registerCommand(new UserCommands());
-        //manager.registerCommand(new SetupCommands());
+        manager.registerCommand(new SetupCommands());
     }
 
     /**

+ 118 - 73
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/MWCommands.java

@@ -23,24 +23,21 @@ import co.aikar.commands.annotation.*;
 import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.configuration.Config;
-import de.butzlabben.missilewars.configuration.Lobby;
 import de.butzlabben.missilewars.configuration.Messages;
 import de.butzlabben.missilewars.configuration.arena.Arena;
 import de.butzlabben.missilewars.game.Arenas;
 import de.butzlabben.missilewars.game.Game;
 import de.butzlabben.missilewars.game.GameManager;
+import de.butzlabben.missilewars.game.enums.GameResult;
 import de.butzlabben.missilewars.game.enums.GameState;
 import de.butzlabben.missilewars.game.enums.MapChooseProcedure;
 import de.butzlabben.missilewars.game.missile.Missile;
 import de.butzlabben.missilewars.game.missile.MissileFacing;
-import org.bukkit.Bukkit;
 import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 @CommandAlias("mw|missilewars")
 public class MWCommands extends BaseCommand {
@@ -58,7 +55,7 @@ public class MWCommands extends BaseCommand {
         if (sender.hasPermission("mw.stop"))
             sender.sendMessage(Messages.getPrefix() + "/mw stop - Stops the game");
         if (sender.hasPermission("mw.restart"))
-            sender.sendMessage(Messages.getPrefix() + "/mw start - Restarts the game");
+            sender.sendMessage(Messages.getPrefix() + "/mw restart - Restarts the game");
         if (sender.hasPermission("mw.appendrestart"))
             sender.sendMessage(Messages.getPrefix()
                     + "/mw appendrestart - Appends a restart after the next game ends");
@@ -76,6 +73,28 @@ public class MWCommands extends BaseCommand {
             sender.sendMessage(Messages.getPrefix() + "/mw stats list - Lists history of games");
     }
 
+    @Subcommand("listgames|list|games")
+    @Description("List the active games.")
+    @Syntax("/mw listgames")
+    @CommandCompletion("@nothing")
+    @CommandPermission("mw.listgames")
+    public void listgamesCommand(CommandSender sender, String[] args) {
+        
+        sender.sendMessage(Messages.getPrefix() + "Current games:");
+        
+        for (Game game : GameManager.getInstance().getGames().values()) {
+            sender.sendMessage("§e " + game.getLobby().getName() + "§7 -- Name: »" + game.getLobby().getDisplayName() + "§7« | Status: " + game.getState());
+            sender.sendMessage("§8 - §f" + "Load with startup: §7" + game.getLobby().isAutoLoad());
+            sender.sendMessage("§8 - §f" + "Current Arena: §7" + game.getArena().getName() + "§7 -- Name: »" + game.getArena().getDisplayName() + "§7«");
+            sender.sendMessage("§8 - §f" + "Total players: §7" + game.getPlayers().size() + "x");
+            sender.sendMessage("§8 - §f" + "Team 1: §7" + game.getTeam1().getColor() + game.getTeam1().getName() 
+                    + " §7with " + game.getTeam1().getMembers().size() + " players");
+            sender.sendMessage("§8 - §f" + "Team 2: §7" + game.getTeam2().getColor() + game.getTeam2().getName()
+                    + " §7with " + game.getTeam2().getMembers().size() + " players");
+        }
+        
+    }
+    
     @Subcommand("paste")
     @Description("Pastes a missile.")
     @Syntax("/mw paste <missile>")
@@ -85,21 +104,31 @@ public class MWCommands extends BaseCommand {
 
         if (!senderIsPlayer(sender)) return;
         Player player = (Player) sender;
+        
+        if (args.length < 1) {
+            player.sendMessage(Messages.getPrefix() + "§cMissile needed.");
+            return;
+        }
+        
+        if (args.length > 1) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
 
         Game game = GameManager.getInstance().getGame(player.getLocation());
         if (game == null) {
             player.sendMessage(Messages.getMessage("not_in_arena"));
             return;
         }
-
-        String arguments = getAllNextArgumentsAsString(args, false);
-        Missile m = game.getArena().getMissileConfiguration().getMissileFromName(arguments.trim());
-        if (m == null) {
-            player.sendMessage(Messages.getPrefix() + "§cUnknown missile");
+        
+        Missile missile = game.getArena().getMissileConfiguration().getMissileFromName(args[0]);
+        if (missile == null) {
+            player.sendMessage(Messages.getPrefix() + "§cUnknown missile.");
             return;
         }
-        MissileFacing mf = MissileFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration());
-        m.paste(player, mf, game);
+        
+        MissileFacing missileFacing = MissileFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration());
+        missile.paste(player, missileFacing, game);
     }
 
     @Subcommand("start")
@@ -112,16 +141,22 @@ public class MWCommands extends BaseCommand {
         if (!senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+
         Game game = GameManager.getInstance().getGame(player.getLocation());
         if (game == null) {
             player.sendMessage(Messages.getMessage("not_in_arena"));
             return;
         }
-
+        
         if (game.getState() != GameState.LOBBY) {
             player.sendMessage(Messages.getPrefix() + "§cGame already started");
             return;
         }
+        
         if (game.isReady())
             game.startGame();
         else {
@@ -147,7 +182,7 @@ public class MWCommands extends BaseCommand {
 
     @Subcommand("stop")
     @Description("Stops the game.")
-    @Syntax("/mw stop")
+    @Syntax("/mw stop [lobby]")
     @CommandCompletion("@nothing")
     @CommandPermission("mw.stop")
     public void stopCommand(CommandSender sender, String[] args) {
@@ -155,48 +190,52 @@ public class MWCommands extends BaseCommand {
         if (!senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
-        Game game = GameManager.getInstance().getGame(player.getLocation());
-        if (game == null) {
-            player.sendMessage(Messages.getMessage("not_in_arena"));
+        if (args.length > 1) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
             return;
         }
-
-        // TODO more arguments to get "game.sendGameResult();"
-        Bukkit.getScheduler().runTask(MissileWars.getInstance(), () -> {
-            if (game.getState() == GameState.INGAME) game.stopGame();
-        });
+        
+        Game game;
+        if (args.length == 1) {
+            game = GameManager.getInstance().getGame(args[0]);
+            if (game == null) {
+                player.sendMessage(Messages.getPrefix() + "§cGame not found.");
+                return;
+            }
+        } else {
+            game = GameManager.getInstance().getGame(player.getLocation());
+            if (game == null) {
+                player.sendMessage(Messages.getMessage("not_in_arena"));
+                return;
+            }
+        }
+        
+        game.getTeam1().setGameResult(GameResult.DRAW);
+        game.getTeam2().setGameResult(GameResult.DRAW);
+        if (game.getState() == GameState.INGAME) game.stopGame();
     }
-
-    @Subcommand("restart")
-    @Description("Restarts the game.")
-    @Syntax("/mw restart")
+    
+    @Subcommand("appendrestart")
+    @Description("Appends a restart after the next game ends.")
+    @Syntax("/mw appendrestart")
     @CommandCompletion("@nothing")
-    @CommandPermission("mw.restart")
-    public void restartCommand(CommandSender sender, String[] args) {
+    @CommandPermission("mw.appendrestart")
+    public void appendrestartCommand(CommandSender sender, String[] args) {
 
         if (!senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
-        Game game = GameManager.getInstance().getGame(player.getLocation());
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
 
+        Game game = GameManager.getInstance().getGame(player.getLocation());
         if (game == null) {
             player.sendMessage(Messages.getMessage("not_in_arena"));
             return;
         }
-
-        Bukkit.getScheduler().runTask(MissileWars.getInstance(), () -> {
-            if (game.getState() == GameState.INGAME) game.stopGame();
-            game.reset();
-        });
-    }
-
-    @Subcommand("appendrestart")
-    @Description("Appends a restart after the next game ends.")
-    @Syntax("/mw appendrestart")
-    @CommandCompletion("@nothing")
-    @CommandPermission("mw.appendrestart")
-    public void appendRestartCommand(CommandSender sender, String[] args) {
-
+        
         GameManager.getInstance().getGames().values().forEach(Game::appendRestart);
         sender.sendMessage(Messages.getMessage("restart_after_game"));
     }
@@ -206,8 +245,16 @@ public class MWCommands extends BaseCommand {
     @Syntax("/mw reload")
     @CommandCompletion("@nothing")
     @CommandPermission("mw.reload")
-    public void onReload(CommandSender sender, String[] args) {
+    public void reloadCommand(CommandSender sender, String[] args) {
 
+        if (!senderIsPlayer(sender)) return;
+        Player player = (Player) sender;
+
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+        
         Config.load();
         Messages.load();
         Arenas.load();
@@ -219,8 +266,16 @@ public class MWCommands extends BaseCommand {
     @Syntax("/mw debug")
     @CommandCompletion("@nothing")
     @CommandPermission("mw.debug")
-    public void onDebug(CommandSender sender, String[] args) {
+    public void debugCommand(CommandSender sender, String[] args) {
+
+        if (!senderIsPlayer(sender)) return;
+        Player player = (Player) sender;
 
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+        
         int i = 0;
         Logger.NORMAL.log("Starting to print debug information for MissileWars v" + MissileWars.getInstance().version);
         for (Game game : GameManager.getInstance().getGames().values()) {
@@ -235,41 +290,31 @@ public class MWCommands extends BaseCommand {
     @Syntax("/mw restartall")
     @CommandCompletion("@nothing")
     @CommandPermission("mw.reload")
-    public void onRestartAll(CommandSender sender, String[] args) {
+    public void restartallCommand(CommandSender sender, String[] args) {
+
+        if (!senderIsPlayer(sender)) return;
+        Player player = (Player) sender;
+
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+
+        Game game = GameManager.getInstance().getGame(player.getLocation());
+        if (game == null) {
+            player.sendMessage(Messages.getMessage("not_in_arena"));
+            return;
+        }
 
         sender.sendMessage(Messages.getPrefix() + "§cWarning - Restarting all games. This may take a while");
-        List<Lobby> arenaPropertiesList = GameManager.getInstance().getGames().values()
-                .stream().map(Game::getLobby).collect(Collectors.toList());
-        arenaPropertiesList.forEach(GameManager.getInstance()::restartGame);
+        GameManager.getInstance().restartAll();
         sender.sendMessage(Messages.getPrefix() + "Reloaded configs");
     }
-
-    private boolean senderIsPlayer(CommandSender sender) {
+    
+    static boolean senderIsPlayer(CommandSender sender) {
         if (sender instanceof Player) return true;
 
         sender.sendMessage(Messages.getPrefix() + "§cYou are not a player");
         return false;
     }
-
-    /**
-     * This method returns all next command arguments as one String line.
-     * Separated with a " " between the arguments. It also removes all
-     * unnecessary "&" signs.
-     *
-     * @param args Argument Array
-     * @return (String) all next arguments
-     */
-    private String getAllNextArgumentsAsString(String[] args, boolean filterColorCode) {
-        StringBuilder sb = new StringBuilder();
-        String arguments;
-
-        for (int i = 0; i < args.length; i++) {
-            sb.append(" ");
-        }
-        arguments = sb.toString();
-
-        if (filterColorCode) arguments.replaceAll("&.", "");
-
-        return arguments;
-    }
 }

+ 277 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/SetupCommands.java

@@ -0,0 +1,277 @@
+/*
+ * This file is part of MissileWars (https://github.com/Butzlabben/missilewars).
+ * Copyright (c) 2018-2021 Daniel Nägele.
+ *
+ * MissileWars is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MissileWars 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MissileWars.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package de.butzlabben.missilewars.commands;
+
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.*;
+import de.butzlabben.missilewars.configuration.Config;
+import de.butzlabben.missilewars.configuration.Messages;
+import de.butzlabben.missilewars.game.Game;
+import de.butzlabben.missilewars.game.GameManager;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+@CommandAlias("mw|missilewars")
+@Subcommand("setup")
+public class SetupCommands extends BaseCommand {
+
+    private Game game;
+    private Player player;
+
+    @Default
+    @Description("Setup the game lobby and game area.")
+    @Syntax("/mw stats <main|lobby|area>")
+    @CommandPermission("mw.setup")
+    public void setupCommands(CommandSender sender, String[] args) {
+        sender.sendMessage(Messages.getPrefix() + "§fSetup usage: §7/mw stats <main|lobby|area>");
+    }
+
+    @Subcommand("main")
+    @Description("Main Setup")
+    public class mainSetupCommands extends BaseCommand {
+
+        @Subcommand("fallbackspawn")
+        public class fallbackspawnSetup extends BaseCommand {
+
+            @Subcommand("set")
+            public void set(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                
+                Config.setFallbackSpawn(player.getLocation());
+                player.sendMessage(Messages.getPrefix() + "§fSet new 'fallbackSpawn' to " + player.getLocation() + ".");
+            }
+
+            @Subcommand("teleport|tp")
+            public void teleport(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                
+                player.teleport(Config.getFallbackSpawn());
+                player.sendMessage(Messages.getPrefix() + "§fTeleported to 'fallbackSpawn'.");
+            }
+
+        }
+    }
+    
+    @Subcommand("lobby")
+    @Description("Setup the lobby")
+    public class lobbySetupCommands extends BaseCommand {
+
+        @Subcommand("spawnpoint")
+        public class spawnpointSetup extends BaseCommand {
+            
+            @Subcommand("set")
+            public void set(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                game.getLobby().setSpawnPoint(player.getLocation());
+                player.sendMessage(Messages.getPrefix() + "§fSet new 'spawnPoint' to " + player.getLocation() + ".");
+            }
+
+            @Subcommand("teleport|tp")
+            public void teleport(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                player.teleport(game.getLobby().getSpawnPoint());
+                player.sendMessage(Messages.getPrefix() + "§fTeleported to 'spawnPoint'.");
+            }
+            
+        }
+
+        @Subcommand("aftergamespawn")
+        public class aftergamespawnSetup extends BaseCommand {
+
+            @Subcommand("set")
+            public void set(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                game.getLobby().setAfterGameSpawn(player.getLocation());
+                player.sendMessage(Messages.getPrefix() + "§fSet new 'afterGameSpawn' to " + player.getLocation() + ".");
+            }
+
+            @Subcommand("teleport|tp")
+            public void teleport(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                player.teleport(game.getLobby().getAfterGameSpawn());
+                player.sendMessage(Messages.getPrefix() + "§fTeleported to 'afterGameSpawn'.");
+            }
+
+        }
+
+        @Subcommand("area")
+        public class areaSetup extends BaseCommand {
+
+            @Subcommand("set")
+            public class set extends BaseCommand {
+
+                @Subcommand("pos1")
+                public void pos1(CommandSender sender, String[] args) {
+                    if (!senderIsPlayer(sender)) return;
+                    if (!isValidGame()) return;
+
+                    game.getLobby().setAfterGameSpawn(player.getLocation());
+                    player.sendMessage(Messages.getPrefix() + "§fSet new 'afterGameSpawn' to " + player.getLocation() + ".");
+                }
+
+                @Subcommand("pos2")
+                public void pos2(CommandSender sender, String[] args) {
+                    if (!senderIsPlayer(sender)) return;
+                    if (!isValidGame()) return;
+
+                    game.getLobby().setAfterGameSpawn(player.getLocation());
+                    player.sendMessage(Messages.getPrefix() + "§fSet new 'afterGameSpawn' to " + player.getLocation() + ".");
+                }
+                
+            }
+
+            @Subcommand("teleport|tp")
+            public class teleport extends BaseCommand {
+
+                @Subcommand("pos1")
+                public void pos1(CommandSender sender, String[] args) {
+                    if (!senderIsPlayer(sender)) return;
+                    if (!isValidGame()) return;
+
+                    game.getLobby().setAfterGameSpawn(player.getLocation());
+                    player.sendMessage(Messages.getPrefix() + "§fSet new 'afterGameSpawn' to " + player.getLocation() + ".");
+                }
+
+                @Subcommand("pos2")
+                public void pos2(CommandSender sender, String[] args) {
+                    if (!senderIsPlayer(sender)) return;
+                    if (!isValidGame()) return;
+
+                    game.getLobby().setAfterGameSpawn(player.getLocation());
+                    player.sendMessage(Messages.getPrefix() + "§fSet new 'afterGameSpawn' to " + player.getLocation() + ".");
+                }
+                
+            }
+        }
+    }
+
+    @Subcommand("arena")
+    @Description("Setup the arena")
+    public class arenaSetupCommands extends BaseCommand {
+
+        @Subcommand("spectatorspawn")
+        public class spectatorspawnSetup extends BaseCommand {
+
+            @Subcommand("set")
+            public void set(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                game.getArena().setSpectatorSpawn(player.getLocation());
+                player.sendMessage(Messages.getPrefix() + "§fSet new 'spectatorSpawn' to " + player.getLocation() + ".");
+            }
+
+            @Subcommand("teleport|tp")
+            public void teleport(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                player.teleport(game.getArena().getSpectatorSpawn());
+                player.sendMessage(Messages.getPrefix() + "§fTeleported to 'spectatorSpawn'.");
+            }
+
+        }
+
+        @Subcommand("team1spawn")
+        public class team1spawnSetup extends BaseCommand {
+
+            @Subcommand("set")
+            public void set(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                game.getArena().setTeam1Spawn(player.getLocation());
+                player.sendMessage(Messages.getPrefix() + "§fSet new 'team1Spawn' to " + player.getLocation() + ".");
+            }
+
+            @Subcommand("teleport|tp")
+            public void teleport(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                player.teleport(game.getArena().getTeam1Spawn());
+                player.sendMessage(Messages.getPrefix() + "§fTeleported to 'team1Spawn'.");
+            }
+
+        }
+
+        @Subcommand("team2spawn")
+        public class team2spawnSetup extends BaseCommand {
+
+            @Subcommand("set")
+            public void set(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                game.getArena().setTeam2Spawn(player.getLocation());
+                player.sendMessage(Messages.getPrefix() + "§fSet new 'team2Spawn' to " + player.getLocation() + ".");
+            }
+
+            @Subcommand("teleport|tp")
+            public void teleport(CommandSender sender, String[] args) {
+                if (!senderIsPlayer(sender)) return;
+                if (!isValidGame()) return;
+
+                player.teleport(game.getArena().getTeam2Spawn());
+                player.sendMessage(Messages.getPrefix() + "§fTeleported to 'team2Spawn'.");
+            }
+
+        }
+    }
+    
+    /**
+     * This method checks if the command sender is a valid ingame player.
+     * 
+     * @param sender = the command sender
+     * @return true, if it's an ingame player
+     */
+    private boolean senderIsPlayer(CommandSender sender) {
+        if (sender instanceof Player) {
+            player = (Player) sender;
+            return true;
+        }
+        
+        sender.sendMessage(Messages.getPrefix() + "§cYou are not a player");
+        return false;
+    }
+
+    /**
+     * This method checks if the player execute the command on a valid
+     * game world (lobby or area).
+     *
+     * @return true, if it's a MissileWars game world
+     */
+    private boolean isValidGame() {
+        game = GameManager.getInstance().getGame(player.getLocation());
+
+        if (game != null) return true;
+
+        player.sendMessage(Messages.getMessage("not_in_arena"));
+        return false;
+    }
+    
+}

+ 4 - 11
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/StatsCommands.java

@@ -58,7 +58,7 @@ public class StatsCommands extends BaseCommand {
     @CommandPermission("mw.stats")
     public void onStats(CommandSender sender, String[] args) {
 
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
         StatsFetcher fetcher = getFetcher(player, args);
@@ -111,7 +111,7 @@ public class StatsCommands extends BaseCommand {
     @CommandPermission("mw.stats.recommendations")
     public void onRecommendations(CommandSender sender, String[] args) {
 
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
         StatsFetcher fetcher = getFetcher(player, args);
@@ -151,7 +151,7 @@ public class StatsCommands extends BaseCommand {
     @CommandPermission("mw.stats.players")
     public void onPlayers(CommandSender sender, String[] args) {
 
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
         StatsFetcher fetcher = getFetcher(player, args);
@@ -169,7 +169,7 @@ public class StatsCommands extends BaseCommand {
     @CommandPermission("mw.stats.list")
     public void onList(CommandSender sender, String[] args) {
 
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
         StatsFetcher fetcher = getFetcher(player, args);
@@ -213,11 +213,4 @@ public class StatsCommands extends BaseCommand {
         player.sendMessage(Messages.getPrefix() + "Loading data...");
         return fetcher;
     }
-
-    private boolean senderIsPlayer(CommandSender sender) {
-        if (sender instanceof Player) return true;
-
-        sender.sendMessage(Messages.getPrefix() + "§cYou are not a player");
-        return false;
-    }
 }

+ 25 - 37
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/UserCommands.java

@@ -20,7 +20,7 @@ package de.butzlabben.missilewars.commands;
 
 import co.aikar.commands.BaseCommand;
 import co.aikar.commands.annotation.*;
-import de.butzlabben.missilewars.configuration.Config;
+import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.configuration.Messages;
 import de.butzlabben.missilewars.configuration.arena.Arena;
 import de.butzlabben.missilewars.game.Arenas;
@@ -30,7 +30,6 @@ import de.butzlabben.missilewars.game.Team;
 import de.butzlabben.missilewars.game.enums.GameState;
 import de.butzlabben.missilewars.game.enums.MapChooseProcedure;
 import de.butzlabben.missilewars.player.MWPlayer;
-import org.bukkit.Location;
 import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 
@@ -46,9 +45,14 @@ public class UserCommands extends BaseCommand {
     @CommandPermission("mw.change")
     public void changeCommand(CommandSender sender, String[] args) {
 
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+
         Game game = GameManager.getInstance().getGame(player.getLocation());
         if (game == null) {
             player.sendMessage(Messages.getMessage("not_in_arena"));
@@ -59,11 +63,7 @@ public class UserCommands extends BaseCommand {
             player.sendMessage(Messages.getPrefix() + "§cThe game is not in the right state to change your team right now");
             return;
         }
-
-        if (args.length != 1) {
-            player.sendMessage(Messages.getPrefix() + "§c/mw change <1|2>");
-            return;
-        }
+        
         try {
             MWPlayer mwPlayer = game.getPlayer(player);
             int teamNumber = Integer.parseInt(args[0]);
@@ -91,10 +91,14 @@ public class UserCommands extends BaseCommand {
     @CommandPermission("mw.vote")
     public void voteCommand(CommandSender sender, String[] args) {
 
-        // TODO more messageconfig
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+
         Game game = GameManager.getInstance().getGame(player.getLocation());
         if (game == null) {
             player.sendMessage(Messages.getMessage("not_in_arena"));
@@ -115,12 +119,7 @@ public class UserCommands extends BaseCommand {
             player.sendMessage(Messages.getPrefix() + "§cA map was already elected");
             return;
         }
-
-        if (args.length != 1) {
-            player.sendMessage(Messages.getPrefix() + "§c/mw vote <arena>");
-            return;
-        }
-
+        
         String arenaName = args[0];
         Optional<Arena> arena = Arenas.getFromName(arenaName);
         if (!game.getVotes().containsKey(arenaName) || arena.isEmpty()) {
@@ -137,34 +136,23 @@ public class UserCommands extends BaseCommand {
     @Syntax("/mw quit")
     @CommandCompletion("@nothing")
     @CommandPermission("mw.quit")
-    public void onQuit(CommandSender sender, String[] args) {
+    public void quitCommand(CommandSender sender, String[] args) {
 
-        // TODO message config
-        if (!senderIsPlayer(sender)) return;
+        if (!MWCommands.senderIsPlayer(sender)) return;
         Player player = (Player) sender;
 
+        if (args.length > 0) {
+            player.sendMessage(Messages.getPrefix() + "§cToo many arguments.");
+            return;
+        }
+
         Game game = GameManager.getInstance().getGame(player.getLocation());
         if (game == null) {
             player.sendMessage(Messages.getMessage("not_in_arena"));
             return;
         }
-        MWPlayer mwPlayer = game.getPlayer(player);
-        if (mwPlayer == null) {
-            player.sendMessage(Messages.getPrefix() + "§cYou are not a member in this arena. Something went wrong pretty badly :(");
-            return;
-        }
-        Location endSpawn = game.getLobby().getAfterGameSpawn();
-        if (GameManager.getInstance().getGame(endSpawn) != null) {
-            endSpawn = Config.getFallbackSpawn();
-        }
-        player.teleport(endSpawn);
-        player.sendMessage(Messages.getMessage("game_quit"));
-    }
-
-    private boolean senderIsPlayer(CommandSender sender) {
-        if (sender instanceof Player) return true;
-
-        sender.sendMessage(Messages.getPrefix() + "§cYou are not a player");
-        return false;
+        
+        MissileWars.getInstance().getPlayerListener().registerPlayerArenaLeaveEvent(player, game);
+        game.teleportToFallbackSpawn(player);
     }
 }