Browse Source

Merge pull request #66 from RedstoneFuture/Improvements/PasterTabcompletion

Reworking command tab-completion system
Daniel 2 years ago
parent
commit
d801e36ec7

+ 3 - 4
missilewars-plugin/src/main/java/de/butzlabben/missilewars/MissileWars.java

@@ -19,10 +19,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.commands.*;
 import de.butzlabben.missilewars.configuration.Config;
 import de.butzlabben.missilewars.configuration.Messages;
 import de.butzlabben.missilewars.game.Arenas;
@@ -173,6 +170,8 @@ public class MissileWars extends JavaPlugin {
         // such as Asynchronous Tab Completions.
         commandManager = new PaperCommandManager(this);
 
+        new MWCommandCompletions(commandManager);
+        
         commandManager.registerCommand(new MWCommands());
         commandManager.registerCommand(new StatsCommands());
         commandManager.registerCommand(new UserCommands());

+ 58 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/commands/MWCommandCompletions.java

@@ -0,0 +1,58 @@
+/*
+ * 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.BukkitCommandCompletionContext;
+import co.aikar.commands.CommandCompletions;
+import co.aikar.commands.PaperCommandManager;
+import de.butzlabben.missilewars.game.Game;
+import de.butzlabben.missilewars.game.GameManager;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class MWCommandCompletions {
+
+    private final CommandCompletions<BukkitCommandCompletionContext> commandCompletions;
+
+    public MWCommandCompletions(PaperCommandManager commandManager) {
+        this.commandCompletions = commandManager.getCommandCompletions();
+
+        registerGamesResult();
+        registerMissilesResult();
+    }
+
+    private void registerGamesResult() {
+        commandCompletions.registerCompletion("games", c -> GameManager.getInstance().getGames().keySet());
+    }
+    
+    private void registerMissilesResult() {
+        commandCompletions.registerCompletion("missiles", c -> {
+            CommandSender sender = c.getSender();
+
+            if (!(sender instanceof Player)) return null;
+            Player player = (Player) sender;
+
+            Game game = GameManager.getInstance().getGame(player.getLocation());
+            if (game == null) return null;
+
+            return game.getArena().getMissileConfiguration().getMissileNames();
+        });
+    }
+    
+}

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

@@ -66,7 +66,7 @@ public class MWCommands extends BaseCommand {
         sendHelpMessage(sender, "mw.debug", "/mw debug", "Show debug info.");
         sendHelpMessage(sender, "mw.restartall", "/mw restartall", "Restart all games.");
 
-        sendHelpMessage(sender, "mw.setup", "/mw setup <main|lobby|arena> <value> <set|teleport> [lobby]", "Setup the MW Locations or the lobby/arena locations.");
+        sendHelpMessage(sender, "mw.setup", "/mw setup <main|lobby|arena> <value> <set|teleport> [lobby]", "Setup the MW locations or the lobby/arena locations.");
     }
     
     @Subcommand("listgames|list|games")
@@ -90,7 +90,7 @@ public class MWCommands extends BaseCommand {
     }
 
     @Subcommand("paste")
-    @CommandCompletion("@nothing")
+    @CommandCompletion("@missiles")
     @CommandPermission("mw.paste")
     public void pasteCommand(CommandSender sender, String[] args) {
 

+ 8 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/configuration/arena/MissileConfiguration.java

@@ -89,4 +89,12 @@ public class MissileConfiguration {
         }
         missiles.removeAll(toRemove);
     }
+    
+    public List<String> getMissileNames() {
+        List<String> missileNames = new ArrayList<>();
+        for (Missile missile : missiles) {
+            missileNames.add(missile.getSchematicName(true));
+        }
+        return missileNames;
+    }
 }

+ 0 - 4
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/GameManager.java

@@ -29,9 +29,7 @@ import org.bukkit.Location;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 
 @Getter
 public class GameManager {
@@ -169,8 +167,6 @@ public class GameManager {
 
     public void addGame(String name, Game game) {
         games.put(name, game);
-        List<String> gameNames = new ArrayList<>(games.keySet());
-        MissileWars.getInstance().commandManager.getCommandCompletions().registerCompletion("games", c -> gameNames);
     }
 
     public int getGameAmount() {