Skip to content

Commit

Permalink
Merge pull request #66 from RedstoneFuture/Improvements/PasterTabcomp…
Browse files Browse the repository at this point in the history
…letion

Reworking command tab-completion system
  • Loading branch information
daniel-naegele authored Feb 5, 2023
2 parents 7921113 + f0e1258 commit d801e36
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -173,6 +170,8 @@ private void registerCommands() {
// such as Asynchronous Tab Completions.
commandManager = new PaperCommandManager(this);

new MWCommandCompletions(commandManager);

commandManager.registerCommand(new MWCommands());
commandManager.registerCommand(new StatsCommands());
commandManager.registerCommand(new UserCommands());
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public void mwCommand(CommandSender sender) {
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")
Expand All @@ -90,7 +90,7 @@ public void listgamesCommand(CommandSender sender, String[] args) {
}

@Subcommand("paste")
@CommandCompletion("@nothing")
@CommandCompletion("@missiles")
@CommandPermission("mw.paste")
public void pasteCommand(CommandSender sender, String[] args) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,12 @@ public void check() {
}
missiles.removeAll(toRemove);
}

public List<String> getMissileNames() {
List<String> missileNames = new ArrayList<>();
for (Missile missile : missiles) {
missileNames.add(missile.getSchematicName(true));
}
return missileNames;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Getter
public class GameManager {
Expand Down Expand Up @@ -169,8 +167,6 @@ public Game getGame(String name) {

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() {
Expand Down

0 comments on commit d801e36

Please sign in to comment.