diff --git a/server/src/main/java/dev/plex/command/PlexCommand.java b/server/src/main/java/dev/plex/command/PlexCommand.java index 1a6b20c..fd16e44 100644 --- a/server/src/main/java/dev/plex/command/PlexCommand.java +++ b/server/src/main/java/dev/plex/command/PlexCommand.java @@ -1,5 +1,6 @@ package dev.plex.command; +import com.google.common.collect.Lists; import dev.plex.Plex; import dev.plex.cache.DataUtils; import dev.plex.command.annotation.CommandParameters; @@ -14,14 +15,16 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.*; import org.bukkit.entity.Player; +import org.bukkit.util.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.UUID; /** @@ -61,6 +64,7 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC setName(this.params.name()); setLabel(this.params.name()); setDescription(params.description()); + setPermission(this.perms.permission()); setUsage(params.usage().replace("", this.params.name())); if (params.aliases().split(",").length > 0) { @@ -74,7 +78,8 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC { getMap().getKnownCommands().remove(this.getName().toLowerCase()); } - this.getAliases().forEach(s -> { + this.getAliases().forEach(s -> + { if (getMap().getKnownCommands().containsKey(s.toLowerCase())) { getMap().getKnownCommands().remove(s.toLowerCase()); @@ -166,6 +171,17 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return true; } + /*@NotNull + public abstract List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException; + */ + + @NotNull + public List smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + List list = tabComplete(sender, alias, args); + return StringUtil.copyPartialMatches(args[args.length - 1], list, Lists.newArrayList()); + } + /** * Checks if the String given is a matching command * @@ -283,47 +299,6 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return !permission.isEmpty() && player.hasPermission(permission); } -/* *//** - * Checks whether a sender has enough permissions or is high enough a rank - * - * @param sender The player object - * @param rank The rank to check (if the server is using ranks) - * @param permission The permission to check (if the server is using permissions) - * @return true if the sender has enough permissions - * @see Rank - *//* - protected boolean silentCheckPermission(CommandSender sender, Rank rank, String permission) - { - if (!isConsole(sender)) - { - return silentCheckPermission((Player) sender, rank, permission); - } - return true; - } - - *//** - * Checks whether a player has enough permissions or is high enough a rank - * - * @param player The player object - * @param rank The rank to check (if the server is using ranks) - * @param permission The permission to check (if the server is using permissions) - * @return true if the sender has enough permissions - * @see Rank - *//* - protected boolean silentCheckPermission(Player player, Rank rank, String permission) - { - PlexPlayer plexPlayer = getPlexPlayer(player); - if (plugin.getSystem().equalsIgnoreCase("ranks")) - { - return rank.isAtLeast(Rank.ADMIN) ? plexPlayer.isAdminActive() && plexPlayer.getRankFromString().isAtLeast(rank) : plexPlayer.getRankFromString().isAtLeast(rank); - } - else if (plugin.getSystem().equalsIgnoreCase("permissions")) - { - return !permission.isEmpty() && player.hasPermission(permission); - } - return true; - }*/ - /** * Gets the UUID of the sender * diff --git a/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java b/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java index 6e4bad4..8e0d827 100644 --- a/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java +++ b/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java @@ -1,6 +1,5 @@ package dev.plex.command.impl; -import dev.plex.cache.DataUtils; import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; @@ -12,8 +11,6 @@ import dev.plex.util.PlexUtils; import dev.plex.util.minimessage.SafeMiniMessage; import dev.plex.util.redis.MessageUtil; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.bukkit.command.CommandSender; @@ -21,6 +18,8 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; import java.util.UUID; @CommandPermissions(permission = "plex.adminchat", source = RequiredCommandSource.ANY) @@ -58,4 +57,10 @@ public class AdminChatCMD extends PlexCommand MessageUtil.sendStaffChat(sender, SafeMiniMessage.mmDeserialize(message), PlexUtils.adminChat(sender.getName(), prefix, message).toArray(UUID[]::new)); return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/AdminworldCMD.java b/server/src/main/java/dev/plex/command/impl/AdminworldCMD.java index 8019615..4600c5b 100644 --- a/server/src/main/java/dev/plex/command/impl/AdminworldCMD.java +++ b/server/src/main/java/dev/plex/command/impl/AdminworldCMD.java @@ -12,6 +12,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.adminworld", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "adminworld", aliases = "aw", description = "Teleport to the adminworld") public class AdminworldCMD extends PlexCommand @@ -29,4 +32,10 @@ public class AdminworldCMD extends PlexCommand } return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/BanCMD.java b/server/src/main/java/dev/plex/command/impl/BanCMD.java index ceb38a7..62d07ef 100644 --- a/server/src/main/java/dev/plex/command/impl/BanCMD.java +++ b/server/src/main/java/dev/plex/command/impl/BanCMD.java @@ -11,10 +11,10 @@ import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; -import dev.plex.util.*; -//import me.botsko.prism.api.PrismParameters; -//import me.botsko.prism.api.Result; -//import me.botsko.prism.api.actions.PrismProcessType; +import dev.plex.util.BungeeUtil; +import dev.plex.util.PlexLog; +import dev.plex.util.PlexUtils; +import dev.plex.util.TimeUtils; import net.kyori.adventure.text.Component; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; @@ -23,13 +23,10 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Collections; import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; @CommandParameters(name = "ban", usage = "/ [-nrb] [reason] [-nrb]", aliases = "offlineban,gtfo", description = "Bans a player, offline or online") @CommandPermissions(permission = "plex.ban", source = RequiredCommandSource.ANY) @@ -134,6 +131,6 @@ public class BanCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender, "plex.ban") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java b/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java index 1cbe064..d0cd037 100644 --- a/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java +++ b/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java @@ -12,6 +12,11 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.blockedit") @CommandParameters(name = "blockedit", usage = "/ [list | purge | all | ]", aliases = "bedit", description = "Prevent players from modifying blocks") public class BlockEditCMD extends PlexCommand @@ -94,4 +99,20 @@ public class BlockEditCMD extends PlexCommand } return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + if (silentCheckPermission(sender, this.getPermission())) + { + List options = new ArrayList<>(); + if (args.length == 1) + { + options.addAll(Arrays.asList("list", "purge", "all")); + options.addAll(PlexUtils.getPlayerNameList()); + return options; + } + } + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/CommandSpyCMD.java b/server/src/main/java/dev/plex/command/impl/CommandSpyCMD.java index 0e088d4..d0c8f5e 100644 --- a/server/src/main/java/dev/plex/command/impl/CommandSpyCMD.java +++ b/server/src/main/java/dev/plex/command/impl/CommandSpyCMD.java @@ -12,6 +12,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.commandspy", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "commandspy", aliases = "cmdspy", description = "Spy on other player's commands") public class CommandSpyCMD extends PlexCommand @@ -30,4 +33,10 @@ public class CommandSpyCMD extends PlexCommand } return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/ConsoleSayCMD.java b/server/src/main/java/dev/plex/command/impl/ConsoleSayCMD.java index d733168..53747af 100644 --- a/server/src/main/java/dev/plex/command/impl/ConsoleSayCMD.java +++ b/server/src/main/java/dev/plex/command/impl/ConsoleSayCMD.java @@ -12,6 +12,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.consolesay", source = RequiredCommandSource.CONSOLE) @CommandParameters(name = "consolesay", usage = "/ ", description = "Displays a message to everyone", aliases = "csay") public class ConsoleSayCMD extends PlexCommand @@ -27,4 +30,10 @@ public class ConsoleSayCMD extends PlexCommand PlexUtils.broadcast(PlexUtils.messageComponent("consoleSayMessage", sender.getName(), PlexUtils.mmStripColor(StringUtils.join(args, " ")))); return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/EntityWipeCMD.java b/server/src/main/java/dev/plex/command/impl/EntityWipeCMD.java index 1f556f5..56948d8 100644 --- a/server/src/main/java/dev/plex/command/impl/EntityWipeCMD.java +++ b/server/src/main/java/dev/plex/command/impl/EntityWipeCMD.java @@ -108,18 +108,22 @@ public class EntityWipeCMD extends PlexCommand public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - List entities = new ArrayList<>(); - for (World world : Bukkit.getWorlds()) + if (silentCheckPermission(sender, this.getPermission())) { - for (Entity entity : world.getEntities()) + List entities = new ArrayList<>(); + for (World world : Bukkit.getWorlds()) { - if (entity.getType() != EntityType.PLAYER) + for (Entity entity : world.getEntities()) { - entities.add(entity.getType().name()); + if (entity.getType() != EntityType.PLAYER) + { + entities.add(entity.getType().name()); + } } } + return entities.stream().toList(); } - return entities.stream().toList(); + return Collections.emptyList(); } private Integer parseInt(CommandSender sender, String string) diff --git a/server/src/main/java/dev/plex/command/impl/FlatlandsCMD.java b/server/src/main/java/dev/plex/command/impl/FlatlandsCMD.java index 25fe4c9..bc35439 100644 --- a/server/src/main/java/dev/plex/command/impl/FlatlandsCMD.java +++ b/server/src/main/java/dev/plex/command/impl/FlatlandsCMD.java @@ -4,7 +4,6 @@ import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; - import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -13,6 +12,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.flatlands", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "flatlands", description = "Teleport to the flatlands") public class FlatlandsCMD extends PlexCommand @@ -29,4 +31,10 @@ public class FlatlandsCMD extends PlexCommand } return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/FreezeCMD.java b/server/src/main/java/dev/plex/command/impl/FreezeCMD.java index 0d51bd6..f803c81 100644 --- a/server/src/main/java/dev/plex/command/impl/FreezeCMD.java +++ b/server/src/main/java/dev/plex/command/impl/FreezeCMD.java @@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; - import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; import net.kyori.adventure.text.Component; @@ -56,6 +55,6 @@ public class FreezeCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender, "plex.freeze") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/GamemodeCMD.java b/server/src/main/java/dev/plex/command/impl/GamemodeCMD.java index c8afb02..a4d7afa 100644 --- a/server/src/main/java/dev/plex/command/impl/GamemodeCMD.java +++ b/server/src/main/java/dev/plex/command/impl/GamemodeCMD.java @@ -96,7 +96,10 @@ public class GamemodeCMD extends PlexCommand } if (args.length == 2) { - return PlexUtils.getPlayerNameList(); + if (silentCheckPermission(sender, "plex.gamemode.others")) + { + return PlexUtils.getPlayerNameList(); + } } return Collections.emptyList(); } diff --git a/server/src/main/java/dev/plex/command/impl/KickCMD.java b/server/src/main/java/dev/plex/command/impl/KickCMD.java index 6294c6c..d6eb81d 100644 --- a/server/src/main/java/dev/plex/command/impl/KickCMD.java +++ b/server/src/main/java/dev/plex/command/impl/KickCMD.java @@ -1,5 +1,6 @@ package dev.plex.command.impl; +import com.google.common.collect.ImmutableList; import dev.plex.cache.DataUtils; import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; @@ -9,7 +10,6 @@ import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; - import dev.plex.util.BungeeUtil; import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; @@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.List; @CommandParameters(name = "kick", description = "Kicks a player", usage = "/ ") @CommandPermissions(permission = "plex.kick", source = RequiredCommandSource.ANY) @@ -67,4 +68,10 @@ public class KickCMD extends PlexCommand BungeeUtil.kickPlayer(player, Punishment.generateKickMessage(punishment)); return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/ListCMD.java b/server/src/main/java/dev/plex/command/impl/ListCMD.java index b5acc13..96cb8c0 100644 --- a/server/src/main/java/dev/plex/command/impl/ListCMD.java +++ b/server/src/main/java/dev/plex/command/impl/ListCMD.java @@ -67,7 +67,7 @@ public class ListCMD extends PlexCommand public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - if (args.length == 1) + if (args.length == 1 && silentCheckPermission(sender, this.getPermission())) { return Collections.singletonList("-d"); } diff --git a/server/src/main/java/dev/plex/command/impl/LocalSpawnCMD.java b/server/src/main/java/dev/plex/command/impl/LocalSpawnCMD.java index b25e72a..226decd 100644 --- a/server/src/main/java/dev/plex/command/impl/LocalSpawnCMD.java +++ b/server/src/main/java/dev/plex/command/impl/LocalSpawnCMD.java @@ -11,6 +11,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandParameters(name = "localspawn", description = "Teleport to the spawnpoint of the world you are in") @CommandPermissions(permission = "plex.localspawn", source = RequiredCommandSource.IN_GAME) public class LocalSpawnCMD extends PlexCommand @@ -22,4 +25,10 @@ public class LocalSpawnCMD extends PlexCommand playerSender.teleportAsync(playerSender.getWorld().getSpawnLocation()); return messageComponent("teleportedToWorldSpawn"); } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/LockupCMD.java b/server/src/main/java/dev/plex/command/impl/LockupCMD.java index 8ed2e85..86a767d 100644 --- a/server/src/main/java/dev/plex/command/impl/LockupCMD.java +++ b/server/src/main/java/dev/plex/command/impl/LockupCMD.java @@ -5,7 +5,6 @@ import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.player.PlexPlayer; - import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; @@ -41,6 +40,6 @@ public class LockupCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender, "plex.lockup") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java b/server/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java index 3270fbe..30d3e18 100644 --- a/server/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java +++ b/server/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java @@ -13,6 +13,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.masterbuilderworld", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "masterbuilderworld", aliases = "mbw", description = "Teleport to the Master Builder world") public class MasterbuilderworldCMD extends PlexCommand @@ -30,4 +33,10 @@ public class MasterbuilderworldCMD extends PlexCommand } return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java b/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java index cca36fb..018aec5 100644 --- a/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java +++ b/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java @@ -113,7 +113,7 @@ public class MobPurgeCMD extends PlexCommand public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - if (args.length == 1) + if (args.length == 1 && silentCheckPermission(sender, this.getPermission())) { return getAllMobs(); } diff --git a/server/src/main/java/dev/plex/command/impl/MuteCMD.java b/server/src/main/java/dev/plex/command/impl/MuteCMD.java index 573ed4a..becc257 100644 --- a/server/src/main/java/dev/plex/command/impl/MuteCMD.java +++ b/server/src/main/java/dev/plex/command/impl/MuteCMD.java @@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandPermissions; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; - import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; import net.kyori.adventure.text.Component; @@ -39,7 +38,7 @@ public class MuteCMD extends PlexCommand return messageComponent("playerMuted"); } - if (silentCheckPermission(player,"plex.mute")) + if (silentCheckPermission(player, "plex.mute")) { send(sender, messageComponent("higherRankThanYou")); return null; @@ -62,6 +61,6 @@ public class MuteCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender,"plex.mute") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/NotesCMD.java b/server/src/main/java/dev/plex/command/impl/NotesCMD.java index 8ced26d..845d15b 100644 --- a/server/src/main/java/dev/plex/command/impl/NotesCMD.java +++ b/server/src/main/java/dev/plex/command/impl/NotesCMD.java @@ -6,7 +6,6 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.player.PlexPlayer; import dev.plex.punishment.extra.Note; - import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; import net.kyori.adventure.text.Component; @@ -139,13 +138,17 @@ public class NotesCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - if (args.length == 1) + if (silentCheckPermission(sender, this.getPermission())) { - return PlexUtils.getPlayerNameList(); - } - if (args.length == 2) - { - return Arrays.asList("list", "add", "remove", "clear"); + if (args.length == 1) + { + return PlexUtils.getPlayerNameList(); + } + if (args.length == 2) + { + return Arrays.asList("list", "add", "remove", "clear"); + } + return Collections.emptyList(); } return Collections.emptyList(); } diff --git a/server/src/main/java/dev/plex/command/impl/PunishmentsCMD.java b/server/src/main/java/dev/plex/command/impl/PunishmentsCMD.java index f2af4f4..bb4fdb3 100644 --- a/server/src/main/java/dev/plex/command/impl/PunishmentsCMD.java +++ b/server/src/main/java/dev/plex/command/impl/PunishmentsCMD.java @@ -7,7 +7,6 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.exception.PlayerNotFoundException; import dev.plex.command.source.RequiredCommandSource; - import dev.plex.menu.impl.PunishedPlayerMenu; import dev.plex.menu.impl.PunishmentMenu; import dev.plex.player.PlexPlayer; @@ -52,6 +51,6 @@ public class PunishmentsCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/RawSayCMD.java b/server/src/main/java/dev/plex/command/impl/RawSayCMD.java index 38118cd..488935c 100644 --- a/server/src/main/java/dev/plex/command/impl/RawSayCMD.java +++ b/server/src/main/java/dev/plex/command/impl/RawSayCMD.java @@ -13,6 +13,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.rawsay", source = RequiredCommandSource.ANY) @CommandParameters(name = "rawsay", usage = "/ ", description = "Displays a raw message to everyone") public class RawSayCMD extends PlexCommand @@ -28,4 +31,10 @@ public class RawSayCMD extends PlexCommand PlexUtils.broadcast(StringUtils.join(args, " ")); return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/RemoveLoginMessageCMD.java b/server/src/main/java/dev/plex/command/impl/RemoveLoginMessageCMD.java index b9095fd..8bf1d78 100644 --- a/server/src/main/java/dev/plex/command/impl/RemoveLoginMessageCMD.java +++ b/server/src/main/java/dev/plex/command/impl/RemoveLoginMessageCMD.java @@ -1,17 +1,21 @@ package dev.plex.command.impl; +import com.google.common.collect.ImmutableList; import dev.plex.cache.DataUtils; import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; +import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + @CommandPermissions(permission = "plex.removeloginmessage", source = RequiredCommandSource.ANY) @CommandParameters(name = "removeloginmessage", usage = "/ [-o ]", description = "Remove your own (or someone else's) login message", aliases = "rlm,removeloginmsg") public class RemoveLoginMessageCMD extends PlexCommand @@ -51,4 +55,17 @@ public class RemoveLoginMessageCMD extends PlexCommand } return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + if (args.length == 1) + { + if (silentCheckPermission(sender, "plex.removeloginmessage")) + { + return List.of("-o"); + } + } + return args.length == 2 && silentCheckPermission(sender, "plex.removeloginmessage") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/SayCMD.java b/server/src/main/java/dev/plex/command/impl/SayCMD.java index 37390dd..769c291 100644 --- a/server/src/main/java/dev/plex/command/impl/SayCMD.java +++ b/server/src/main/java/dev/plex/command/impl/SayCMD.java @@ -4,7 +4,6 @@ import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; - import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.apache.commons.lang3.StringUtils; @@ -13,6 +12,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.say", source = RequiredCommandSource.ANY) @CommandParameters(name = "say", usage = "/ ", description = "Displays a message to everyone") public class SayCMD extends PlexCommand @@ -28,4 +30,10 @@ public class SayCMD extends PlexCommand PlexUtils.broadcast(PlexUtils.messageComponent("sayMessage", sender.getName(), PlexUtils.mmStripColor(StringUtils.join(args, " ")))); return null; } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return Collections.emptyList(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/SetLoginMessageCMD.java b/server/src/main/java/dev/plex/command/impl/SetLoginMessageCMD.java index b221d44..28bb4ae 100644 --- a/server/src/main/java/dev/plex/command/impl/SetLoginMessageCMD.java +++ b/server/src/main/java/dev/plex/command/impl/SetLoginMessageCMD.java @@ -1,5 +1,6 @@ package dev.plex.command.impl; +import com.google.common.collect.ImmutableList; import dev.plex.cache.DataUtils; import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; @@ -16,6 +17,8 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + @CommandPermissions(permission = "plex.setloginmessage", source = RequiredCommandSource.ANY) @CommandParameters(name = "setloginmessage", usage = "/ [-o ] ", description = "Sets your (or someone else's) login message", aliases = "slm,setloginmsg") public class SetLoginMessageCMD extends PlexCommand @@ -79,4 +82,17 @@ public class SetLoginMessageCMD extends PlexCommand throw new CommandFailException(messageString("nameRequired")); } } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + if (args.length == 1) + { + if (silentCheckPermission(sender, "plex.setloginmessage")) + { + return List.of("-o"); + } + } + return args.length == 2 && args[0].equalsIgnoreCase("-o") && silentCheckPermission(sender, "plex.setloginmessage") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + } } \ No newline at end of file diff --git a/server/src/main/java/dev/plex/command/impl/SmiteCMD.java b/server/src/main/java/dev/plex/command/impl/SmiteCMD.java index d92152d..d45ccb8 100644 --- a/server/src/main/java/dev/plex/command/impl/SmiteCMD.java +++ b/server/src/main/java/dev/plex/command/impl/SmiteCMD.java @@ -7,7 +7,6 @@ import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; - import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; import net.kyori.adventure.text.Component; @@ -138,7 +137,7 @@ public class SmiteCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - if (silentCheckPermission(sender,"plex.smite") && args.length == 1) + if (silentCheckPermission(sender, this.getPermission()) && args.length == 1) { return PlexUtils.getPlayerNameList(); } diff --git a/server/src/main/java/dev/plex/command/impl/TagCMD.java b/server/src/main/java/dev/plex/command/impl/TagCMD.java index 33499fb..17eaec8 100644 --- a/server/src/main/java/dev/plex/command/impl/TagCMD.java +++ b/server/src/main/java/dev/plex/command/impl/TagCMD.java @@ -6,7 +6,6 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; - import dev.plex.util.PlexUtils; import dev.plex.util.minimessage.SafeMiniMessage; import net.kyori.adventure.text.Component; @@ -19,6 +18,10 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + @CommandPermissions(permission = "plex.tag", source = RequiredCommandSource.ANY) @CommandParameters(name = "tag", aliases = "prefix", description = "Set or clear your prefix", usage = "/ | clear >") public class TagCMD extends PlexCommand @@ -80,7 +83,7 @@ public class TagCMD extends PlexCommand DataUtils.update(player); return messageComponent("prefixCleared"); } - checkPermission(sender,"plex.tag.clear.others"); + checkPermission(sender, "plex.tag.clear.others"); Player target = getNonNullPlayer(args[1]); PlexPlayer plexTarget = DataUtils.getPlayer(target.getUniqueId()); plexTarget.setPrefix(null); @@ -89,6 +92,26 @@ public class TagCMD extends PlexCommand } return usage(); } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + if (args.length == 1) + { + return Arrays.asList("set", "clear"); + } + if (args.length == 2) + { + if (args[0].equalsIgnoreCase("clear")) + { + if (silentCheckPermission(sender, "plex.tag.clear.others")) + { + return PlexUtils.getPlayerNameList(); + } + } + } + return Collections.emptyList(); + } } diff --git a/server/src/main/java/dev/plex/command/impl/TempbanCMD.java b/server/src/main/java/dev/plex/command/impl/TempbanCMD.java index c9019dc..811e066 100644 --- a/server/src/main/java/dev/plex/command/impl/TempbanCMD.java +++ b/server/src/main/java/dev/plex/command/impl/TempbanCMD.java @@ -10,7 +10,6 @@ import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; - import dev.plex.util.BungeeUtil; import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; @@ -120,6 +119,6 @@ public class TempbanCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender,"plex.tempban") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/ToggleCMD.java b/server/src/main/java/dev/plex/command/impl/ToggleCMD.java index 6ec561b..3d274ba 100644 --- a/server/src/main/java/dev/plex/command/impl/ToggleCMD.java +++ b/server/src/main/java/dev/plex/command/impl/ToggleCMD.java @@ -6,7 +6,6 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; import dev.plex.menu.impl.ToggleMenu; - import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -66,7 +65,7 @@ public class ToggleCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } private String status(String toggle) diff --git a/server/src/main/java/dev/plex/command/impl/UnbanCMD.java b/server/src/main/java/dev/plex/command/impl/UnbanCMD.java index 358ccec..040dd5f 100644 --- a/server/src/main/java/dev/plex/command/impl/UnbanCMD.java +++ b/server/src/main/java/dev/plex/command/impl/UnbanCMD.java @@ -9,7 +9,6 @@ import dev.plex.command.exception.PlayerNotBannedException; import dev.plex.command.exception.PlayerNotFoundException; import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; - import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; @@ -58,6 +57,6 @@ public class UnbanCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender,"plex.unban") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/UnfreezeCMD.java b/server/src/main/java/dev/plex/command/impl/UnfreezeCMD.java index bcd2d37..4457ee4 100644 --- a/server/src/main/java/dev/plex/command/impl/UnfreezeCMD.java +++ b/server/src/main/java/dev/plex/command/impl/UnfreezeCMD.java @@ -6,7 +6,6 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.exception.CommandFailException; import dev.plex.player.PlexPlayer; - import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; @@ -41,6 +40,6 @@ public class UnfreezeCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender,"plex.unfreeze") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/UnmuteCMD.java b/server/src/main/java/dev/plex/command/impl/UnmuteCMD.java index 53d9cce..8110af9 100644 --- a/server/src/main/java/dev/plex/command/impl/UnmuteCMD.java +++ b/server/src/main/java/dev/plex/command/impl/UnmuteCMD.java @@ -6,7 +6,6 @@ import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.exception.CommandFailException; import dev.plex.player.PlexPlayer; - import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; @@ -41,6 +40,6 @@ public class UnmuteCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender,"plex.unfreeze") ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/WhoHasCMD.java b/server/src/main/java/dev/plex/command/impl/WhoHasCMD.java index 53f0747..d295c77 100644 --- a/server/src/main/java/dev/plex/command/impl/WhoHasCMD.java +++ b/server/src/main/java/dev/plex/command/impl/WhoHasCMD.java @@ -47,6 +47,6 @@ public class WhoHasCMD extends PlexCommand @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return args.length == 1 && silentCheckPermission(sender, "plex.whohas") ? Arrays.stream(Material.values()).map(Enum::name).toList() : ImmutableList.of(); + return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? Arrays.stream(Material.values()).map(Enum::name).toList() : ImmutableList.of(); } } diff --git a/server/src/main/java/dev/plex/command/impl/WorldCMD.java b/server/src/main/java/dev/plex/command/impl/WorldCMD.java index 28ff68b..006b9af 100644 --- a/server/src/main/java/dev/plex/command/impl/WorldCMD.java +++ b/server/src/main/java/dev/plex/command/impl/WorldCMD.java @@ -6,7 +6,6 @@ import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; - import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.World; @@ -38,19 +37,18 @@ public class WorldCMD extends PlexCommand boolean playerWorld = args[0].matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"); if (playerWorld && Plex.get().getModuleManager().getModules().stream().anyMatch(plexModule -> plexModule.getPlexModuleFile().getName().equalsIgnoreCase("Module-TFMExtras"))) { - checkPermission(playerSender,"plex.world.playerworlds"); + checkPermission(playerSender, "plex.world.playerworlds"); } playerSender.teleportAsync(world.getSpawnLocation()); return messageComponent("playerWorldTeleport", world.getName()); } - @Override public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { final List completions = Lists.newArrayList(); final Player player = (Player) sender; - if (args.length == 1) + if (args.length == 1 && silentCheckPermission(sender, this.getPermission())) { @NotNull List worlds = Bukkit.getWorlds(); for (World world : worlds) @@ -60,7 +58,7 @@ public class WorldCMD extends PlexCommand try { final UUID uuid = UUID.fromString(worldName); - if (uuid.equals(player.getUniqueId()) || silentCheckPermission(player,"plex.world.playerworlds")) + if (uuid.equals(player.getUniqueId()) || silentCheckPermission(player, "plex.world.playerworlds")) { completions.add(worldName); }