diff --git a/src/main/java/dev/plex/command/annotation/CommandPermissions.java b/src/main/java/dev/plex/command/annotation/CommandPermissions.java index 24c3927..343937a 100644 --- a/src/main/java/dev/plex/command/annotation/CommandPermissions.java +++ b/src/main/java/dev/plex/command/annotation/CommandPermissions.java @@ -13,5 +13,5 @@ public @interface CommandPermissions RequiredCommandSource source() default RequiredCommandSource.ANY; - String permission() default "plex.donotgivethispermission"; // No idea what to put here + String permission() default ""; // No idea what to put here } \ No newline at end of file diff --git a/src/main/java/dev/plex/command/impl/BanCMD.java b/src/main/java/dev/plex/command/impl/BanCMD.java index 64dc482..77fefdf 100644 --- a/src/main/java/dev/plex/command/impl/BanCMD.java +++ b/src/main/java/dev/plex/command/impl/BanCMD.java @@ -25,11 +25,10 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @CommandParameters(name = "ban", usage = "/ [reason]", aliases = "offlineban,gtfo", description = "Bans a player, offline or online") -@CommandPermissions(level = Rank.ADMIN, source = RequiredCommandSource.ANY) +@CommandPermissions(level = Rank.ADMIN, permission = "plex.ban", source = RequiredCommandSource.ANY) public class BanCMD extends PlexCommand { - @Override public Component execute(CommandSender sender, String[] args) { @@ -69,7 +68,7 @@ public class BanCMD extends PlexCommand punishment.setEndDate(new Date(Instant.now().plusSeconds(10/*PlexUtils.secondsToHours(24)*/).getEpochSecond())); punishment.setCustomTime(false); plugin.getPunishmentManager().doPunishment(punishedPlayer, punishment); - Bukkit.broadcast(componentFromString(sender.getName() + " - Banning " + plexPlayer.getName())); + PlexUtils.broadcast(tl("unbanningPlayer", sender.getName(), plexPlayer.getName())); if (Bukkit.getPlayer(targetUUID) != null) { Bukkit.getPlayer(targetUUID).kick(componentFromString("&cYou've been banned.")); diff --git a/src/main/java/dev/plex/command/impl/DeopCMD.java b/src/main/java/dev/plex/command/impl/DeopCMD.java new file mode 100644 index 0000000..7f486e3 --- /dev/null +++ b/src/main/java/dev/plex/command/impl/DeopCMD.java @@ -0,0 +1,38 @@ +package dev.plex.command.impl; + +import com.google.common.collect.ImmutableList; +import dev.plex.command.PlexCommand; +import dev.plex.command.annotation.CommandParameters; +import dev.plex.command.annotation.CommandPermissions; +import dev.plex.command.exception.CommandArgumentException; +import dev.plex.rank.enums.Rank; +import dev.plex.util.PlexUtils; +import java.util.List; +import net.kyori.adventure.text.Component; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +@CommandParameters(name = "deop", description = "Deop a player on the server", usage = "/ ") +@CommandPermissions(level = Rank.ADMIN, permission = "plex.deop") +public class DeopCMD extends PlexCommand +{ + @Override + public Component execute(CommandSender sender, String[] args) + { + if (args.length != 1) + { + throw new CommandArgumentException(); + } + Player player = getNonNullPlayer(args[0]); + player.setOp(false); + PlexUtils.broadcast(tl("oppedPlayer", sender.getName(), player.getName())); + return null; + } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return args.length == 1 ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + } +} \ No newline at end of file diff --git a/src/main/java/dev/plex/command/impl/FlatlandsCMD.java b/src/main/java/dev/plex/command/impl/FlatlandsCMD.java index 555d437..c4fdbc6 100644 --- a/src/main/java/dev/plex/command/impl/FlatlandsCMD.java +++ b/src/main/java/dev/plex/command/impl/FlatlandsCMD.java @@ -11,7 +11,7 @@ import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandPermissions(level = Rank.ADMIN, source = RequiredCommandSource.IN_GAME) +@CommandPermissions(level = Rank.OP, permission = "plex.flatlands", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "flatlands", description = "Teleport to the flatlands") public class FlatlandsCMD extends PlexCommand { diff --git a/src/main/java/dev/plex/command/impl/FreezeCMD.java b/src/main/java/dev/plex/command/impl/FreezeCMD.java index 1a1ab61..346c9b8 100644 --- a/src/main/java/dev/plex/command/impl/FreezeCMD.java +++ b/src/main/java/dev/plex/command/impl/FreezeCMD.java @@ -21,10 +21,9 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @CommandParameters(name = "freeze", description = "Freeze a player on the server", usage = "/ ") -@CommandPermissions(level = Rank.ADMIN) +@CommandPermissions(level = Rank.ADMIN, permission = "plex.freeze") public class FreezeCMD extends PlexCommand { - @Override public Component execute(CommandSender sender, String[] args) { diff --git a/src/main/java/dev/plex/command/impl/ListCMD.java b/src/main/java/dev/plex/command/impl/ListCMD.java index f2bb45f..6bf2aed 100644 --- a/src/main/java/dev/plex/command/impl/ListCMD.java +++ b/src/main/java/dev/plex/command/impl/ListCMD.java @@ -13,7 +13,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @CommandParameters(name = "list", description = "Show a list of all online players", usage = "/ ") -@CommandPermissions(level = Rank.OP) +@CommandPermissions(level = Rank.OP, permission = "plex.list") public class ListCMD extends PlexCommand { @Override diff --git a/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java b/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java index cd5a426..06dcd8e 100644 --- a/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java +++ b/src/main/java/dev/plex/command/impl/MasterbuilderworldCMD.java @@ -11,7 +11,7 @@ import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandPermissions(level = Rank.ADMIN, source = RequiredCommandSource.IN_GAME) +@CommandPermissions(level = Rank.OP, permission = "plex.masterbuilderworld", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "masterbuilderworld", aliases = "mbw", description = "Teleport to the Master Builder world") public class MasterbuilderworldCMD extends PlexCommand { diff --git a/src/main/java/dev/plex/command/impl/NameHistoryCMD.java b/src/main/java/dev/plex/command/impl/NameHistoryCMD.java index 3ca9c59..0ec9e1a 100644 --- a/src/main/java/dev/plex/command/impl/NameHistoryCMD.java +++ b/src/main/java/dev/plex/command/impl/NameHistoryCMD.java @@ -24,7 +24,7 @@ import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; @CommandParameters(name = "namehistory", description = "Get the name history of a player", usage = "/ ", aliases = "nh") -@CommandPermissions(level = Rank.OP) +@CommandPermissions(level = Rank.OP, permission = "plex.namehistory") public class NameHistoryCMD extends PlexCommand { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' HH:mm:ss"); diff --git a/src/main/java/dev/plex/command/impl/OpCMD.java b/src/main/java/dev/plex/command/impl/OpCMD.java index ea9eecf..9b42e01 100644 --- a/src/main/java/dev/plex/command/impl/OpCMD.java +++ b/src/main/java/dev/plex/command/impl/OpCMD.java @@ -17,7 +17,6 @@ import org.jetbrains.annotations.NotNull; @CommandPermissions(level = Rank.OP) public class OpCMD extends PlexCommand { - @Override public Component execute(CommandSender sender, String[] args) { diff --git a/src/main/java/dev/plex/command/impl/PlexCMD.java b/src/main/java/dev/plex/command/impl/PlexCMD.java index f4cdaed..b409d7e 100644 --- a/src/main/java/dev/plex/command/impl/PlexCMD.java +++ b/src/main/java/dev/plex/command/impl/PlexCMD.java @@ -15,7 +15,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.ANY) +@CommandPermissions(level = Rank.OP, permission = "plex.plex", source = RequiredCommandSource.ANY) @CommandParameters(name = "plex", usage = "/ [reload]", aliases = "plexhelp", description = "Show information about Plex or reload it") public class PlexCMD extends PlexCommand { diff --git a/src/main/java/dev/plex/command/impl/PunishmentsCMD.java b/src/main/java/dev/plex/command/impl/PunishmentsCMD.java index ab7c246..6ca773c 100644 --- a/src/main/java/dev/plex/command/impl/PunishmentsCMD.java +++ b/src/main/java/dev/plex/command/impl/PunishmentsCMD.java @@ -15,7 +15,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @CommandParameters(name = "punishments", usage = "/ [player]", description = "Opens the Punishments GUI", aliases = "punishlist,punishes") -@CommandPermissions(level = Rank.ADMIN, source = RequiredCommandSource.IN_GAME) +@CommandPermissions(level = Rank.ADMIN, permission = "plex.punishments", source = RequiredCommandSource.IN_GAME) public class PunishmentsCMD extends PlexCommand { @Override diff --git a/src/main/java/dev/plex/command/impl/RankCMD.java b/src/main/java/dev/plex/command/impl/RankCMD.java index 866be16..d919b52 100644 --- a/src/main/java/dev/plex/command/impl/RankCMD.java +++ b/src/main/java/dev/plex/command/impl/RankCMD.java @@ -11,7 +11,7 @@ import org.bukkit.entity.Player; // TODO: See ranks of other players -@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME) +@CommandPermissions(level = Rank.OP, permission = "plex.rank", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "rank", description = "Displays your rank") public class RankCMD extends PlexCommand { diff --git a/src/main/java/dev/plex/command/impl/UnbanCMD.java b/src/main/java/dev/plex/command/impl/UnbanCMD.java new file mode 100644 index 0000000..b4dc2ba --- /dev/null +++ b/src/main/java/dev/plex/command/impl/UnbanCMD.java @@ -0,0 +1,61 @@ +package dev.plex.command.impl; + +import com.google.common.collect.ImmutableList; +import dev.plex.cache.DataUtils; +import dev.plex.cache.PlayerCache; +import dev.plex.command.PlexCommand; +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.player.PlexPlayer; +import dev.plex.player.PunishedPlayer; +import dev.plex.punishment.Punishment; +import dev.plex.punishment.PunishmentType; +import dev.plex.rank.enums.Rank; +import dev.plex.util.PlexUtils; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +@CommandParameters(name = "unban", usage = "/ ", description = "Unbans a player, offline or online") +@CommandPermissions(level = Rank.ADMIN, permission = "plex.ban", source = RequiredCommandSource.ANY) + +public class UnbanCMD extends PlexCommand +{ + @Override + public Component execute(CommandSender sender, String[] args) + { + if (args.length == 0) + { + return usage(getUsage()); + } + + if (args.length == 1) + { + UUID targetUUID = PlexUtils.getFromName(args[0]); + PlexPlayer plexPlayer = DataUtils.getPlayer(targetUUID); + + if (targetUUID == null || !DataUtils.hasPlayedBefore(targetUUID)) + { + throw new PlayerNotFoundException(); + } + + plugin.getBanManager().unban(targetUUID); + PlexUtils.broadcast(tl("unbanningPlayer", sender.getName(), plexPlayer.getName())); + } + return null; + } + + @Override + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + { + return args.length == 1 && isAdmin(sender) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); + } +} diff --git a/src/main/java/dev/plex/command/impl/WorldCMD.java b/src/main/java/dev/plex/command/impl/WorldCMD.java index 21b1b0f..72946d0 100644 --- a/src/main/java/dev/plex/command/impl/WorldCMD.java +++ b/src/main/java/dev/plex/command/impl/WorldCMD.java @@ -17,7 +17,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -@CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME) +@CommandPermissions(level = Rank.OP, permission = "plex.world", source = RequiredCommandSource.IN_GAME) @CommandParameters(name = "world", description = "Teleport to a world.", usage = "/ ") public class WorldCMD extends PlexCommand { diff --git a/src/main/java/dev/plex/handlers/CommandHandler.java b/src/main/java/dev/plex/handlers/CommandHandler.java index f264e3c..ba85544 100644 --- a/src/main/java/dev/plex/handlers/CommandHandler.java +++ b/src/main/java/dev/plex/handlers/CommandHandler.java @@ -1,47 +1,34 @@ package dev.plex.handlers; import com.google.common.collect.Lists; +import dev.plex.PlexBase; import dev.plex.command.PlexCommand; -import dev.plex.command.impl.AdminCMD; -import dev.plex.command.impl.AdminworldCMD; -import dev.plex.command.impl.AdventureCMD; -import dev.plex.command.impl.BanCMD; -import dev.plex.command.impl.CreativeCMD; -import dev.plex.command.impl.DeopAllCMD; -import dev.plex.command.impl.FlatlandsCMD; -import dev.plex.command.impl.FreezeCMD; -import dev.plex.command.impl.ListCMD; -import dev.plex.command.impl.MasterbuilderworldCMD; -import dev.plex.command.impl.NameHistoryCMD; -import dev.plex.command.impl.OpAllCMD; -import dev.plex.command.impl.OpCMD; -import dev.plex.command.impl.PlexCMD; -import dev.plex.command.impl.PunishmentsCMD; -import dev.plex.command.impl.RankCMD; -import dev.plex.command.impl.SpectatorCMD; -import dev.plex.command.impl.SurvivalCMD; -import dev.plex.command.impl.WorldCMD; +import dev.plex.command.impl.*; import dev.plex.util.PlexLog; import java.util.List; -public class CommandHandler +public class CommandHandler extends PlexBase { public CommandHandler() { List commands = Lists.newArrayList(); - commands.add(new AdminCMD()); + if (plugin.getRanksOrPermissions().equalsIgnoreCase("ranks")) + { + commands.add(new AdminCMD()); + commands.add(new DeopAllCMD()); + commands.add(new DeopCMD()); + commands.add(new OpAllCMD()); + commands.add(new OpCMD()); + } commands.add(new AdminworldCMD()); commands.add(new AdventureCMD()); commands.add(new BanCMD()); commands.add(new CreativeCMD()); - commands.add(new DeopAllCMD()); commands.add(new FlatlandsCMD()); commands.add(new FreezeCMD()); commands.add(new ListCMD()); commands.add(new MasterbuilderworldCMD()); commands.add(new NameHistoryCMD()); - commands.add(new OpAllCMD()); - commands.add(new OpCMD()); commands.add(new PlexCMD()); commands.add(new PunishmentsCMD()); commands.add(new RankCMD()); diff --git a/src/main/java/dev/plex/services/impl/BanService.java b/src/main/java/dev/plex/services/impl/BanService.java index 7d8065e..94bbdd5 100644 --- a/src/main/java/dev/plex/services/impl/BanService.java +++ b/src/main/java/dev/plex/services/impl/BanService.java @@ -1,6 +1,7 @@ package dev.plex.services.impl; import dev.plex.Plex; +import dev.plex.PlexBase; import dev.plex.banning.Ban; import dev.plex.services.AbstractService; import java.util.Date; diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 58b4bab..a62e75a 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -58,13 +58,15 @@ setOtherPlayerGameModeTo: "You set 's gamemode to ." playerSetOtherGameMode: " set your gamemode to ." consoleMustDefinePlayer: "You must define a player since you are running this command from console." newAdminAdded: " - Adding to the admin list" -adminRemoved: " - Removing from the admin list" +adminRemoved: " - Removing from the admin list" adminSetRank: " - Setting 's rank to " teleportedToWorld: "You have been teleported to the ." -higherRankThanYou: "This player is an admin and a higher rank than you." -playerNotAdmin: "That player is not an admin." -playerIsAdmin: "That player is already an admin." -rankNotFound: "The rank you entered was not found." -rankMustBeHigherThanAdmin: "The rank you entered must be higher than Admin." -consoleOnly: "This command can only be executed by the console." -yourRank: "Your rank is: " \ No newline at end of file +higherRankThanYou: "This player is an admin and a higher rank than you." +playerNotAdmin: "That player is not an admin." +playerIsAdmin: "That player is already an admin." +rankNotFound: "The rank you entered was not found." +rankMustBeHigherThanAdmin: "The rank you entered must be higher than Admin." +consoleOnly: "This command can only be executed by the console." +yourRank: "Your rank is: " +banningPlayer: " - Banning " +unbanningPlayer: " - Unbanning " \ No newline at end of file