From 4202454ea1717a035377d2a21772fe3d215a4210 Mon Sep 17 00:00:00 2001 From: Rhythmic System Date: Tue, 25 Jun 2024 14:37:46 -0700 Subject: [PATCH 1/5] I keep forgetting to commit --- pom.xml | 2 +- .../simplenicks/commands/CommandHandler.java | 86 -------- .../simplenicks/commands/SubCommand.java | 46 ---- .../commands/subcommands/Delete.java | 43 ---- .../commands/subcommands/Help.java | 31 --- .../commands/subcommands/Reload.java | 33 --- .../commands/subcommands/Reset.java | 75 ------- .../commands/subcommands/Save.java | 46 ---- .../simplenicks/commands/subcommands/Set.java | 182 ---------------- .../simplenicks/config/LocaleHandler.java | 197 ------------------ .../java/adhdmc/simplenicks/util/SNPerm.java | 50 ----- .../simplenicks/SimpleNicks.java | 36 ++-- .../simplenicks/commands/CommandHandler.java | 125 +++++++++++ .../simplenicks/commands/Reset.java | 4 + .../simplexity/simplenicks/commands/Set.java | 63 ++++++ .../simplenicks/commands/SubCommand.java | 69 ++++++ .../simplenicks/config/ConfigHandler.java} | 53 +++-- .../simplenicks/config/LocaleHandler.java | 192 +++++++++++++++++ .../simplenicks/listener/LoginListener.java | 4 +- .../simplenicks/util/Constants.java | 16 ++ .../simplenicks/util/NickHandler.java | 47 +++-- .../simplenicks/util/SNExpansion.java | 4 +- .../simplenicks/util/TagPermission.java | 36 ++++ .../util/saving/AbstractSaving.java | 8 +- .../simplenicks/util/saving/PlayerPDC.java | 7 +- .../simplenicks/util/saving/YMLFile.java | 23 +- src/main/resources/config.yml | 6 +- src/main/resources/locale.yml | 70 ++++--- src/main/resources/plugin.yml | 2 +- 29 files changed, 671 insertions(+), 885 deletions(-) delete mode 100644 src/main/java/adhdmc/simplenicks/commands/CommandHandler.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/SubCommand.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/subcommands/Delete.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/subcommands/Help.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/subcommands/Reload.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/subcommands/Reset.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/subcommands/Save.java delete mode 100644 src/main/java/adhdmc/simplenicks/commands/subcommands/Set.java delete mode 100644 src/main/java/adhdmc/simplenicks/config/LocaleHandler.java delete mode 100644 src/main/java/adhdmc/simplenicks/util/SNPerm.java rename src/main/java/{adhdmc => simplexity}/simplenicks/SimpleNicks.java (66%) create mode 100644 src/main/java/simplexity/simplenicks/commands/CommandHandler.java create mode 100644 src/main/java/simplexity/simplenicks/commands/Reset.java create mode 100644 src/main/java/simplexity/simplenicks/commands/Set.java create mode 100644 src/main/java/simplexity/simplenicks/commands/SubCommand.java rename src/main/java/{adhdmc/simplenicks/config/Config.java => simplexity/simplenicks/config/ConfigHandler.java} (62%) create mode 100644 src/main/java/simplexity/simplenicks/config/LocaleHandler.java rename src/main/java/{adhdmc => simplexity}/simplenicks/listener/LoginListener.java (82%) create mode 100644 src/main/java/simplexity/simplenicks/util/Constants.java rename src/main/java/{adhdmc => simplexity}/simplenicks/util/NickHandler.java (53%) rename src/main/java/{adhdmc => simplexity}/simplenicks/util/SNExpansion.java (91%) create mode 100644 src/main/java/simplexity/simplenicks/util/TagPermission.java rename src/main/java/{adhdmc => simplexity}/simplenicks/util/saving/AbstractSaving.java (91%) rename src/main/java/{adhdmc => simplexity}/simplenicks/util/saving/PlayerPDC.java (93%) rename src/main/java/{adhdmc => simplexity}/simplenicks/util/saving/YMLFile.java (85%) diff --git a/pom.xml b/pom.xml index 2787afd..4fd00cc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - adhdmc + simplexity SimpleNicks 1.0.1 jar diff --git a/src/main/java/adhdmc/simplenicks/commands/CommandHandler.java b/src/main/java/adhdmc/simplenicks/commands/CommandHandler.java deleted file mode 100644 index dae9307..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/CommandHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -package adhdmc.simplenicks.commands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.config.LocaleHandler; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bukkit.command.*; -import org.jetbrains.annotations.NotNull; - -import java.util.*; - - -public class CommandHandler implements CommandExecutor, TabCompleter { - - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - - String[] parsedArgs = parseArgs(args); - - // Arguments Check - if (parsedArgs.length == 0) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidCommand())); // Invalid Arguments - return true; - } - // Execute Command - SubCommand subCommand = SimpleNicks.getSubCommands().getOrDefault(parsedArgs[0].toLowerCase(Locale.ENGLISH), null); - if (subCommand == null) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidCommand())); // Invalid SubCommand - return true; - } - subCommand.execute(sender, Arrays.copyOfRange(parsedArgs, 1, parsedArgs.length)); - return true; - } - - @Override - public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - ArrayList tabComplete = new ArrayList<>(); - if (args.length == 1) { - for (SubCommand subCommand : SimpleNicks.getSubCommands().values()) { - if (sender.hasPermission(subCommand.getPermission()) && subCommand.getName().startsWith(args[0].toLowerCase(Locale.ENGLISH))) { - tabComplete.add(subCommand.getName()); - } - } - } - else { - SubCommand subCommand = SimpleNicks.getSubCommands().getOrDefault(args[0].toLowerCase(Locale.ENGLISH), null); - if (subCommand == null) { return tabComplete; } - if (sender.hasPermission(subCommand.getPermission())) { - return subCommand.getSubcommandArguments(sender, Arrays.copyOfRange(args, 1, args.length)); - } - } - return tabComplete; - } - - private String[] parseArgs(String[] args) { - String command = String.join(" ", args); - List arguments = new ArrayList<>(); - StringBuilder currentArgument = new StringBuilder(); - boolean inQuotes = false; - - for (int i = 0; i < command.length(); i++) { - char c = command.charAt(i); - - if (c == '\\' && i + 1 < command.length()) { - currentArgument.append(command.charAt(++i)); - } - else if (c == '\"') { - inQuotes = !inQuotes; - } - else if (Character.isWhitespace(c) && !inQuotes) { - if (currentArgument.length() > 0) { - arguments.add(currentArgument.toString()); - currentArgument.setLength(0); - } - } - else { - currentArgument.append(c); - } - } - - if (currentArgument.length() > 0) arguments.add(currentArgument.toString()); - - return arguments.toArray(new String[0]); - } -} - diff --git a/src/main/java/adhdmc/simplenicks/commands/SubCommand.java b/src/main/java/adhdmc/simplenicks/commands/SubCommand.java deleted file mode 100644 index 4b61621..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/SubCommand.java +++ /dev/null @@ -1,46 +0,0 @@ -package adhdmc.simplenicks.commands; - -import adhdmc.simplenicks.util.SNPerm; -import org.bukkit.command.CommandSender; - -import java.util.List; - -public abstract class SubCommand { - - private final String name; - private final String description; - private final String syntax; - private final SNPerm permission; - - public SubCommand(String name, String description, String syntax, SNPerm permission) { - this.name = name; - this.description = description; - this.syntax = syntax; - this.permission = permission; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public String getSyntax() { - return syntax; - } - - public SNPerm getSimpleNickPermission() { - return permission; - } - - public String getPermission() { - return permission.getPermission(); - } - - public abstract void execute(CommandSender sender, String[] args); - - public abstract List getSubcommandArguments(CommandSender sender, String[] args); - -} diff --git a/src/main/java/adhdmc/simplenicks/commands/subcommands/Delete.java b/src/main/java/adhdmc/simplenicks/commands/subcommands/Delete.java deleted file mode 100644 index 7506c86..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/subcommands/Delete.java +++ /dev/null @@ -1,43 +0,0 @@ -package adhdmc.simplenicks.commands.subcommands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.util.NickHandler; -import adhdmc.simplenicks.util.SNPerm; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class Delete extends SubCommand { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - public Delete() { - super("delete", "Deletes a given nickname.", "/nick delete ", SNPerm.NICK_DELETE); - } - - @Override - public void execute(CommandSender sender, String[] args) { - // Player Check - if (!(sender instanceof Player player)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getConsoleCannotRun(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Usage (Not a Player) - return; - } - String nickname = NickHandler.getInstance().getNickname(player); - if (!NickHandler.getInstance().deleteNickname(player, nickname)) { - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickDeleteFailure(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickDeleteSuccess(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), Placeholder.parsed("nickname", nickname))); - } - - @Override - public List getSubcommandArguments(CommandSender sender, String[] args) { - if (!(sender instanceof Player player)) return new ArrayList<>(); - if (args.length == 1) return NickHandler.getInstance().getSavedNicknames(player); - return new ArrayList<>(); - } -} diff --git a/src/main/java/adhdmc/simplenicks/commands/subcommands/Help.java b/src/main/java/adhdmc/simplenicks/commands/subcommands/Help.java deleted file mode 100644 index 6defd68..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/subcommands/Help.java +++ /dev/null @@ -1,31 +0,0 @@ -package adhdmc.simplenicks.commands.subcommands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.util.SNPerm; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import org.bukkit.command.CommandSender; - -import java.util.List; - -public class Help extends SubCommand { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - public Help() { - super("help", "Help command for SimpleNicks", "/nick help", SNPerm.NICK_COMMAND); - } - - @Override - public void execute(CommandSender sender, String[] args) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getHelpBase(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getHelpSet())); - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getHelpReset())); - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getHelpMinimessage())); - } - - @Override - public List getSubcommandArguments(CommandSender sender, String[] args) { - return null; - } -} diff --git a/src/main/java/adhdmc/simplenicks/commands/subcommands/Reload.java b/src/main/java/adhdmc/simplenicks/commands/subcommands/Reload.java deleted file mode 100644 index 3149b61..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/subcommands/Reload.java +++ /dev/null @@ -1,33 +0,0 @@ -package adhdmc.simplenicks.commands.subcommands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.util.SNPerm; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import org.bukkit.command.CommandSender; - -import java.util.List; - -public class Reload extends SubCommand { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - public Reload() { - super("reload", "Reloads SimpleNicks Config and Locale", "/nick reload", SNPerm.NICK_RELOAD); - } - - @Override - public void execute(CommandSender sender, String[] args) { - if (!sender.hasPermission(SNPerm.NICK_RELOAD.getPermission())){ - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - SimpleNicks.configReload(); - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getConfigReload(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - } - - @Override - public List getSubcommandArguments(CommandSender sender, String[] args) { - return null; - } -} diff --git a/src/main/java/adhdmc/simplenicks/commands/subcommands/Reset.java b/src/main/java/adhdmc/simplenicks/commands/subcommands/Reset.java deleted file mode 100644 index 030a1d1..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/subcommands/Reset.java +++ /dev/null @@ -1,75 +0,0 @@ -package adhdmc.simplenicks.commands.subcommands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.util.NickHandler; -import adhdmc.simplenicks.util.SNPerm; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.List; - -public class Reset extends SubCommand { - public Reset() { - super("reset", "Resets a nickname", "/nick reset", SNPerm.NICK_RESET); - } - - @Override - public void execute(CommandSender sender, String[] args) { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - - // Player Check - if (!(sender instanceof Player)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getConsoleCannotRun(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Usage (Not a Player) - return; - } - // Arguments Check - if (args.length > 1) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getTooManyArguments(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Too Many Arguments - return; - } - // Admin Check - if (args.length == 1 && !sender.hasPermission(SNPerm.NICK_RESET_OTHERS.getPermission())) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // No Permission - return; - } - // Valid Player Check - Player player = (args.length == 0) ? (Player) sender : SimpleNicks.getInstance().getServer().getPlayer(args[0]); - if (player == null) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidPlayer(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Player - return; - } - if (sender == player && !sender.hasPermission(SNPerm.NICK_RESET.getPermission())) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getTooManyArguments(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // No Permission - return; - } - // Set Nickname - // Saved to player - NickHandler.getInstance().resetNickname(player); - player.displayName(miniMessage.deserialize(player.getName())); - if (player != sender) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickResetOther(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), - Placeholder.parsed("username", player.getName()))); - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickResetByOther(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), - Placeholder.component("username", ((Player) sender).displayName()))); - } else { - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickResetSelf(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - } - } - - @Override - public List getSubcommandArguments(CommandSender sender, String[] args) { - return null; - } -} diff --git a/src/main/java/adhdmc/simplenicks/commands/subcommands/Save.java b/src/main/java/adhdmc/simplenicks/commands/subcommands/Save.java deleted file mode 100644 index cf2e1e0..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/subcommands/Save.java +++ /dev/null @@ -1,46 +0,0 @@ -package adhdmc.simplenicks.commands.subcommands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.config.Config; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.util.NickHandler; -import adhdmc.simplenicks.util.SNPerm; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class Save extends SubCommand { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - public Save() { - super("save", "Saves the current or a provided nickname.", "/nick save [nickname]", SNPerm.NICK_SAVE); - } - - @Override - public void execute(CommandSender sender, String[] args) { - // Player Check - if (!(sender instanceof Player player)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getConsoleCannotRun(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Usage (Not a Player) - return; - } - if (NickHandler.getInstance().getSavedNicknames(player).size() >= Config.getInstance().getMaxSaves()) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickSaveFailureTooMany(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Usage (Not a Player) - return; - } - String nickname = NickHandler.getInstance().getNickname(player); - if (!NickHandler.getInstance().saveNickname(player, nickname)) { - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickSaveFailure(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickSaveSuccess(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), Placeholder.parsed("nickname", nickname))); - } - - @Override - public List getSubcommandArguments(CommandSender sender, String[] args) { - return new ArrayList<>(); - } -} diff --git a/src/main/java/adhdmc/simplenicks/commands/subcommands/Set.java b/src/main/java/adhdmc/simplenicks/commands/subcommands/Set.java deleted file mode 100644 index 7839729..0000000 --- a/src/main/java/adhdmc/simplenicks/commands/subcommands/Set.java +++ /dev/null @@ -1,182 +0,0 @@ -package adhdmc.simplenicks.commands.subcommands; - -import adhdmc.simplenicks.SimpleNicks; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.config.Config; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.util.NickHandler; -import adhdmc.simplenicks.util.SNPerm; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -public class Set extends SubCommand { - MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - - - public Set() { - super("set", "sets a nickname", "/nick set", SNPerm.NICK_COMMAND); - } - - @Override - public void execute(CommandSender sender, String[] args) { - int length = Config.getInstance().getMaxLength(); - Pattern regex = Config.getInstance().getRegex(); - // Player Check - if (!(sender instanceof Player sendingPlayer)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getConsoleCannotRun(), Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Usage (Not a Player) - return; - } - // Arguments Check - if (args.length == 0) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoArguments(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Arguments - return; - } - if (args.length > 2) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getTooManyArguments(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Too Many Arguments - return; - } - if (args.length == 2 && - !(sender.hasPermission(SNPerm.NICK_OTHERS_FULL.getPermission()) || - sender.hasPermission(SNPerm.NICK_OTHERS_BASIC.getPermission()) || - sender.hasPermission(SNPerm.NICK_OTHERS_RESTRICTIVE.getPermission()))) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // No Permission - return; - } - if (!sender.hasPermission(SNPerm.NICK_COMMAND.getPermission())) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // No Permission to set own - return; - } - // Nickname Validity Check - String nicknameStripped = miniMessage.stripTags(args[0]); - if (!regex.matcher(nicknameStripped).matches()) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidNickRegex(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), - Placeholder.parsed("regex", regex.pattern()))); // Non-Alphanumeric Nickname - return; - } - if (nicknameStripped.length() > length) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidNickTooLong(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), - Placeholder.parsed("value", String.valueOf(length)))); // Nickname Too Long - return; - } - // Valid Player Check - Player player = (args.length == 1) ? (Player) sender : SimpleNicks.getInstance().getServer().getPlayer(args[1]); - if (player == null) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidPlayer(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); // Invalid Player - return; - } - // Check against cached usernames - if (!player.hasPermission(SNPerm.NICK_USERNAME_BYPASS.getPermission()) && (SimpleNicks.getInstance().getServer().getOfflinePlayerIfCached(nicknameStripped) != null) && !(nicknameStripped.equals(player.getName()))){ - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getCantNickUsername(), - Placeholder.parsed("name", nicknameStripped), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - // TODO: [Check Requirement] Is this required? Can it be reformatted? - Component nickname = null; - //The checks process to go through if someone is nicknaming another player - if (args.length == 2) { - if (sendingPlayer.hasPermission(SNPerm.NICK_OTHERS_FULL.getPermission())){ - //Full parse, no regards for the formatting permissions of either player - nickname = miniMessage.deserialize(args[0]); - } else if (sendingPlayer.hasPermission(SNPerm.NICK_OTHERS_BASIC.getPermission())) { - //Basic parse, parses based on the Admin's permissions - if (parseMessageContent(sendingPlayer, args[0]) == null) { - sendingPlayer.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidTags(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - nickname = parseMessageContent(sendingPlayer, args[0]); - } else if (sendingPlayer.hasPermission(SNPerm.NICK_OTHERS_RESTRICTIVE.getPermission())) { - //Restrictive parse, parses based on the player's permissions - if (parseMessageContent(player, args[0]) == null) { - sendingPlayer.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidTags(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - nickname = parseMessageContent(player, args[0]); - } - } else { - //Player nicknaming themselves, based on their own permissions - if (parseMessageContent(player, args[0]) == null){ - sendingPlayer.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidTags(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } else { - nickname = parseMessageContent(player, args[0]); - } - } - //idk it says this might be null, I hope it's not but just in case lol - if (nickname == null) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickIsNull(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - return; - } - // TODO: End [Check Requirement] - // Set Nickname - NickHandler.getInstance().setNickname(player, args[0]); - //Send feedback if an admin is setting someone's name, both to the admin and player - if (sendingPlayer != player) { - sendingPlayer.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickChangeOther(), - Placeholder.parsed("username", player.getName()), - Placeholder.component("nickname", nickname), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickChangedByOther(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()), - Placeholder.component("username", sendingPlayer.displayName()), - Placeholder.component("nickname", nickname))); - } else { - //If a player sets their own name - player.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNickChangedSelf(), - Placeholder.component("nickname", nickname), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPrefix()))); - } - } - - @Override - public List getSubcommandArguments(CommandSender sender, String[] args) { - if (!(sender instanceof Player player)) return new ArrayList<>(); - if (args.length == 2 && (sender.hasPermission(SNPerm.NICK_OTHERS_FULL.getPermission()) || - sender.hasPermission(SNPerm.NICK_OTHERS_BASIC.getPermission()) || - sender.hasPermission(SNPerm.NICK_OTHERS_RESTRICTIVE.getPermission()))) { - return null; - } - if (args.length == 1) return NickHandler.getInstance().getSavedNicknames(player); - return new ArrayList<>(); - } - //Stolen from https://github.com/YouHaveTrouble/JustChat/blob/master/src/main/java/me/youhavetrouble/justchat/JustChatListener.java#L78 - private Component parseMessageContent(Player player, String rawMessage) { - TagResolver.Builder tagResolver = TagResolver.builder(); - //This is stupid but yk whatever - int tempCheckSolution = 0; - for(SNPerm perm : SNPerm.values()) { - if (player.hasPermission(perm.getPermission()) && perm.getTagResolver() != null) { - tagResolver.resolver(perm.getTagResolver()); - tempCheckSolution = tempCheckSolution + 1; - } - } - MiniMessage nameParser = MiniMessage.builder().tags(tagResolver.build()).build(); - Component fullParsedName = miniMessage.deserialize(rawMessage); - Component permParsedName = nameParser.deserialize(rawMessage); - if (tempCheckSolution == 0) { - String strippedMsg = miniMessage.stripTags(rawMessage); - return miniMessage.deserialize(strippedMsg); - } - if (fullParsedName.equals(permParsedName)) return permParsedName; - return null; - } -} diff --git a/src/main/java/adhdmc/simplenicks/config/LocaleHandler.java b/src/main/java/adhdmc/simplenicks/config/LocaleHandler.java deleted file mode 100644 index 62bb8a7..0000000 --- a/src/main/java/adhdmc/simplenicks/config/LocaleHandler.java +++ /dev/null @@ -1,197 +0,0 @@ -package adhdmc.simplenicks.config; - -import adhdmc.simplenicks.SimpleNicks; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.IOException; -import java.util.logging.Logger; - -public class LocaleHandler { - private static LocaleHandler instance; - private final String fileName = "locale.yml"; - private final File localeFile = new File(SimpleNicks.getInstance().getDataFolder(), fileName); - private final FileConfiguration localeConfig = new YamlConfiguration(); - private final Logger logger = SimpleNicks.getInstance().getLogger(); - private String invalidCommand, noArguments, tooManyArguments, cantNickUsername, noPermission, consoleCannotRun, - invalidPlayer, invalidNickRegex, invalidNickTooLong, invalidTags, prefix, helpBase, helpSet, helpReset, - helpMinimessage, configReload, nickChangedSelf, nickChangeOther, nickChangedByOther, nickResetSelf, - nickResetOther, nickResetByOther, noRegex, nickIsNull, nickSaveSuccess, nickSaveFailure, nickSaveFailureTooMany, - nickDeleteSuccess, nickDeleteFailure; - - - - private LocaleHandler() { - if (!localeFile.exists()) { - SimpleNicks.getInstance().saveResource(fileName, false); - } - } - - public static LocaleHandler getInstance() { - if (instance == null) instance = new LocaleHandler(); - return instance; - } - - public FileConfiguration getLocaleConfig() { - return localeConfig; - } - - - - public void loadLocale() { - try { - localeConfig.load(localeFile); - } catch (IOException | InvalidConfigurationException e) { - logger.severe("Issue loading locale.yml"); - e.printStackTrace(); - } - invalidCommand = localeConfig.getString("invalid-command", "Invalid command."); - noArguments = localeConfig.getString("no-arguments", "No arguments provided."); - tooManyArguments = localeConfig.getString("too-many-arguments", "Too many arguments provided."); - cantNickUsername = localeConfig.getString("cant-nick-username", "You cannot name yourself , as that is the username of another player on this server. Pick another name"); - noPermission = localeConfig.getString("no-permission", "You do not have permission to run this command"); - consoleCannotRun = localeConfig.getString("console-cannot-run", "This command cannot be run on the Console."); - invalidPlayer = localeConfig.getString("invalid-player", "Invalid player specified"); - invalidNickRegex = localeConfig.getString("invalid-nick-regex", "Not a valid nickname, must follow regex: "); - invalidNickTooLong = localeConfig.getString("invalid-nick-too-long", "Nickname is too long, must be <= "); - invalidTags = localeConfig.getString("invalid-tags", "You have used a color or formatting tag you do not have permission to use. Please try again"); - prefix = localeConfig.getString("prefix", "SimpleNicks » "); - helpBase = localeConfig.getString("help-base", "--------"); - helpSet = localeConfig.getString("help-set","· Setting a nickname: \n /nick set "); - helpReset = localeConfig.getString("help-reset","· removing a nickname: \n /nick reset"); - helpMinimessage = localeConfig.getString("help-minimessage", "· Formatting: \n This plugin uses minimessage formatting. You can find a format viewer here"); - configReload = localeConfig.getString("config-reload", "SimpleNicks config and locale reloaded"); - nickChangedSelf = localeConfig.getString("nick-changed-self", "Changed your own nickname to !"); - nickChangeOther = localeConfig.getString("nick-change-other", "Changed 's nickname to "); - nickChangedByOther = localeConfig.getString("nick-changed-by-other", " changed your nickname to !"); - nickResetSelf = localeConfig.getString("nick-reset-self", "Reset your own nickname!"); - nickResetOther = localeConfig.getString("nick-reset-other", "Reset 's nickname."); - nickResetByOther = localeConfig.getString("nick-reset-by-other", "Your nickname was reset by "); - noRegex = localeConfig.getString("no-regex", "nickname-regex is null or malformed in file 'config.yml'. Please fix this"); - nickIsNull = localeConfig.getString("nick-is-null", "Something went wrong and the nickname is null, please check your formatting"); - nickSaveSuccess = localeConfig.getString("nick-save-success", "Success! The nickname has been saved for future use"); - nickSaveFailure = localeConfig.getString("nick-save-failure", "Failed to save current username."); - nickSaveFailureTooMany = localeConfig.getString("nick-save-failure-too-many", "You have too many saved usernames, please remove some with /nick delete "); - nickDeleteSuccess = localeConfig.getString("nick-delete-success", "The nickname has been successfully removed from your saved names"); - nickDeleteFailure = localeConfig.getString("nick-delete-failure", "Failed to delete given username."); - } - - public String getInvalidCommand() { - return invalidCommand; - } - - public String getNoArguments() { - return noArguments; - } - - public String getTooManyArguments() { - return tooManyArguments; - } - - public String getCantNickUsername() { - return cantNickUsername; - } - - public String getNoPermission() { - return noPermission; - } - - public String getConsoleCannotRun() { - return consoleCannotRun; - } - - public String getInvalidPlayer() { - return invalidPlayer; - } - - public String getInvalidNickRegex() { - return invalidNickRegex; - } - - public String getInvalidNickTooLong() { - return invalidNickTooLong; - } - - public String getInvalidTags() { - return invalidTags; - } - - public String getPrefix() { - return prefix; - } - - public String getHelpBase() { - return helpBase; - } - - public String getHelpSet() { - return helpSet; - } - - public String getHelpReset() { - return helpReset; - } - - public String getHelpMinimessage() { - return helpMinimessage; - } - - public String getConfigReload() { - return configReload; - } - - public String getNickChangedSelf() { - return nickChangedSelf; - } - - public String getNickChangeOther() { - return nickChangeOther; - } - - public String getNickChangedByOther() { - return nickChangedByOther; - } - - public String getNickResetSelf() { - return nickResetSelf; - } - - public String getNickResetOther() { - return nickResetOther; - } - - public String getNickResetByOther() { - return nickResetByOther; - } - - public String getNoRegex() { - return noRegex; - } - - public String getNickIsNull() { - return nickIsNull; - } - - public String getNickSaveSuccess() { - return nickSaveSuccess; - } - - public String getNickSaveFailure() { - return nickSaveFailure; - } - - public String getNickSaveFailureTooMany() { - return nickSaveFailureTooMany; - } - - public String getNickDeleteSuccess() { - return nickDeleteSuccess; - } - - public String getNickDeleteFailure() { - return nickDeleteFailure; - } -} - diff --git a/src/main/java/adhdmc/simplenicks/util/SNPerm.java b/src/main/java/adhdmc/simplenicks/util/SNPerm.java deleted file mode 100644 index 522b900..0000000 --- a/src/main/java/adhdmc/simplenicks/util/SNPerm.java +++ /dev/null @@ -1,50 +0,0 @@ -package adhdmc.simplenicks.util; - -import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; -import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; - -public enum SNPerm { - //Nickname Perms - NICK_COLOR("simplenick.nick.color", StandardTags.color()), - NICK_GRADIENT("simplenick.nick.gradient", StandardTags.gradient()), - NICK_RAINBOW("simplenick.nick.rainbow", StandardTags.rainbow()), - NICK_FORMAT_RESET("simplenick.nick.format.reset", StandardTags.reset()), - NICK_UNDERLINE("simplenick.nick.format.underline", StandardTags.decorations(TextDecoration.UNDERLINED)), - NICK_ITALIC("simplenick.nick.format.italic", StandardTags.decorations(TextDecoration.ITALIC)), - NICK_STRIKETHROUGH("simplenick.nick.format.strikethrough", StandardTags.decorations(TextDecoration.STRIKETHROUGH)), - NICK_BOLD("simplenick.nick.format.bold", StandardTags.decorations(TextDecoration.BOLD)), - NICK_OBFUSCATED("simplenick.nick.format.obfuscated", StandardTags.decorations(TextDecoration.OBFUSCATED)), - //Command Perms - NICK_COMMAND("simplenick.nick.set", null), - NICK_OTHERS_RESTRICTIVE("simplenick.admin.restrictive", null), - NICK_OTHERS_BASIC("simplenick.admin.basic", null), - NICK_OTHERS_FULL("simplenick.admin.full", null), - NICK_RESET_OTHERS("simplenick.admin.reset", null), - NICK_RESET("simplenick.nick.reset", null), - NICK_SAVE("simplenick.save", null), - NICK_DELETE("simplenick.delete", null), - NICK_RELOAD("simplenick.reload", null), - NICK_USERNAME_BYPASS("simplenick.usernamebypass", null); - - private final String permission; - private final TagResolver resolver; - - SNPerm(String permission, TagResolver resolver) { - this.permission = permission; - this.resolver = resolver; - } - - SNPerm(String permission) { - this.permission = permission; - this.resolver = null; - } - - public String getPermission() { - return permission; - } - - public TagResolver getTagResolver() { - return resolver; - } -} diff --git a/src/main/java/adhdmc/simplenicks/SimpleNicks.java b/src/main/java/simplexity/simplenicks/SimpleNicks.java similarity index 66% rename from src/main/java/adhdmc/simplenicks/SimpleNicks.java rename to src/main/java/simplexity/simplenicks/SimpleNicks.java index a34250a..ad02e1d 100644 --- a/src/main/java/adhdmc/simplenicks/SimpleNicks.java +++ b/src/main/java/simplexity/simplenicks/SimpleNicks.java @@ -1,16 +1,17 @@ -package adhdmc.simplenicks; +package simplexity.simplenicks; -import adhdmc.simplenicks.commands.CommandHandler; -import adhdmc.simplenicks.commands.SubCommand; -import adhdmc.simplenicks.commands.subcommands.*; -import adhdmc.simplenicks.config.Config; -import adhdmc.simplenicks.config.LocaleHandler; -import adhdmc.simplenicks.listener.LoginListener; -import adhdmc.simplenicks.util.NickHandler; -import adhdmc.simplenicks.util.SNExpansion; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import simplexity.simplenicks.commands.CommandHandler; +import simplexity.simplenicks.commands.Set; +import simplexity.simplenicks.commands.SubCommand; +import simplexity.simplenicks.config.ConfigHandler; +import simplexity.simplenicks.config.LocaleHandler; +import simplexity.simplenicks.listener.LoginListener; +import simplexity.simplenicks.util.Constants; +import simplexity.simplenicks.util.NickHandler; +import simplexity.simplenicks.util.SNExpansion; import java.util.Collections; import java.util.HashMap; @@ -38,7 +39,7 @@ public void onEnable() { instance = this; registerSubCommands(); this.saveDefaultConfig(); - Config.getInstance().setConfigDefaults(); + ConfigHandler.getInstance().setConfigDefaults(); this.getCommand("nick").setExecutor(new CommandHandler()); if (this.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { new SNExpansion().register(); @@ -59,22 +60,21 @@ public static Map getSubCommands() { return Collections.unmodifiableMap(subCommands); } - public static Logger getSimpleNicksLogger(){ + public static Logger getSimpleNicksLogger() { return instance.getLogger(); } private void registerSubCommands() { - subCommands.put("reset", new Reset()); - subCommands.put("help", new Help()); - subCommands.put("set", new Set()); - subCommands.put("reload", new Reload()); - subCommands.put("save", new Save()); - subCommands.put("delete", new Delete()); + //subCommands.put("reset", new Reset()); + //subCommands.put("help", new Help()); + subCommands.put("set", new Set("set", Constants.NICK_COMMAND, Constants.NICK_OTHERS_RESTRICTIVE, false)); + //subCommands.put("save", new Save()); + //subCommands.put("delete", new Delete()); } public static void configReload() { LocaleHandler.getInstance().loadLocale(); - Config.getInstance().reloadConfig(); + ConfigHandler.getInstance().reloadConfig(); NickHandler.getInstance().loadSavingType(); } } diff --git a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java new file mode 100644 index 0000000..df1b30c --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java @@ -0,0 +1,125 @@ +package simplexity.simplenicks.commands; + +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import simplexity.simplenicks.SimpleNicks; +import simplexity.simplenicks.config.LocaleHandler; + +import java.util.ArrayList; +import java.util.List; + +public class CommandHandler implements TabExecutor { + private final MiniMessage miniMessage = SimpleNicks.getMiniMessage(); + private final ArrayList tabComplete = new ArrayList<>(); + + // /nick + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + if (args.length < 1) { + sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNotEnoughArgs(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + + return false; + } + if (args.length >= 2) { + if (runningOnOther(sender, args)) { + return true; + } + } + commandOnSelf(sender, args); + return true; + + } + + private boolean runningOnOther(CommandSender sender, String[] args) { + Player player = SimpleNicks.getInstance().getServer().getPlayer(args[1]); + if (player != null) { + commandOnOther(sender, args, player); + return true; + } + return false; + } + + private void commandOnOther(CommandSender sender, String[] args, Player player) { + String command = args[0].toLowerCase(); + if (!SimpleNicks.getSubCommands().containsKey(command)) { + sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidCommand(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + return; + } + SubCommand subCommand = SimpleNicks.getSubCommands().get(command); + if (!sender.hasPermission(subCommand.adminPermission)) { + sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + return; + } + subCommand.executeOnOther(sender, player, args); + } + + private void commandOnSelf(CommandSender sender, String[] args) { + String command = args[0].toLowerCase(); + Player player = null; + if (!SimpleNicks.getSubCommands().containsKey(command)) { + sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidCommand(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + return; + } + SubCommand subCommand = SimpleNicks.getSubCommands().get(command); + if (!sender.hasPermission(subCommand.basicPermission)) { + sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + return; + } + if (sender instanceof Player) { + player = (Player) sender; + } + if (player == null && !subCommand.canRunWithoutPlayer()) { + sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getMustBePlayer(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + return; + } + subCommand.executeOnSelf(sender, player, args); + } + + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + tabComplete.clear(); + switch (args.length) { + case 1 -> tabComplete.addAll(keyLoop(sender)); + case 2 -> { + if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) { + SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); + if (sender.hasPermission(subCommand.adminPermission)) { + return null; + } + } + } + case 3 -> { + if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) { + SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); + return subCommand.tabComplete(sender); + } + } + } + return tabComplete; + } + + private List keyLoop(CommandSender sender) { + List keyList = new ArrayList<>(); + for (String key : SimpleNicks.getSubCommands().keySet()) { + if (!sender.hasPermission(SimpleNicks.getSubCommands().get(key).basicPermission) || + !sender.hasPermission(SimpleNicks.getSubCommands().get(key).getAdminPermission())) { + continue; + } + keyList.add(key); + } + return keyList; + } +} diff --git a/src/main/java/simplexity/simplenicks/commands/Reset.java b/src/main/java/simplexity/simplenicks/commands/Reset.java new file mode 100644 index 0000000..c5fbb58 --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/Reset.java @@ -0,0 +1,4 @@ +package simplexity.simplenicks.commands; + +public class Reset { +} diff --git a/src/main/java/simplexity/simplenicks/commands/Set.java b/src/main/java/simplexity/simplenicks/commands/Set.java new file mode 100644 index 0000000..2756e21 --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/Set.java @@ -0,0 +1,63 @@ +package simplexity.simplenicks.commands; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import simplexity.simplenicks.util.NickHandler; +import simplexity.simplenicks.util.TagPermission; + +import java.util.ArrayList; + +public class Set extends SubCommand { + + public Set(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { + super(commandName, basicPermission, adminPermission, consoleRunNoPlayer); + } + + @Override + public void executeOnOther(CommandSender sender, Player player, String[] args) { + + + } + + @Override + public void executeOnSelf(CommandSender sender, Player player, String[] args) { + String nickname = args[1]; + Component nickComponent = getNickComponent(player, nickname); + String nickToSave = miniMessage.serialize(nickComponent); + NickHandler.getInstance().setNickname(player, nickToSave); + player.sendMessage(miniMessage.deserialize("Nickname set to: " + nickComponent)); + player.sendMessage(miniMessage.deserialize("Nickname saved as: " + nickToSave)); + } + + private void setPlayerNick(Player player, String nick, TagResolver resolver) { + Component nameComponent = miniMessage.deserialize(nick, resolver); + NickHandler.getInstance().setNickname(player, nick); + } + + @Override + public ArrayList tabComplete(CommandSender sender) { + return null; + } + + private Component getNickComponent(Player player, String nick) { + int i = 0; + TagResolver.Builder resolverBuilder = TagResolver.builder(); + for (TagPermission tagPermission : TagPermission.values()) { + if (!player.hasPermission(tagPermission.getPermission())) { + continue; + } + i++; + resolverBuilder.resolver(tagPermission.getTagResolver()); + } + if (i == 0) { + String strippedMessage = miniMessage.stripTags(nick); + return Component.text(strippedMessage); + } + return miniMessage.deserialize(nick, resolverBuilder.build()); + } + + +} diff --git a/src/main/java/simplexity/simplenicks/commands/SubCommand.java b/src/main/java/simplexity/simplenicks/commands/SubCommand.java new file mode 100644 index 0000000..3cc590a --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/SubCommand.java @@ -0,0 +1,69 @@ +package simplexity.simplenicks.commands; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import simplexity.simplenicks.SimpleNicks; +import simplexity.simplenicks.config.LocaleHandler; + +import java.util.ArrayList; + +public abstract class SubCommand { + public final String commandName; + public final Permission basicPermission; + public final Permission adminPermission; + public final boolean canRunWithoutPlayer; + public final MiniMessage miniMessage = SimpleNicks.getMiniMessage(); + + public SubCommand(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { + this.commandName = commandName; + this.basicPermission = basicPermission; + this.adminPermission = adminPermission; + this.canRunWithoutPlayer = consoleRunNoPlayer; + } + + public abstract void executeOnOther(CommandSender sender, Player player, String[] args); + + public abstract void executeOnSelf(CommandSender sender, Player player, String[] args); + + public abstract ArrayList tabComplete(CommandSender sender); + + public String getCommandName() { + return commandName; + } + + public Permission getBasicPermission() { + return basicPermission; + } + + public Permission getAdminPermission() { + return adminPermission; + } + + public boolean canRunWithoutPlayer() { + return canRunWithoutPlayer; + } + + public Component parsedMessage(CommandSender sender, Player player, String message, String value) { + Component senderName; + Component playerName; + if (sender == null) { + senderName = Component.empty(); + } else { + senderName = sender.name(); + } + if (player == null) { + playerName = Component.empty(); + } else { + playerName = player.name(); + } + return miniMessage.deserialize(message, + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()), + Placeholder.component("initiator", senderName), + Placeholder.component("target", playerName), + Placeholder.parsed("value", value)); + } +} diff --git a/src/main/java/adhdmc/simplenicks/config/Config.java b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java similarity index 62% rename from src/main/java/adhdmc/simplenicks/config/Config.java rename to src/main/java/simplexity/simplenicks/config/ConfigHandler.java index 2b6e510..94978de 100644 --- a/src/main/java/adhdmc/simplenicks/config/Config.java +++ b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java @@ -1,26 +1,29 @@ -package adhdmc.simplenicks.config; +package simplexity.simplenicks.config; -import adhdmc.simplenicks.SimpleNicks; import org.bukkit.configuration.file.FileConfiguration; +import simplexity.simplenicks.SimpleNicks; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; -public class Config { +public class ConfigHandler { - public enum SAVING_TYPE { PDC, FILE } - private static Config instance; + public enum SAVING_TYPE {PDC, FILE} + + private static ConfigHandler instance; private Pattern regex = Pattern.compile("[A-Za-z0-9_]+"); private SAVING_TYPE savingType = SAVING_TYPE.FILE; private int maxLength = 25; private int maxSaves = 5; + private boolean tablistNick = false; - private Config() {} + private ConfigHandler() { + } - public static Config getInstance() { + public static ConfigHandler getInstance() { if (instance != null) return instance; - instance = new Config(); + instance = new ConfigHandler(); return instance; } @@ -33,9 +36,8 @@ public void reloadConfig() { assert regexSetting != null; assert !regexSetting.isBlank(); regex = Pattern.compile(regexSetting); - } - catch (AssertionError | PatternSyntaxException e) { - SimpleNicks.getSimpleNicksLogger().severe(LocaleHandler.getInstance().getNoRegex()); + } catch (AssertionError | PatternSyntaxException e) { + SimpleNicks.getSimpleNicksLogger().severe(LocaleHandler.getInstance().getInvalidConfigRegex()); } // Check validity of saving-type. try { @@ -47,18 +49,35 @@ public void reloadConfig() { } maxLength = SimpleNicks.getInstance().getConfig().getInt("max-nickname-length"); maxSaves = SimpleNicks.getInstance().getConfig().getInt("max-saves"); + tablistNick = SimpleNicks.getInstance().getConfig().getBoolean("tablist-nick"); } public void setConfigDefaults() { FileConfiguration config = SimpleNicks.getInstance().getConfig(); - config.addDefault("saving-type","file"); + config.addDefault("saving-type", "file"); config.addDefault("max-nickname-length", 25); config.addDefault("max-saves", 5); - config.addDefault("nickname-regex","[A-Za-z0-9_]+"); + config.addDefault("nickname-regex", "[A-Za-z0-9_]+"); + config.addDefault("tablist-nick", false); + } + + public Pattern getRegex() { + return regex; + } + + public SAVING_TYPE getSavingType() { + return savingType; + } + + public int getMaxLength() { + return maxLength; } - public Pattern getRegex() { return regex; } - public SAVING_TYPE getSavingType() { return savingType; } - public int getMaxLength() { return maxLength; } - public int getMaxSaves() { return maxSaves; } + public int getMaxSaves() { + return maxSaves; + } + + public boolean shouldNickTablist() { + return tablistNick; + } } diff --git a/src/main/java/simplexity/simplenicks/config/LocaleHandler.java b/src/main/java/simplexity/simplenicks/config/LocaleHandler.java new file mode 100644 index 0000000..7a418de --- /dev/null +++ b/src/main/java/simplexity/simplenicks/config/LocaleHandler.java @@ -0,0 +1,192 @@ +package simplexity.simplenicks.config; + +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import simplexity.simplenicks.SimpleNicks; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; + +public class LocaleHandler { + private static LocaleHandler instance; + private final String fileName = "locale.yml"; + private final File localeFile = new File(SimpleNicks.getInstance().getDataFolder(), fileName); + private final FileConfiguration localeConfig = new YamlConfiguration(); + private final Logger logger = SimpleNicks.getInstance().getLogger(); + //Plugin + private String pluginPrefix, helpMessage, configReloaded; + //Errors + private String invalidCommand, invalidPlayer, invalidNick, invalidNickLength, invalidTags, invalidConfigRegex, + tooManyArgs, notEnoughArgs, nickIsNull, deleteFailure, saveFailure, tooManyToSave, otherPlayersUsername, + noPermission, mustBePlayer; + //Nick + private String changedSelf, changedOther, changedByOther, resetSelf, resetOther, resetByOther, saveNick, deleteNick; + + + private LocaleHandler() { + if (!localeFile.exists()) { + SimpleNicks.getInstance().saveResource(fileName, false); + } + } + + public static LocaleHandler getInstance() { + if (instance == null) instance = new LocaleHandler(); + return instance; + } + + public FileConfiguration getLocaleConfig() { + return localeConfig; + } + + + public void loadLocale() { + try { + localeConfig.load(localeFile); + } catch (IOException | InvalidConfigurationException e) { + logger.severe("Issue loading locale.yml"); + e.printStackTrace(); + } + pluginPrefix = localeConfig.getString("plugin.prefix", "SimpleNicks » "); + helpMessage = localeConfig.getString("plugin.help-message", + " ========================\n" + + " · Setting a nickname: \n" + + " /nick set \n" + + " · removing a nickname: \n" + + " /nick reset\"\n" + + " · Formatting: \n" + + " This plugin uses minimessage formatting. You can find a format viewer here\"\n" + + " "); + configReloaded = localeConfig.getString("plugin.config-reloaded", "SimpleNicks config and locale reloaded"); + invalidCommand = localeConfig.getString("error.invalid.command", "Invalid command."); + invalidPlayer = localeConfig.getString("error.invalid.player", "Invalid player specified"); + invalidNick = localeConfig.getString("error.invalid.nick", "Not a valid nickname, must follow regex: "); + invalidNickLength = localeConfig.getString("error.invalid.nick-length", "Nickname is too long, must be <= "); + invalidTags = localeConfig.getString("error.invalid.tags", "You have used a color or formatting tag you do not have permission to use. Please try again"); + invalidConfigRegex = localeConfig.getString("error.invalid.config-regex", "nickname-regex is null or malformed in file 'config.yml'. Please fix this"); + notEnoughArgs = localeConfig.getString("error.arguments.not-enough", "No arguments provided."); + tooManyArgs = localeConfig.getString("error.arguments.too-many", "Too many arguments provided."); + nickIsNull = localeConfig.getString("error.nickname.is-null", "Something went wrong and the nickname is null, please check your formatting"); + deleteFailure = localeConfig.getString("error.nickname.delete-failure", "Failed to delete given username."); + saveFailure = localeConfig.getString("error.nickname.save-failure", "Failed to save current username."); + tooManyToSave = localeConfig.getString("error.nickname.too-many-to-save", "You have too many saved usernames, please remove some with /nick delete "); + otherPlayersUsername = localeConfig.getString("error.nickname.other-players-username", "You cannot name yourself , as that is the username of another player on this server. Pick another name"); + noPermission = localeConfig.getString("error.no-permission", "You do not have permission to run this command"); + mustBePlayer = localeConfig.getString("error.must-be-player", "This command cannot be run on the Console. You must be a player to run this command"); + changedSelf = localeConfig.getString("nick.changed.self", "Changed your nickname to !"); + changedOther = localeConfig.getString("nick.changed.other", "Changed 's nickname to "); + changedByOther = localeConfig.getString("nick.changed.by-other", " changed your nickname to !"); + resetSelf = localeConfig.getString("nick.reset.self", "Reset your nickname!"); + resetOther = localeConfig.getString("nick.reset.other", "Reset 's nickname."); + resetByOther = localeConfig.getString("nick.reset.reset-by-other", "Your nickname was reset by "); + saveNick = localeConfig.getString("nick.save", "Success! The nickname has been saved for future use"); + deleteNick = localeConfig.getString("nick.delete", "The nickname has been successfully removed from your saved names"); + } + + + public String getPluginPrefix() { + return pluginPrefix; + } + + public String getHelpMessage() { + return helpMessage; + } + + public String getConfigReloaded() { + return configReloaded; + } + + public String getInvalidCommand() { + return invalidCommand; + } + + public String getInvalidPlayer() { + return invalidPlayer; + } + + public String getInvalidNick() { + return invalidNick; + } + + public String getInvalidNickLength() { + return invalidNickLength; + } + + public String getInvalidTags() { + return invalidTags; + } + + public String getInvalidConfigRegex() { + return invalidConfigRegex; + } + + public String getTooManyArgs() { + return tooManyArgs; + } + + public String getNotEnoughArgs() { + return notEnoughArgs; + } + + public String getNickIsNull() { + return nickIsNull; + } + + public String getDeleteFailure() { + return deleteFailure; + } + + public String getSaveFailure() { + return saveFailure; + } + + public String getTooManyToSave() { + return tooManyToSave; + } + + public String getOtherPlayersUsername() { + return otherPlayersUsername; + } + + public String getNoPermission() { + return noPermission; + } + + public String getMustBePlayer() { + return mustBePlayer; + } + + public String getChangedSelf() { + return changedSelf; + } + + public String getChangedOther() { + return changedOther; + } + + public String getChangedByOther() { + return changedByOther; + } + + public String getResetSelf() { + return resetSelf; + } + + public String getResetOther() { + return resetOther; + } + + public String getResetByOther() { + return resetByOther; + } + + public String getSaveNick() { + return saveNick; + } + + public String getDeleteNick() { + return deleteNick; + } +} + diff --git a/src/main/java/adhdmc/simplenicks/listener/LoginListener.java b/src/main/java/simplexity/simplenicks/listener/LoginListener.java similarity index 82% rename from src/main/java/adhdmc/simplenicks/listener/LoginListener.java rename to src/main/java/simplexity/simplenicks/listener/LoginListener.java index cbba75b..b43f4f3 100644 --- a/src/main/java/adhdmc/simplenicks/listener/LoginListener.java +++ b/src/main/java/simplexity/simplenicks/listener/LoginListener.java @@ -1,10 +1,10 @@ -package adhdmc.simplenicks.listener; +package simplexity.simplenicks.listener; -import adhdmc.simplenicks.util.NickHandler; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import simplexity.simplenicks.util.NickHandler; public class LoginListener implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) diff --git a/src/main/java/simplexity/simplenicks/util/Constants.java b/src/main/java/simplexity/simplenicks/util/Constants.java new file mode 100644 index 0000000..1444cdd --- /dev/null +++ b/src/main/java/simplexity/simplenicks/util/Constants.java @@ -0,0 +1,16 @@ +package simplexity.simplenicks.util; + +import org.bukkit.permissions.Permission; + +public class Constants { + public static Permission NICK_COMMAND = new Permission("simplenick.nick.set"); + public static Permission NICK_OTHERS_RESTRICTIVE = new Permission("simplenick.admin.restrictive"); + public static Permission NICK_OTHERS_BASIC = new Permission("simplenick.admin.basic"); + public static Permission NICK_OTHERS_FULL = new Permission("simplenick.admin.full"); + public static Permission NICK_RESET_OTHERS = new Permission("simplenick.admin.reset"); + public static Permission NICK_RESET = new Permission("simplenick.nick.reset"); + public static Permission NICK_SAVE = new Permission("simplenick.save"); + public static Permission NICK_DELETE = new Permission("simplenick.delete"); + public static Permission NICK_RELOAD = new Permission("simplenick.reload"); + public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.usernamebypass"); +} diff --git a/src/main/java/adhdmc/simplenicks/util/NickHandler.java b/src/main/java/simplexity/simplenicks/util/NickHandler.java similarity index 53% rename from src/main/java/adhdmc/simplenicks/util/NickHandler.java rename to src/main/java/simplexity/simplenicks/util/NickHandler.java index 372c54c..f7adb0a 100644 --- a/src/main/java/adhdmc/simplenicks/util/NickHandler.java +++ b/src/main/java/simplexity/simplenicks/util/NickHandler.java @@ -1,12 +1,13 @@ -package adhdmc.simplenicks.util; +package simplexity.simplenicks.util; -import adhdmc.simplenicks.config.Config; -import adhdmc.simplenicks.util.saving.AbstractSaving; -import adhdmc.simplenicks.util.saving.PlayerPDC; -import adhdmc.simplenicks.util.saving.YMLFile; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import simplexity.simplenicks.SimpleNicks; +import simplexity.simplenicks.config.ConfigHandler; +import simplexity.simplenicks.util.saving.AbstractSaving; +import simplexity.simplenicks.util.saving.PlayerPDC; +import simplexity.simplenicks.util.saving.YMLFile; import java.util.List; @@ -15,8 +16,10 @@ public class NickHandler { private static NickHandler instance; private AbstractSaving saveHandler; + private final MiniMessage miniMessage = SimpleNicks.getMiniMessage(); - private NickHandler() {} + private NickHandler() { + } public static NickHandler getInstance() { if (instance != null) return instance; @@ -25,7 +28,10 @@ public static NickHandler getInstance() { return instance; } - public String getNickname(OfflinePlayer p) { return saveHandler.getNickname(p); } + public String getNickname(OfflinePlayer p) { + return saveHandler.getNickname(p); + } + public boolean setNickname(OfflinePlayer p, String nickname) { if (!saveHandler.setNickname(p, nickname)) return false; refreshNickname(p); @@ -42,20 +48,35 @@ public boolean refreshNickname(OfflinePlayer p) { Player player = p.getPlayer(); if (player == null) return false; String nicknameRaw = getNickname(p); - if (nicknameRaw == null || nicknameRaw.isBlank()) player.displayName(null); - else player.displayName(MiniMessage.miniMessage().deserialize(nicknameRaw)); + if (nicknameRaw == null || nicknameRaw.isBlank()) { + player.displayName(null); + } else { + player.displayName(miniMessage.deserialize(nicknameRaw)); + if (ConfigHandler.getInstance().shouldNickTablist()) { + player.playerListName(miniMessage.deserialize(nicknameRaw)); + } + } + return true; } public void loadSavingType() { - switch (Config.getInstance().getSavingType()) { + switch (ConfigHandler.getInstance().getSavingType()) { case PDC -> saveHandler = new PlayerPDC(); case FILE -> saveHandler = new YMLFile(); } saveHandler.init(); } - public boolean saveNickname(OfflinePlayer p, String nickname) { return saveHandler.saveNickname(p, nickname); } - public boolean deleteNickname(OfflinePlayer p, String nickname) { return saveHandler.deleteNickname(p, nickname); } - public List getSavedNicknames(OfflinePlayer p) { return saveHandler.getSavedNicknames(p); } + public boolean saveNickname(OfflinePlayer p, String nickname) { + return saveHandler.saveNickname(p, nickname); + } + + public boolean deleteNickname(OfflinePlayer p, String nickname) { + return saveHandler.deleteNickname(p, nickname); + } + + public List getSavedNicknames(OfflinePlayer p) { + return saveHandler.getSavedNicknames(p); + } } diff --git a/src/main/java/adhdmc/simplenicks/util/SNExpansion.java b/src/main/java/simplexity/simplenicks/util/SNExpansion.java similarity index 91% rename from src/main/java/adhdmc/simplenicks/util/SNExpansion.java rename to src/main/java/simplexity/simplenicks/util/SNExpansion.java index 6a8c34c..5c61cc7 100644 --- a/src/main/java/adhdmc/simplenicks/util/SNExpansion.java +++ b/src/main/java/simplexity/simplenicks/util/SNExpansion.java @@ -1,9 +1,9 @@ -package adhdmc.simplenicks.util; +package simplexity.simplenicks.util; -import adhdmc.simplenicks.SimpleNicks; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; +import simplexity.simplenicks.SimpleNicks; public class SNExpansion extends PlaceholderExpansion { @Override diff --git a/src/main/java/simplexity/simplenicks/util/TagPermission.java b/src/main/java/simplexity/simplenicks/util/TagPermission.java new file mode 100644 index 0000000..5154075 --- /dev/null +++ b/src/main/java/simplexity/simplenicks/util/TagPermission.java @@ -0,0 +1,36 @@ +package simplexity.simplenicks.util; + +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; +import org.bukkit.command.CommandSender; + +public enum TagPermission { + //Nickname Perms + COLOR("simplenick.nick.color", StandardTags.color()), + GRADIENT("simplenick.nick.gradient", StandardTags.gradient()), + RAINBOW("simplenick.nick.rainbow", StandardTags.rainbow()), + RESET("simplenick.nick.format.reset", StandardTags.reset()), + UNDERLINE("simplenick.nick.format.underline", StandardTags.decorations(TextDecoration.UNDERLINED)), + ITALIC("simplenick.nick.format.italic", StandardTags.decorations(TextDecoration.ITALIC)), + STRIKETHROUGH("simplenick.nick.format.strikethrough", StandardTags.decorations(TextDecoration.STRIKETHROUGH)), + BOLD("simplenick.nick.format.bold", StandardTags.decorations(TextDecoration.BOLD)), + OBFUSCATED("simplenick.nick.format.obfuscated", StandardTags.decorations(TextDecoration.OBFUSCATED)); + + + private final String permission; + private final TagResolver resolver; + + TagPermission(String permission, TagResolver resolver) { + this.permission = permission; + this.resolver = resolver; + } + + public String getPermission() { + return permission; + } + + public TagResolver getTagResolver() { + return resolver; + } +} diff --git a/src/main/java/adhdmc/simplenicks/util/saving/AbstractSaving.java b/src/main/java/simplexity/simplenicks/util/saving/AbstractSaving.java similarity index 91% rename from src/main/java/adhdmc/simplenicks/util/saving/AbstractSaving.java rename to src/main/java/simplexity/simplenicks/util/saving/AbstractSaving.java index 04516cb..7b04009 100644 --- a/src/main/java/adhdmc/simplenicks/util/saving/AbstractSaving.java +++ b/src/main/java/simplexity/simplenicks/util/saving/AbstractSaving.java @@ -1,4 +1,4 @@ -package adhdmc.simplenicks.util.saving; +package simplexity.simplenicks.util.saving; import org.bukkit.OfflinePlayer; @@ -7,10 +7,16 @@ public abstract class AbstractSaving { public abstract void init(); + public abstract String getNickname(OfflinePlayer p); + public abstract boolean setNickname(OfflinePlayer p, String nickname); + public abstract boolean saveNickname(OfflinePlayer p, String nickname); + public abstract boolean deleteNickname(OfflinePlayer p, String nickname); + public abstract boolean resetNickname(OfflinePlayer p); + public abstract List getSavedNicknames(OfflinePlayer p); } diff --git a/src/main/java/adhdmc/simplenicks/util/saving/PlayerPDC.java b/src/main/java/simplexity/simplenicks/util/saving/PlayerPDC.java similarity index 93% rename from src/main/java/adhdmc/simplenicks/util/saving/PlayerPDC.java rename to src/main/java/simplexity/simplenicks/util/saving/PlayerPDC.java index ef43ae0..c0257ca 100644 --- a/src/main/java/adhdmc/simplenicks/util/saving/PlayerPDC.java +++ b/src/main/java/simplexity/simplenicks/util/saving/PlayerPDC.java @@ -1,11 +1,11 @@ -package adhdmc.simplenicks.util.saving; +package simplexity.simplenicks.util.saving; -import adhdmc.simplenicks.SimpleNicks; import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import simplexity.simplenicks.SimpleNicks; import java.util.ArrayList; import java.util.List; @@ -14,7 +14,8 @@ public class PlayerPDC extends AbstractSaving { public static final NamespacedKey nickNameSave = new NamespacedKey(SimpleNicks.getInstance(), "nickname"); @Override - public void init() { } + public void init() { + } @Override public String getNickname(OfflinePlayer p) { diff --git a/src/main/java/adhdmc/simplenicks/util/saving/YMLFile.java b/src/main/java/simplexity/simplenicks/util/saving/YMLFile.java similarity index 85% rename from src/main/java/adhdmc/simplenicks/util/saving/YMLFile.java rename to src/main/java/simplexity/simplenicks/util/saving/YMLFile.java index c70d024..31c09fd 100644 --- a/src/main/java/adhdmc/simplenicks/util/saving/YMLFile.java +++ b/src/main/java/simplexity/simplenicks/util/saving/YMLFile.java @@ -1,11 +1,11 @@ -package adhdmc.simplenicks.util.saving; +package simplexity.simplenicks.util.saving; -import adhdmc.simplenicks.SimpleNicks; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import simplexity.simplenicks.SimpleNicks; import java.io.File; import java.io.IOException; @@ -20,11 +20,17 @@ public class YMLFile extends AbstractSaving { public void init() { if (!dataFile.exists()) { dataFile.getParentFile().mkdirs(); - try { nicknameData.save(dataFile); } - catch (IOException e) { e.printStackTrace(); } + try { + nicknameData.save(dataFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + nicknameData.load(dataFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); } - try { nicknameData.load(dataFile); } - catch (IOException | InvalidConfigurationException e) { e.printStackTrace(); } } @Override @@ -81,8 +87,9 @@ public List getSavedNicknames(OfflinePlayer p) { } private boolean saveData() { - try { nicknameData.save(dataFile); } - catch (IOException e) { + try { + nicknameData.save(dataFile); + } catch (IOException e) { e.printStackTrace(); return false; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5b694c2..ee80be3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -13,4 +13,8 @@ max-nickname-length: 30 nickname-regex: "[A-Za-z0-9_]+" # How many nicknames can be saved? -max-saves: 5 \ No newline at end of file +max-saves: 5 + +# Should names be changed in tablist? +# (Keep this false if you use any other tablist plugin, there are placeholder API placeholders to use on those) +tablist-nick: false \ No newline at end of file diff --git a/src/main/resources/locale.yml b/src/main/resources/locale.yml index 914bd14..392393b 100644 --- a/src/main/resources/locale.yml +++ b/src/main/resources/locale.yml @@ -1,29 +1,41 @@ -invalid-command: "Invalid command." -no-arguments: "No arguments provided." -too-many-arguments: "Too many arguments provided." -cant-nick-username: "You cannot name yourself , as that is the username of another player on this server. Pick another name" -no-permission: "You do not have permission to run this command" -console-cannot-run: "This command cannot be run on the Console." -invalid-player: "Invalid player specified" -invalid-nick-regex: "Not a valid nickname, must follow regex: " -invalid-nick-too-long: "Nickname is too long, must be <= " -invalid-tags: "You have used a color or formatting tag you do not have permission to use. Please try again" -prefix: "SimpleNicks » " -help-base: "--------" -help-set: "· Setting a nickname: \n /nick set " -help-reset: "· removing a nickname: \n /nick reset" -help-minimessage: "· Formatting: \n This plugin uses minimessage formatting. You can find a format viewer here" -config-reload: "SimpleNicks config and locale reloaded" -nick-changed-self: "Changed your own nickname to !" -nick-change-other: "Changed 's nickname to " -nick-changed-by-other: " changed your nickname to !" -nick-reset-self: "Reset your own nickname!" -nick-reset-other: "Reset 's nickname." -nick-reset-by-other: "Your nickname was reset by " -no-regex: "nickname-regex is null or malformed in file 'config.yml'. Please fix this" -nick-is-null: "Something went wrong and the nickname is null, please check your formatting" -nick-save-success: "Success! The nickname has been saved for future use" -nick-save-failure: "Failed to save current username." -nick-save-failure-too-many: "You have too many saved usernames, please remove some with /nick delete " -nick-delete-success: "The nickname has been successfully removed from your saved names" -nick-delete-failure: "Failed to delete given username." \ No newline at end of file +plugin: + prefix: "SimpleNicks » " + help-message: > + ======================== + · Setting a nickname: + /nick set + · removing a nickname: + /nick reset" + · Formatting: + This plugin uses minimessage formatting. You can find a format viewer here" + config-reloaded: "SimpleNicks config and locale reloaded" +error: + invalid: + command: "Invalid command." + player: "Invalid player specified" + nick: "Not a valid nickname, must follow regex: " + nick-length: "Nickname is too long, must be <= " + tags: "You have used a color or formatting tag you do not have permission to use. Please try again" + config-regex: "nickname-regex is null or malformed in file 'config.yml'. Please fix this" + arguments: + not-enough: "No arguments provided." + too-many: "Too many arguments provided." + nickname: + is-null: "Something went wrong and the nickname is null, please check your formatting" + delete-failure: "Failed to delete given username." + save-failure: "Failed to save current username." + too-many-to-save: "You have too many saved usernames, please remove some with /nick delete " + other-players-username: "You cannot name yourself , as that is the username of another player on this server. Pick another name" + no-permission: "You do not have permission to run this command" + must-be-player: "This command cannot be run on the Console. You must be a player to run this command" +nick: + changed: + self: "Changed your nickname to !" + other: "Changed 's nickname to " + by-other: " changed your nickname to !" + reset: + self: "Reset your nickname!" + other: "Reset 's nickname." + by-other: "Your nickname was reset by " + save: "Success! The nickname has been saved for future use" + delete: "The nickname has been successfully removed from your saved names" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 964b3d0..ab09d6a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: SimpleNicks version: '${project.version}' -main: adhdmc.simplenicks.SimpleNicks +main: simplexity.simplenicks.SimpleNicks authors: ['Rhythmic', 'Peashooter101'] api-version: 1.19 softdepend: From 15a79d4b659cc218a110022a4850e5c7a8cc2d54 Mon Sep 17 00:00:00 2001 From: Rhythmic System Date: Wed, 26 Jun 2024 14:50:47 -0700 Subject: [PATCH 2/5] committing --- .../simplexity/simplenicks/SimpleNicks.java | 3 +- .../simplenicks/commands/CommandHandler.java | 24 ++++----- .../simplenicks/commands/Reset.java | 39 +++++++++++++- .../simplexity/simplenicks/commands/Save.java | 54 +++++++++++++++++++ .../simplexity/simplenicks/commands/Set.java | 52 +++++++++++++----- .../simplenicks/util/TagPermission.java | 4 +- 6 files changed, 146 insertions(+), 30 deletions(-) create mode 100644 src/main/java/simplexity/simplenicks/commands/Save.java diff --git a/src/main/java/simplexity/simplenicks/SimpleNicks.java b/src/main/java/simplexity/simplenicks/SimpleNicks.java index ad02e1d..a0c5cbb 100644 --- a/src/main/java/simplexity/simplenicks/SimpleNicks.java +++ b/src/main/java/simplexity/simplenicks/SimpleNicks.java @@ -4,6 +4,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import simplexity.simplenicks.commands.CommandHandler; +import simplexity.simplenicks.commands.Reset; import simplexity.simplenicks.commands.Set; import simplexity.simplenicks.commands.SubCommand; import simplexity.simplenicks.config.ConfigHandler; @@ -65,7 +66,7 @@ public static Logger getSimpleNicksLogger() { } private void registerSubCommands() { - //subCommands.put("reset", new Reset()); + subCommands.put("reset", new Reset("reset", Constants.NICK_RESET, Constants.NICK_RESET_OTHERS, false)); //subCommands.put("help", new Help()); subCommands.put("set", new Set("set", Constants.NICK_COMMAND, Constants.NICK_OTHERS_RESTRICTIVE, false)); //subCommands.put("save", new Save()); diff --git a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java index df1b30c..906d5eb 100644 --- a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java +++ b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java @@ -91,8 +91,16 @@ private void commandOnSelf(CommandSender sender, String[] args) { @Override public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { tabComplete.clear(); - switch (args.length) { - case 1 -> tabComplete.addAll(keyLoop(sender)); + int argsLength = args.length; + switch (argsLength) { + case 0, 1 -> { + for (String key : SimpleNicks.getSubCommands().keySet()) { + if (sender.hasPermission(SimpleNicks.getSubCommands().get(key).basicPermission) || + sender.hasPermission(SimpleNicks.getSubCommands().get(key).getAdminPermission())) { + tabComplete.add(key); + } + } + } case 2 -> { if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) { SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); @@ -110,16 +118,4 @@ private void commandOnSelf(CommandSender sender, String[] args) { } return tabComplete; } - - private List keyLoop(CommandSender sender) { - List keyList = new ArrayList<>(); - for (String key : SimpleNicks.getSubCommands().keySet()) { - if (!sender.hasPermission(SimpleNicks.getSubCommands().get(key).basicPermission) || - !sender.hasPermission(SimpleNicks.getSubCommands().get(key).getAdminPermission())) { - continue; - } - keyList.add(key); - } - return keyList; - } } diff --git a/src/main/java/simplexity/simplenicks/commands/Reset.java b/src/main/java/simplexity/simplenicks/commands/Reset.java index c5fbb58..2b8f368 100644 --- a/src/main/java/simplexity/simplenicks/commands/Reset.java +++ b/src/main/java/simplexity/simplenicks/commands/Reset.java @@ -1,4 +1,41 @@ package simplexity.simplenicks.commands; -public class Reset { +import net.kyori.adventure.text.Component; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import simplexity.simplenicks.config.LocaleHandler; +import simplexity.simplenicks.util.NickHandler; + +import java.util.ArrayList; + +public class Reset extends SubCommand { + + public Reset(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { + super(commandName, basicPermission, adminPermission, consoleRunNoPlayer); + } + + @Override + public void executeOnOther(CommandSender sender, Player player, String[] args) { + resetName(player); + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getResetOther(), player.getName())); + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getResetByOther(), player.getName())); + } + + @Override + public void executeOnSelf(CommandSender sender, Player player, String[] args) { + resetName(player); + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getResetSelf(), player.getName())); + } + + public void resetName(Player player) { + String username = player.getName(); + player.displayName(Component.text(username)); + NickHandler.getInstance().resetNickname(player); + } + + @Override + public ArrayList tabComplete(CommandSender sender) { + return null; + } } diff --git a/src/main/java/simplexity/simplenicks/commands/Save.java b/src/main/java/simplexity/simplenicks/commands/Save.java new file mode 100644 index 0000000..8b4c2e7 --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/Save.java @@ -0,0 +1,54 @@ +package simplexity.simplenicks.commands; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import simplexity.simplenicks.config.ConfigHandler; +import simplexity.simplenicks.config.LocaleHandler; +import simplexity.simplenicks.util.NickHandler; + +import java.util.ArrayList; +import java.util.List; + +public class Save extends SubCommand{ + public Save(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { + super(commandName, basicPermission, adminPermission, consoleRunNoPlayer); + } + + @Override + public void executeOnOther(CommandSender sender, Player player, String[] args) { + if (savePlayerNick(player)) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getSaveNick(), miniMessage.serialize(player.displayName()))); + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getSaveNick(), miniMessage.serialize(player.displayName()))); + } else { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getSaveFailure(), String.valueOf(ConfigHandler.getInstance().getMaxSaves()))); + } + } + + @Override + public void executeOnSelf(CommandSender sender, Player player, String[] args) { + if (savePlayerNick(player)) { + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getSaveNick(), miniMessage.serialize(player.displayName()))); + } else { + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getSaveFailure(), String.valueOf(ConfigHandler.getInstance().getMaxSaves()))); + } + } + + public boolean savePlayerNick(Player player) { + String nameToSave = miniMessage.serialize(player.displayName()); + List nameList = NickHandler.getInstance().getSavedNicknames(player); + if (nameList.contains(nameToSave)) { + return false; + } + if (nameList.size() >= ConfigHandler.getInstance().getMaxSaves()) { + return false; + } + NickHandler.getInstance().saveNickname(player, nameToSave); + return true; + } + + @Override + public ArrayList tabComplete(CommandSender sender) { + return null; + } +} diff --git a/src/main/java/simplexity/simplenicks/commands/Set.java b/src/main/java/simplexity/simplenicks/commands/Set.java index 2756e21..1d5c2b3 100644 --- a/src/main/java/simplexity/simplenicks/commands/Set.java +++ b/src/main/java/simplexity/simplenicks/commands/Set.java @@ -1,16 +1,20 @@ package simplexity.simplenicks.commands; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; +import simplexity.simplenicks.config.LocaleHandler; import simplexity.simplenicks.util.NickHandler; import simplexity.simplenicks.util.TagPermission; import java.util.ArrayList; public class Set extends SubCommand { + MiniMessage serializer = MiniMessage.builder().tags(TagResolver.empty()).build(); public Set(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { super(commandName, basicPermission, adminPermission, consoleRunNoPlayer); @@ -18,23 +22,41 @@ public Set(String commandName, Permission basicPermission, Permission adminPermi @Override public void executeOnOther(CommandSender sender, Player player, String[] args) { - - + if (args.length < 3) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), "")); + return; + } + String nickname = args[2]; + if (setPlayerNick(player, nickname)){ + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedOther(), nickname)); + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedByOther(), nickname)); + } else { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getInvalidTags(), nickname)); + } } @Override public void executeOnSelf(CommandSender sender, Player player, String[] args) { + if (args.length < 2) { + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), "")); + return; + } String nickname = args[1]; + if (setPlayerNick(player, nickname)){ + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedSelf(), nickname)); + } else { + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getInvalidTags(), nickname)); + } + } + + private boolean setPlayerNick(Player player, String nickname) { Component nickComponent = getNickComponent(player, nickname); + if (nickComponent == null) { + return false; + } String nickToSave = miniMessage.serialize(nickComponent); NickHandler.getInstance().setNickname(player, nickToSave); - player.sendMessage(miniMessage.deserialize("Nickname set to: " + nickComponent)); - player.sendMessage(miniMessage.deserialize("Nickname saved as: " + nickToSave)); - } - - private void setPlayerNick(Player player, String nick, TagResolver resolver) { - Component nameComponent = miniMessage.deserialize(nick, resolver); - NickHandler.getInstance().setNickname(player, nick); + return true; } @Override @@ -44,20 +66,24 @@ public ArrayList tabComplete(CommandSender sender) { private Component getNickComponent(Player player, String nick) { int i = 0; + String strippedMessage = miniMessage.stripTags(nick); TagResolver.Builder resolverBuilder = TagResolver.builder(); + Component finalNick = null; for (TagPermission tagPermission : TagPermission.values()) { if (!player.hasPermission(tagPermission.getPermission())) { continue; } i++; resolverBuilder.resolver(tagPermission.getTagResolver()); + finalNick = serializer.deserialize(nick, tagPermission.getTagResolver()); } if (i == 0) { - String strippedMessage = miniMessage.stripTags(nick); return Component.text(strippedMessage); } - return miniMessage.deserialize(nick, resolverBuilder.build()); + String plainNick = PlainTextComponentSerializer.plainText().serialize(finalNick); + if (!plainNick.equals(strippedMessage)) { + return null; + } + return finalNick; } - - } diff --git a/src/main/java/simplexity/simplenicks/util/TagPermission.java b/src/main/java/simplexity/simplenicks/util/TagPermission.java index 5154075..d00e567 100644 --- a/src/main/java/simplexity/simplenicks/util/TagPermission.java +++ b/src/main/java/simplexity/simplenicks/util/TagPermission.java @@ -5,9 +5,11 @@ import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; import org.bukkit.command.CommandSender; +import java.util.ArrayList; + public enum TagPermission { //Nickname Perms - COLOR("simplenick.nick.color", StandardTags.color()), + HEX_COLOR("simplenick.nick.color", StandardTags.color()), GRADIENT("simplenick.nick.gradient", StandardTags.gradient()), RAINBOW("simplenick.nick.rainbow", StandardTags.rainbow()), RESET("simplenick.nick.format.reset", StandardTags.reset()), From aeee71c8e17dcad55d3bc501fd940d316bd0a191 Mon Sep 17 00:00:00 2001 From: Rhythmic System Date: Thu, 27 Jun 2024 14:50:18 -0700 Subject: [PATCH 3/5] committing again --- .../simplexity/simplenicks/SimpleNicks.java | 3 +- .../simplenicks/commands/CommandHandler.java | 95 +++++++++++-------- .../simplenicks/commands/Reset.java | 2 +- .../simplexity/simplenicks/commands/Save.java | 2 +- .../simplexity/simplenicks/commands/Set.java | 54 +++++++---- .../simplenicks/commands/SubCommand.java | 2 +- .../simplenicks/util/Constants.java | 1 + 7 files changed, 99 insertions(+), 60 deletions(-) diff --git a/src/main/java/simplexity/simplenicks/SimpleNicks.java b/src/main/java/simplexity/simplenicks/SimpleNicks.java index a0c5cbb..7ea32e6 100644 --- a/src/main/java/simplexity/simplenicks/SimpleNicks.java +++ b/src/main/java/simplexity/simplenicks/SimpleNicks.java @@ -5,6 +5,7 @@ import org.bukkit.plugin.java.JavaPlugin; import simplexity.simplenicks.commands.CommandHandler; import simplexity.simplenicks.commands.Reset; +import simplexity.simplenicks.commands.Save; import simplexity.simplenicks.commands.Set; import simplexity.simplenicks.commands.SubCommand; import simplexity.simplenicks.config.ConfigHandler; @@ -69,7 +70,7 @@ private void registerSubCommands() { subCommands.put("reset", new Reset("reset", Constants.NICK_RESET, Constants.NICK_RESET_OTHERS, false)); //subCommands.put("help", new Help()); subCommands.put("set", new Set("set", Constants.NICK_COMMAND, Constants.NICK_OTHERS_RESTRICTIVE, false)); - //subCommands.put("save", new Save()); + subCommands.put("save", new Save("save", Constants.NICK_SAVE, Constants.NICK_OTHERS_SAVE, false)); //subCommands.put("delete", new Delete()); } diff --git a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java index 906d5eb..0b8a522 100644 --- a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java +++ b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java @@ -22,13 +22,13 @@ public class CommandHandler implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { if (args.length < 1) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNotEnoughArgs(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); - + sendMessage(sender, LocaleHandler.getInstance().getNotEnoughArgs()); return false; } if (args.length >= 2) { - if (runningOnOther(sender, args)) { + Player player = getPlayerFromArgs(args); + if (player != null) { + commandOnOther(sender, args, player); return true; } } @@ -37,26 +37,19 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command } - private boolean runningOnOther(CommandSender sender, String[] args) { - Player player = SimpleNicks.getInstance().getServer().getPlayer(args[1]); - if (player != null) { - commandOnOther(sender, args, player); - return true; - } - return false; + private Player getPlayerFromArgs(String[] args) { + return SimpleNicks.getInstance().getServer().getPlayer(args[1]); } private void commandOnOther(CommandSender sender, String[] args, Player player) { String command = args[0].toLowerCase(); - if (!SimpleNicks.getSubCommands().containsKey(command)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidCommand(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + SubCommand subCommand = SimpleNicks.getSubCommands().get(command); + if (subCommand == null) { + sendMessage(sender, LocaleHandler.getInstance().getInvalidCommand()); return; } - SubCommand subCommand = SimpleNicks.getSubCommands().get(command); if (!sender.hasPermission(subCommand.adminPermission)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + sendMessage(sender, LocaleHandler.getInstance().getNoPermission()); return; } subCommand.executeOnOther(sender, player, args); @@ -64,24 +57,21 @@ private void commandOnOther(CommandSender sender, String[] args, Player player) private void commandOnSelf(CommandSender sender, String[] args) { String command = args[0].toLowerCase(); - Player player = null; - if (!SimpleNicks.getSubCommands().containsKey(command)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getInvalidCommand(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + SubCommand subCommand = SimpleNicks.getSubCommands().get(command); + if (subCommand == null) { + sendMessage(sender, LocaleHandler.getInstance().getInvalidCommand()); return; } - SubCommand subCommand = SimpleNicks.getSubCommands().get(command); if (!sender.hasPermission(subCommand.basicPermission)) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getNoPermission(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + sendMessage(sender, LocaleHandler.getInstance().getNoPermission()); return; } + Player player = null; if (sender instanceof Player) { player = (Player) sender; } if (player == null && !subCommand.canRunWithoutPlayer()) { - sender.sendMessage(miniMessage.deserialize(LocaleHandler.getInstance().getMustBePlayer(), - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + sendMessage(sender, LocaleHandler.getInstance().getMustBePlayer()); return; } subCommand.executeOnSelf(sender, player, args); @@ -91,31 +81,58 @@ private void commandOnSelf(CommandSender sender, String[] args) { @Override public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { tabComplete.clear(); - int argsLength = args.length; - switch (argsLength) { + Player player = getPlayerForTabComplete(sender, args); + switch (args.length) { case 0, 1 -> { - for (String key : SimpleNicks.getSubCommands().keySet()) { - if (sender.hasPermission(SimpleNicks.getSubCommands().get(key).basicPermission) || - sender.hasPermission(SimpleNicks.getSubCommands().get(key).getAdminPermission())) { - tabComplete.add(key); - } - } + addSubCommandsToTabComplete(sender); } case 2 -> { + SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) { - SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); - if (sender.hasPermission(subCommand.adminPermission)) { + if (sender.hasPermission(subCommand.adminPermission) && (player != null)) { return null; + } else { + return subCommand.tabComplete(sender, args, player); } } } case 3 -> { - if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) { - SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); - return subCommand.tabComplete(sender); + SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); + if (subCommand == null) { + return null; } + return subCommand.tabComplete(sender, args, player); } } + return tabComplete; } + + private Player getPlayerForTabComplete(CommandSender sender, String[] args) { + if (args.length < 2) { + return null; + } + Player player = getPlayerFromArgs(args); + if (player != null) { + return player; + } + if (sender instanceof Player playerSender) { + return playerSender; + } + return null; + } + + private void addSubCommandsToTabComplete(CommandSender sender) { + for (String key : SimpleNicks.getSubCommands().keySet()) { + SubCommand subCommand = SimpleNicks.getSubCommands().get(key); + if (sender.hasPermission(subCommand.basicPermission) || sender.hasPermission(subCommand.adminPermission)) { + tabComplete.add(key); + } + } + } + + private void sendMessage(CommandSender sender, String message) { + sender.sendMessage(miniMessage.deserialize(message, + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + } } diff --git a/src/main/java/simplexity/simplenicks/commands/Reset.java b/src/main/java/simplexity/simplenicks/commands/Reset.java index 2b8f368..b1814ee 100644 --- a/src/main/java/simplexity/simplenicks/commands/Reset.java +++ b/src/main/java/simplexity/simplenicks/commands/Reset.java @@ -35,7 +35,7 @@ public void resetName(Player player) { } @Override - public ArrayList tabComplete(CommandSender sender) { + public ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder) { return null; } } diff --git a/src/main/java/simplexity/simplenicks/commands/Save.java b/src/main/java/simplexity/simplenicks/commands/Save.java index 8b4c2e7..0b0c576 100644 --- a/src/main/java/simplexity/simplenicks/commands/Save.java +++ b/src/main/java/simplexity/simplenicks/commands/Save.java @@ -48,7 +48,7 @@ public boolean savePlayerNick(Player player) { } @Override - public ArrayList tabComplete(CommandSender sender) { + public ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder) { return null; } } diff --git a/src/main/java/simplexity/simplenicks/commands/Set.java b/src/main/java/simplexity/simplenicks/commands/Set.java index 1d5c2b3..15e1146 100644 --- a/src/main/java/simplexity/simplenicks/commands/Set.java +++ b/src/main/java/simplexity/simplenicks/commands/Set.java @@ -8,10 +8,12 @@ import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; import simplexity.simplenicks.config.LocaleHandler; +import simplexity.simplenicks.util.Constants; import simplexity.simplenicks.util.NickHandler; import simplexity.simplenicks.util.TagPermission; import java.util.ArrayList; +import java.util.List; public class Set extends SubCommand { MiniMessage serializer = MiniMessage.builder().tags(TagResolver.empty()).build(); @@ -22,12 +24,19 @@ public Set(String commandName, Permission basicPermission, Permission adminPermi @Override public void executeOnOther(CommandSender sender, Player player, String[] args) { - if (args.length < 3) { - sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), "")); + if (!validateArgsLength(sender, player, args, 3)) { return; } String nickname = args[2]; - if (setPlayerNick(player, nickname)){ + Component nickComponent = Component.empty(); + if (sender.hasPermission(Constants.NICK_OTHERS_FULL)) { + nickComponent = miniMessage.deserialize(nickname); + } else if (sender.hasPermission(Constants.NICK_OTHERS_BASIC)) { + nickComponent = getNickComponent(sender, nickname); + } else if (sender.hasPermission(Constants.NICK_OTHERS_RESTRICTIVE)){ + nickComponent = getNickComponent(player, nickname); + } + if (setPlayerNick(player, nickComponent)) { sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedOther(), nickname)); player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedByOther(), nickname)); } else { @@ -37,20 +46,17 @@ public void executeOnOther(CommandSender sender, Player player, String[] args) { @Override public void executeOnSelf(CommandSender sender, Player player, String[] args) { - if (args.length < 2) { - player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), "")); - return; - } + if (!validateArgsLength(sender, player, args, 2)) return; String nickname = args[1]; - if (setPlayerNick(player, nickname)){ + Component nickComponent = getNickComponent(sender, nickname); + if (setPlayerNick(player, nickComponent)) { player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedSelf(), nickname)); } else { player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getInvalidTags(), nickname)); } } - private boolean setPlayerNick(Player player, String nickname) { - Component nickComponent = getNickComponent(player, nickname); + private boolean setPlayerNick(Player player, Component nickComponent) { if (nickComponent == null) { return false; } @@ -59,25 +65,38 @@ private boolean setPlayerNick(Player player, String nickname) { return true; } + private boolean validateArgsLength(CommandSender sender, Player player, String[] args, int minArgsLength) { + if (args.length < minArgsLength) { + parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), ""); + return false; + } + return true; + } + + @Override - public ArrayList tabComplete(CommandSender sender) { - return null; + public ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder) { + if (playerPlaceholder == null) { + return null; + } + List savedNickNames = NickHandler.getInstance().getSavedNicknames(playerPlaceholder); + return (ArrayList) savedNickNames; } - private Component getNickComponent(Player player, String nick) { - int i = 0; + private Component getNickComponent(CommandSender user, String nick) { + int permissionCount = 0; String strippedMessage = miniMessage.stripTags(nick); TagResolver.Builder resolverBuilder = TagResolver.builder(); Component finalNick = null; for (TagPermission tagPermission : TagPermission.values()) { - if (!player.hasPermission(tagPermission.getPermission())) { + if (!user.hasPermission(tagPermission.getPermission())) { continue; } - i++; + permissionCount++; resolverBuilder.resolver(tagPermission.getTagResolver()); finalNick = serializer.deserialize(nick, tagPermission.getTagResolver()); } - if (i == 0) { + if (permissionCount == 0) { return Component.text(strippedMessage); } String plainNick = PlainTextComponentSerializer.plainText().serialize(finalNick); @@ -86,4 +105,5 @@ private Component getNickComponent(Player player, String nick) { } return finalNick; } + } diff --git a/src/main/java/simplexity/simplenicks/commands/SubCommand.java b/src/main/java/simplexity/simplenicks/commands/SubCommand.java index 3cc590a..79d70c0 100644 --- a/src/main/java/simplexity/simplenicks/commands/SubCommand.java +++ b/src/main/java/simplexity/simplenicks/commands/SubCommand.java @@ -29,7 +29,7 @@ public SubCommand(String commandName, Permission basicPermission, Permission adm public abstract void executeOnSelf(CommandSender sender, Player player, String[] args); - public abstract ArrayList tabComplete(CommandSender sender); + public abstract ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder); public String getCommandName() { return commandName; diff --git a/src/main/java/simplexity/simplenicks/util/Constants.java b/src/main/java/simplexity/simplenicks/util/Constants.java index 1444cdd..42f251b 100644 --- a/src/main/java/simplexity/simplenicks/util/Constants.java +++ b/src/main/java/simplexity/simplenicks/util/Constants.java @@ -10,6 +10,7 @@ public class Constants { public static Permission NICK_RESET_OTHERS = new Permission("simplenick.admin.reset"); public static Permission NICK_RESET = new Permission("simplenick.nick.reset"); public static Permission NICK_SAVE = new Permission("simplenick.save"); + public static Permission NICK_OTHERS_SAVE = new Permission("simplenick.admin.save"); public static Permission NICK_DELETE = new Permission("simplenick.delete"); public static Permission NICK_RELOAD = new Permission("simplenick.reload"); public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.usernamebypass"); From c77f63d01e2d23f4fe65b9a42b164fa3959c86f3 Mon Sep 17 00:00:00 2001 From: Rhythmic System Date: Thu, 27 Jun 2024 15:19:04 -0700 Subject: [PATCH 4/5] committing again --- .../simplexity/simplenicks/commands/Set.java | 42 ++++++++++++++++++- .../simplenicks/config/ConfigHandler.java | 13 ++++++ .../simplenicks/util/Constants.java | 8 ++-- src/main/resources/config.yml | 7 +++- 4 files changed, 65 insertions(+), 5 deletions(-) diff --git a/src/main/java/simplexity/simplenicks/commands/Set.java b/src/main/java/simplexity/simplenicks/commands/Set.java index 15e1146..b0ecd8c 100644 --- a/src/main/java/simplexity/simplenicks/commands/Set.java +++ b/src/main/java/simplexity/simplenicks/commands/Set.java @@ -4,9 +4,12 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.Permission; +import simplexity.simplenicks.SimpleNicks; +import simplexity.simplenicks.config.ConfigHandler; import simplexity.simplenicks.config.LocaleHandler; import simplexity.simplenicks.util.Constants; import simplexity.simplenicks.util.NickHandler; @@ -14,6 +17,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; public class Set extends SubCommand { MiniMessage serializer = MiniMessage.builder().tags(TagResolver.empty()).build(); @@ -33,9 +37,12 @@ public void executeOnOther(CommandSender sender, Player player, String[] args) { nickComponent = miniMessage.deserialize(nickname); } else if (sender.hasPermission(Constants.NICK_OTHERS_BASIC)) { nickComponent = getNickComponent(sender, nickname); - } else if (sender.hasPermission(Constants.NICK_OTHERS_RESTRICTIVE)){ + } else if (sender.hasPermission(Constants.NICK_OTHERS_RESTRICTIVE)) { nickComponent = getNickComponent(player, nickname); } + if (!passesChecks(sender, nickname, player)) { + return; + } if (setPlayerNick(player, nickComponent)) { sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedOther(), nickname)); player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedByOther(), nickname)); @@ -48,6 +55,9 @@ public void executeOnOther(CommandSender sender, Player player, String[] args) { public void executeOnSelf(CommandSender sender, Player player, String[] args) { if (!validateArgsLength(sender, player, args, 2)) return; String nickname = args[1]; + if (!passesChecks(sender, nickname, player)) { + return; + } Component nickComponent = getNickComponent(sender, nickname); if (setPlayerNick(player, nickComponent)) { player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getChangedSelf(), nickname)); @@ -106,4 +116,34 @@ private Component getNickComponent(CommandSender user, String nick) { return finalNick; } + private boolean passesChecks(CommandSender sender, String nickname, Player player) { + String strippedMessage = miniMessage.stripTags(nickname); + Pattern regexPattern = ConfigHandler.getInstance().getRegex(); + if (strippedMessage.length() > ConfigHandler.getInstance().getMaxLength() && !sender.hasPermission(Constants.NICK_LENGTH_BYPASS)) { + sender.sendMessage(parsedMessage(sender, null, LocaleHandler.getInstance().getInvalidNickLength(), "")); + return false; + } + if (!regexPattern.matcher(strippedMessage).matches() && !sender.hasPermission(Constants.NICK_REGEX_BYPASS)) { + sender.sendMessage(parsedMessage(sender, null, LocaleHandler.getInstance().getInvalidNick(), ConfigHandler.getInstance().getRegexString())); + return false; + } + OfflinePlayer playerToCheck = SimpleNicks.getInstance().getServer().getOfflinePlayer(strippedMessage); + if (!playerToCheck.hasPlayedBefore()) { + return true; + } + if (playerToCheck.getPlayer() == player) { + return true; + } + if (!sender.hasPermission(Constants.NICK_USERNAME_BYPASS)) { + long lastSeen = playerToCheck.getLastSeen(); + long now = System.currentTimeMillis(); + long diff = now - lastSeen; + if (diff < ConfigHandler.getInstance().getUsernameProtectionTime()) { + sender.sendMessage(parsedMessage(sender, null, LocaleHandler.getInstance().getOtherPlayersUsername(), nickname)); + return false; + } + } + return true; + } + } diff --git a/src/main/java/simplexity/simplenicks/config/ConfigHandler.java b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java index 94978de..514aa86 100644 --- a/src/main/java/simplexity/simplenicks/config/ConfigHandler.java +++ b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java @@ -8,6 +8,10 @@ public class ConfigHandler { + public String getRegexString() { + return regexString; + } + public enum SAVING_TYPE {PDC, FILE} private static ConfigHandler instance; @@ -17,6 +21,8 @@ public enum SAVING_TYPE {PDC, FILE} private int maxLength = 25; private int maxSaves = 5; private boolean tablistNick = false; + private String regexString = "[A-Za-z0-9_]+"; + private long usernameProtectionTime = 0; private ConfigHandler() { } @@ -33,6 +39,7 @@ public void reloadConfig() { // Check the validity of the regex. try { String regexSetting = SimpleNicks.getInstance().getConfig().getString("nickname-regex"); + regexString = regexSetting; assert regexSetting != null; assert !regexSetting.isBlank(); regex = Pattern.compile(regexSetting); @@ -50,6 +57,7 @@ public void reloadConfig() { maxLength = SimpleNicks.getInstance().getConfig().getInt("max-nickname-length"); maxSaves = SimpleNicks.getInstance().getConfig().getInt("max-saves"); tablistNick = SimpleNicks.getInstance().getConfig().getBoolean("tablist-nick"); + usernameProtectionTime = SimpleNicks.getInstance().getConfig().getLong("username-protection-time") * 86400000; } public void setConfigDefaults() { @@ -59,6 +67,7 @@ public void setConfigDefaults() { config.addDefault("max-saves", 5); config.addDefault("nickname-regex", "[A-Za-z0-9_]+"); config.addDefault("tablist-nick", false); + config.addDefault("username-protection-time", 30); } public Pattern getRegex() { @@ -80,4 +89,8 @@ public int getMaxSaves() { public boolean shouldNickTablist() { return tablistNick; } + + public long getUsernameProtectionTime() { + return usernameProtectionTime; + } } diff --git a/src/main/java/simplexity/simplenicks/util/Constants.java b/src/main/java/simplexity/simplenicks/util/Constants.java index 42f251b..84c282e 100644 --- a/src/main/java/simplexity/simplenicks/util/Constants.java +++ b/src/main/java/simplexity/simplenicks/util/Constants.java @@ -9,9 +9,11 @@ public class Constants { public static Permission NICK_OTHERS_FULL = new Permission("simplenick.admin.full"); public static Permission NICK_RESET_OTHERS = new Permission("simplenick.admin.reset"); public static Permission NICK_RESET = new Permission("simplenick.nick.reset"); - public static Permission NICK_SAVE = new Permission("simplenick.save"); + public static Permission NICK_SAVE = new Permission("simplenick.nick.save"); public static Permission NICK_OTHERS_SAVE = new Permission("simplenick.admin.save"); - public static Permission NICK_DELETE = new Permission("simplenick.delete"); + public static Permission NICK_DELETE = new Permission("simplenick.nick.delete"); public static Permission NICK_RELOAD = new Permission("simplenick.reload"); - public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.usernamebypass"); + public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.bypass.username"); + public static Permission NICK_LENGTH_BYPASS = new Permission("simplenick.bypass.length"); + public static Permission NICK_REGEX_BYPASS = new Permission("simplenick.bypass.regex"); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ee80be3..2ed7c73 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -17,4 +17,9 @@ max-saves: 5 # Should names be changed in tablist? # (Keep this false if you use any other tablist plugin, there are placeholder API placeholders to use on those) -tablist-nick: false \ No newline at end of file +tablist-nick: false + +# How long should people be offline before their username is available to use as a nickname? +# In days, -1 to disable username protection altogether + +username-protection: 30 \ No newline at end of file From 47de2ddb286298455430c3c82742adcef1e64642 Mon Sep 17 00:00:00 2001 From: Rhythmic System Date: Fri, 28 Jun 2024 11:27:05 -0700 Subject: [PATCH 5/5] Working again --- pom.xml | 10 ++- .../simplexity/simplenicks/SimpleNicks.java | 8 ++- .../simplenicks/commands/CommandHandler.java | 11 ++-- .../simplenicks/commands/Delete.java | 59 +++++++++++++++++ .../simplexity/simplenicks/commands/Help.java | 31 +++++++++ .../simplenicks/commands/Reset.java | 2 +- .../simplenicks/commands/SNReload.java | 21 +++++++ .../simplexity/simplenicks/commands/Save.java | 2 +- .../simplexity/simplenicks/commands/Set.java | 19 +++--- .../simplenicks/commands/SubCommand.java | 10 ++- .../simplenicks/config/ConfigHandler.java | 4 +- .../simplenicks/config/LocaleHandler.java | 34 ++++++---- .../simplenicks/util/Constants.java | 7 ++- .../simplenicks/util/saving/YMLFile.java | 3 + src/main/resources/locale.yml | 5 +- src/main/resources/plugin.yml | 63 ++++++++++++++++--- 16 files changed, 241 insertions(+), 48 deletions(-) create mode 100644 src/main/java/simplexity/simplenicks/commands/Delete.java create mode 100644 src/main/java/simplexity/simplenicks/commands/Help.java create mode 100644 src/main/java/simplexity/simplenicks/commands/SNReload.java diff --git a/pom.xml b/pom.xml index 4fd00cc..b535fc9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ simplexity SimpleNicks - 1.0.1 + 2.0.0 jar SimpleNicks @@ -39,6 +39,14 @@ false + + + + mojang + + + diff --git a/src/main/java/simplexity/simplenicks/SimpleNicks.java b/src/main/java/simplexity/simplenicks/SimpleNicks.java index 7ea32e6..0522bb6 100644 --- a/src/main/java/simplexity/simplenicks/SimpleNicks.java +++ b/src/main/java/simplexity/simplenicks/SimpleNicks.java @@ -4,9 +4,12 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import simplexity.simplenicks.commands.CommandHandler; +import simplexity.simplenicks.commands.Delete; +import simplexity.simplenicks.commands.Help; import simplexity.simplenicks.commands.Reset; import simplexity.simplenicks.commands.Save; import simplexity.simplenicks.commands.Set; +import simplexity.simplenicks.commands.SNReload; import simplexity.simplenicks.commands.SubCommand; import simplexity.simplenicks.config.ConfigHandler; import simplexity.simplenicks.config.LocaleHandler; @@ -43,6 +46,7 @@ public void onEnable() { this.saveDefaultConfig(); ConfigHandler.getInstance().setConfigDefaults(); this.getCommand("nick").setExecutor(new CommandHandler()); + this.getCommand("snreload").setExecutor(new SNReload()); if (this.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { new SNExpansion().register(); } @@ -68,10 +72,10 @@ public static Logger getSimpleNicksLogger() { private void registerSubCommands() { subCommands.put("reset", new Reset("reset", Constants.NICK_RESET, Constants.NICK_RESET_OTHERS, false)); - //subCommands.put("help", new Help()); + subCommands.put("help", new Help("help", Constants.NICK_COMMAND, Constants.NICK_OTHERS_COMMAND, true)); subCommands.put("set", new Set("set", Constants.NICK_COMMAND, Constants.NICK_OTHERS_RESTRICTIVE, false)); subCommands.put("save", new Save("save", Constants.NICK_SAVE, Constants.NICK_OTHERS_SAVE, false)); - //subCommands.put("delete", new Delete()); + subCommands.put("delete", new Delete("delete", Constants.NICK_DELETE, Constants.NICK_OTHERS_DELETE, false)); } public static void configReload() { diff --git a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java index 0b8a522..7fa9e5c 100644 --- a/src/main/java/simplexity/simplenicks/commands/CommandHandler.java +++ b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java @@ -27,7 +27,9 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command } if (args.length >= 2) { Player player = getPlayerFromArgs(args); - if (player != null) { + String subCommandString = args[0].toLowerCase(); + SubCommand subCommand = SimpleNicks.getSubCommands().get(subCommandString); + if (subCommand != null && sender.hasPermission(subCommand.adminPermission) && (player != null)) { commandOnOther(sender, args, player); return true; } @@ -83,9 +85,7 @@ private void commandOnSelf(CommandSender sender, String[] args) { tabComplete.clear(); Player player = getPlayerForTabComplete(sender, args); switch (args.length) { - case 0, 1 -> { - addSubCommandsToTabComplete(sender); - } + case 0, 1 -> addSubCommandsToTabComplete(sender); case 2 -> { SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase()); if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) { @@ -132,7 +132,6 @@ private void addSubCommandsToTabComplete(CommandSender sender) { } private void sendMessage(CommandSender sender, String message) { - sender.sendMessage(miniMessage.deserialize(message, - Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + sender.sendMessage(miniMessage.deserialize(message, Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); } } diff --git a/src/main/java/simplexity/simplenicks/commands/Delete.java b/src/main/java/simplexity/simplenicks/commands/Delete.java new file mode 100644 index 0000000..6e69be3 --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/Delete.java @@ -0,0 +1,59 @@ +package simplexity.simplenicks.commands; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import simplexity.simplenicks.config.LocaleHandler; +import simplexity.simplenicks.util.NickHandler; + +import java.util.ArrayList; +import java.util.List; + +public class Delete extends SubCommand{ + public Delete(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { + super(commandName, basicPermission, adminPermission, consoleRunNoPlayer); + } + + @Override + public void executeOnOther(CommandSender sender, Player player, String[] args) { + if (!isValidArgsLength(sender, player, args, 3)) { + return; + } + String nickname = args[2]; + if (removeSavedNick(sender, player, nickname)) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getDeleteNick(), nickname)); + } + + } + + @Override + public void executeOnSelf(CommandSender sender, Player player, String[] args) { + if (!isValidArgsLength(sender, player, args, 2)) { + return; + } + String nickname = args[1]; + if (removeSavedNick(sender, player, nickname)) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getDeleteNick(), nickname)); + } + } + + private boolean removeSavedNick(CommandSender sender, Player player, String nickname) { + List savedNicks = NickHandler.getInstance().getSavedNicknames(player); + if (!savedNicks.contains(nickname)) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getNameNonexistent(), nickname)); + return false; + } + NickHandler.getInstance().deleteNickname(player, nickname); + NickHandler.getInstance().refreshNickname(player); + return true; + } + + @Override + public ArrayList tabComplete(CommandSender sender, String[] args, Player player) { + if (player == null) { + return null; + } + List savedNickNames = NickHandler.getInstance().getSavedNicknames(player); + return (ArrayList) savedNickNames; + } +} diff --git a/src/main/java/simplexity/simplenicks/commands/Help.java b/src/main/java/simplexity/simplenicks/commands/Help.java new file mode 100644 index 0000000..1bc4fd6 --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/Help.java @@ -0,0 +1,31 @@ +package simplexity.simplenicks.commands; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import simplexity.simplenicks.config.LocaleHandler; + +import java.util.ArrayList; + +public class Help extends SubCommand { + + public Help(String commandName, Permission basicPermission, Permission adminPermission, boolean consoleRunNoPlayer) { + super(commandName, basicPermission, adminPermission, consoleRunNoPlayer); + } + + @Override + public void executeOnOther(CommandSender sender, Player player, String[] args) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getShownHelp(), player.getName())); + player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getHelpMessage(), "")); + } + + @Override + public void executeOnSelf(CommandSender sender, Player player, String[] args) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getHelpMessage(), "")); + } + + @Override + public ArrayList tabComplete(CommandSender sender, String[] args, Player player) { + return null; + } +} diff --git a/src/main/java/simplexity/simplenicks/commands/Reset.java b/src/main/java/simplexity/simplenicks/commands/Reset.java index b1814ee..8015aac 100644 --- a/src/main/java/simplexity/simplenicks/commands/Reset.java +++ b/src/main/java/simplexity/simplenicks/commands/Reset.java @@ -35,7 +35,7 @@ public void resetName(Player player) { } @Override - public ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder) { + public ArrayList tabComplete(CommandSender sender, String[] args, Player player) { return null; } } diff --git a/src/main/java/simplexity/simplenicks/commands/SNReload.java b/src/main/java/simplexity/simplenicks/commands/SNReload.java new file mode 100644 index 0000000..859ab6d --- /dev/null +++ b/src/main/java/simplexity/simplenicks/commands/SNReload.java @@ -0,0 +1,21 @@ +package simplexity.simplenicks.commands; + +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; +import simplexity.simplenicks.SimpleNicks; +import simplexity.simplenicks.config.ConfigHandler; +import simplexity.simplenicks.config.LocaleHandler; + +public class SNReload implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + ConfigHandler.getInstance().reloadConfig(); + LocaleHandler.getInstance().loadLocale(); + sender.sendMessage(SimpleNicks.getMiniMessage().deserialize(LocaleHandler.getInstance().getConfigReloaded(), + Placeholder.parsed("prefix", LocaleHandler.getInstance().getPluginPrefix()))); + return false; + } +} diff --git a/src/main/java/simplexity/simplenicks/commands/Save.java b/src/main/java/simplexity/simplenicks/commands/Save.java index 0b0c576..08b3f7a 100644 --- a/src/main/java/simplexity/simplenicks/commands/Save.java +++ b/src/main/java/simplexity/simplenicks/commands/Save.java @@ -48,7 +48,7 @@ public boolean savePlayerNick(Player player) { } @Override - public ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder) { + public ArrayList tabComplete(CommandSender sender, String[] args, Player player) { return null; } } diff --git a/src/main/java/simplexity/simplenicks/commands/Set.java b/src/main/java/simplexity/simplenicks/commands/Set.java index b0ecd8c..4602ae5 100644 --- a/src/main/java/simplexity/simplenicks/commands/Set.java +++ b/src/main/java/simplexity/simplenicks/commands/Set.java @@ -28,7 +28,7 @@ public Set(String commandName, Permission basicPermission, Permission adminPermi @Override public void executeOnOther(CommandSender sender, Player player, String[] args) { - if (!validateArgsLength(sender, player, args, 3)) { + if (!isValidArgsLength(sender, player, args, 3)) { return; } String nickname = args[2]; @@ -53,7 +53,7 @@ public void executeOnOther(CommandSender sender, Player player, String[] args) { @Override public void executeOnSelf(CommandSender sender, Player player, String[] args) { - if (!validateArgsLength(sender, player, args, 2)) return; + if (!isValidArgsLength(sender, player, args, 2)) return; String nickname = args[1]; if (!passesChecks(sender, nickname, player)) { return; @@ -75,21 +75,15 @@ private boolean setPlayerNick(Player player, Component nickComponent) { return true; } - private boolean validateArgsLength(CommandSender sender, Player player, String[] args, int minArgsLength) { - if (args.length < minArgsLength) { - parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), ""); - return false; - } - return true; - } + @Override - public ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder) { - if (playerPlaceholder == null) { + public ArrayList tabComplete(CommandSender sender, String[] args, Player player) { + if (player == null) { return null; } - List savedNickNames = NickHandler.getInstance().getSavedNicknames(playerPlaceholder); + List savedNickNames = NickHandler.getInstance().getSavedNicknames(player); return (ArrayList) savedNickNames; } @@ -133,6 +127,7 @@ private boolean passesChecks(CommandSender sender, String nickname, Player playe } if (playerToCheck.getPlayer() == player) { return true; + } if (!sender.hasPermission(Constants.NICK_USERNAME_BYPASS)) { long lastSeen = playerToCheck.getLastSeen(); diff --git a/src/main/java/simplexity/simplenicks/commands/SubCommand.java b/src/main/java/simplexity/simplenicks/commands/SubCommand.java index 79d70c0..9b6db61 100644 --- a/src/main/java/simplexity/simplenicks/commands/SubCommand.java +++ b/src/main/java/simplexity/simplenicks/commands/SubCommand.java @@ -29,7 +29,7 @@ public SubCommand(String commandName, Permission basicPermission, Permission adm public abstract void executeOnSelf(CommandSender sender, Player player, String[] args); - public abstract ArrayList tabComplete(CommandSender sender, String[] args, Player playerPlaceholder); + public abstract ArrayList tabComplete(CommandSender sender, String[] args, Player player); public String getCommandName() { return commandName; @@ -66,4 +66,12 @@ public Component parsedMessage(CommandSender sender, Player player, String messa Placeholder.component("target", playerName), Placeholder.parsed("value", value)); } + + public boolean isValidArgsLength(CommandSender sender, Player player, String[] args, int minArgsLength) { + if (args.length < minArgsLength) { + sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getNotEnoughArgs(), "")); + return false; + } + return true; + } } diff --git a/src/main/java/simplexity/simplenicks/config/ConfigHandler.java b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java index 514aa86..bcd53f9 100644 --- a/src/main/java/simplexity/simplenicks/config/ConfigHandler.java +++ b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java @@ -57,7 +57,7 @@ public void reloadConfig() { maxLength = SimpleNicks.getInstance().getConfig().getInt("max-nickname-length"); maxSaves = SimpleNicks.getInstance().getConfig().getInt("max-saves"); tablistNick = SimpleNicks.getInstance().getConfig().getBoolean("tablist-nick"); - usernameProtectionTime = SimpleNicks.getInstance().getConfig().getLong("username-protection-time") * 86400000; + usernameProtectionTime = SimpleNicks.getInstance().getConfig().getLong("username-protection") * 86400000; } public void setConfigDefaults() { @@ -67,7 +67,7 @@ public void setConfigDefaults() { config.addDefault("max-saves", 5); config.addDefault("nickname-regex", "[A-Za-z0-9_]+"); config.addDefault("tablist-nick", false); - config.addDefault("username-protection-time", 30); + config.addDefault("username-protection", 30); } public Pattern getRegex() { diff --git a/src/main/java/simplexity/simplenicks/config/LocaleHandler.java b/src/main/java/simplexity/simplenicks/config/LocaleHandler.java index 7a418de..1ff7d86 100644 --- a/src/main/java/simplexity/simplenicks/config/LocaleHandler.java +++ b/src/main/java/simplexity/simplenicks/config/LocaleHandler.java @@ -16,10 +16,10 @@ public class LocaleHandler { private final FileConfiguration localeConfig = new YamlConfiguration(); private final Logger logger = SimpleNicks.getInstance().getLogger(); //Plugin - private String pluginPrefix, helpMessage, configReloaded; + private String pluginPrefix, helpMessage, configReloaded, shownHelp; //Errors private String invalidCommand, invalidPlayer, invalidNick, invalidNickLength, invalidTags, invalidConfigRegex, - tooManyArgs, notEnoughArgs, nickIsNull, deleteFailure, saveFailure, tooManyToSave, otherPlayersUsername, + tooManyArgs, notEnoughArgs, nickIsNull, deleteFailure, nameNonexistent, saveFailure, tooManyToSave, otherPlayersUsername, noPermission, mustBePlayer; //Nick private String changedSelf, changedOther, changedByOther, resetSelf, resetOther, resetByOther, saveNick, deleteNick; @@ -50,14 +50,17 @@ public void loadLocale() { } pluginPrefix = localeConfig.getString("plugin.prefix", "SimpleNicks » "); helpMessage = localeConfig.getString("plugin.help-message", - " ========================\n" + - " · Setting a nickname: \n" + - " /nick set \n" + - " · removing a nickname: \n" + - " /nick reset\"\n" + - " · Formatting: \n" + - " This plugin uses minimessage formatting. You can find a format viewer here\"\n" + - " "); + """ + ======================== + · Setting a nickname:\s + /nick set + · removing a nickname:\s + /nick reset" + · Formatting:\s + This plugin uses minimessage formatting. You can find a format viewer here" + \ + """); + shownHelp = localeConfig.getString("plugin.shown-help", " has been shown the help screen"); configReloaded = localeConfig.getString("plugin.config-reloaded", "SimpleNicks config and locale reloaded"); invalidCommand = localeConfig.getString("error.invalid.command", "Invalid command."); invalidPlayer = localeConfig.getString("error.invalid.player", "Invalid player specified"); @@ -71,7 +74,8 @@ public void loadLocale() { deleteFailure = localeConfig.getString("error.nickname.delete-failure", "Failed to delete given username."); saveFailure = localeConfig.getString("error.nickname.save-failure", "Failed to save current username."); tooManyToSave = localeConfig.getString("error.nickname.too-many-to-save", "You have too many saved usernames, please remove some with /nick delete "); - otherPlayersUsername = localeConfig.getString("error.nickname.other-players-username", "You cannot name yourself , as that is the username of another player on this server. Pick another name"); + otherPlayersUsername = localeConfig.getString("error.nickname.other-players-username", "You cannot name yourself , as that is the username of another player on this server. Pick another name"); + nameNonexistent = localeConfig.getString("error.nickname.name-nonexistent", "Cannot delete this name because it does not exist"); noPermission = localeConfig.getString("error.no-permission", "You do not have permission to run this command"); mustBePlayer = localeConfig.getString("error.must-be-player", "This command cannot be run on the Console. You must be a player to run this command"); changedSelf = localeConfig.getString("nick.changed.self", "Changed your nickname to !"); @@ -188,5 +192,13 @@ public String getSaveNick() { public String getDeleteNick() { return deleteNick; } + + public String getNameNonexistent() { + return nameNonexistent; + } + + public String getShownHelp() { + return shownHelp; + } } diff --git a/src/main/java/simplexity/simplenicks/util/Constants.java b/src/main/java/simplexity/simplenicks/util/Constants.java index 84c282e..1e1bab6 100644 --- a/src/main/java/simplexity/simplenicks/util/Constants.java +++ b/src/main/java/simplexity/simplenicks/util/Constants.java @@ -3,16 +3,17 @@ import org.bukkit.permissions.Permission; public class Constants { - public static Permission NICK_COMMAND = new Permission("simplenick.nick.set"); + public static Permission NICK_OTHERS_COMMAND = new Permission("simplenick.admin"); public static Permission NICK_OTHERS_RESTRICTIVE = new Permission("simplenick.admin.restrictive"); public static Permission NICK_OTHERS_BASIC = new Permission("simplenick.admin.basic"); public static Permission NICK_OTHERS_FULL = new Permission("simplenick.admin.full"); public static Permission NICK_RESET_OTHERS = new Permission("simplenick.admin.reset"); + public static Permission NICK_OTHERS_SAVE = new Permission("simplenick.admin.save"); + public static Permission NICK_OTHERS_DELETE = new Permission("simplenick.admin.delete"); + public static Permission NICK_COMMAND = new Permission("simplenick.nick"); public static Permission NICK_RESET = new Permission("simplenick.nick.reset"); public static Permission NICK_SAVE = new Permission("simplenick.nick.save"); - public static Permission NICK_OTHERS_SAVE = new Permission("simplenick.admin.save"); public static Permission NICK_DELETE = new Permission("simplenick.nick.delete"); - public static Permission NICK_RELOAD = new Permission("simplenick.reload"); public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.bypass.username"); public static Permission NICK_LENGTH_BYPASS = new Permission("simplenick.bypass.length"); public static Permission NICK_REGEX_BYPASS = new Permission("simplenick.bypass.regex"); diff --git a/src/main/java/simplexity/simplenicks/util/saving/YMLFile.java b/src/main/java/simplexity/simplenicks/util/saving/YMLFile.java index 31c09fd..7ca4b4d 100644 --- a/src/main/java/simplexity/simplenicks/util/saving/YMLFile.java +++ b/src/main/java/simplexity/simplenicks/util/saving/YMLFile.java @@ -64,8 +64,11 @@ public boolean saveNickname(OfflinePlayer p, String nickname) { @Override public boolean deleteNickname(OfflinePlayer p, String nickname) { List nicknames = getSavedNicknames(p); + ConfigurationSection section = nicknameData.getConfigurationSection(p.getUniqueId().toString()); + if (section == null) return false; if (!nicknames.contains(nickname)) return false; nicknames.remove(nickname); + section.set("saved", nicknames); saveData(); return true; } diff --git a/src/main/resources/locale.yml b/src/main/resources/locale.yml index 392393b..98a8983 100644 --- a/src/main/resources/locale.yml +++ b/src/main/resources/locale.yml @@ -8,7 +8,9 @@ plugin: /nick reset" · Formatting: This plugin uses minimessage formatting. You can find a format viewer here" + shown-help: " has been shown the help screen" config-reloaded: "SimpleNicks config and locale reloaded" + error: invalid: command: "Invalid command." @@ -23,9 +25,10 @@ error: nickname: is-null: "Something went wrong and the nickname is null, please check your formatting" delete-failure: "Failed to delete given username." + name-nonexistent: "Cannot delete this name because it does not exist" save-failure: "Failed to save current username." too-many-to-save: "You have too many saved usernames, please remove some with /nick delete " - other-players-username: "You cannot name yourself , as that is the username of another player on this server. Pick another name" + other-players-username: "You cannot name yourself , as that is the username of another player on this server. Pick another name" no-permission: "You do not have permission to run this command" must-be-player: "This command cannot be run on the Console. You must be a player to run this command" nick: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ab09d6a..3012b30 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,6 +3,7 @@ version: '${project.version}' main: simplexity.simplenicks.SimpleNicks authors: ['Rhythmic', 'Peashooter101'] api-version: 1.19 +description: "A simple plugin to allow players to set and reset nicknames." softdepend: - PlaceholderAPI commands: @@ -11,6 +12,11 @@ commands: aliases: [simplenicks, simplenick, snick] usage: "Usage: /nick [save|delete|set|reset|help|reload] [player]" permission: simplenick.nick.set + snreload: + description: "Reloads the config and locale of SimpleNicks." + aliases: [simplenicksreload, simplenickreload, snreload] + usage: "Usage: /snreload" + permission: simplenick.reload permissions: simplenick.admin: description: allows user to set and reset other players' nicknames @@ -18,57 +24,100 @@ permissions: simplenick.admin.reset: default: op description: Allows the user to clear another player's nickname + children: + simplenick.admin: true simplenick.admin.restrictive: default: op description: Allows the user to set another player's nickname, but uses the formatting permissions of the other player + children: + simplenick.admin: true simplenick.admin.basic: default: op description: Allows the user to set another player's nickname, using the formatting permissions assigned to the player with the 'admin.basic' permission + children: + simplenick.admin: true simplenick.admin.full: default: false description: Allows the user to set another player's nickname, does not check the formatting permissions delegated to either player + children: + simplenick.admin: true simplenick.reload: description: allows a user to reload the locale and config of this plugin default: op - simplenick.usernamebypass: + simplenick.bypass.username: description: allows user to nickname themselves another person's username default: false - simplenick.save: + simplenick.bypass.length: + description: allows user to nickname themselves a username longer than the configured max characters + default: false + simplenick.bypass.regex: + description: allows user to nickname themselves a username that does not match the configured regex + default: false + simplenick.nick: + description: base of all formatting permissions + default: op + simplenick.nick.save: description: save your current nickname for future use, only works on 'FILE' save type default: op - simplenick.delete: + children: + simplenick.nick: true + simplenick.nick.delete: description: delete one of your previously saved nicknames default: op - simplenick.nick: - description: base of all formatting permissions - default: op + children: + simplenick.nick: true simplenick.nick.set: description: allows usage of the /nick command default: op + children: + simplenick.nick: true simplenick.nick.reset: description: allows a user to reset their own nickname default: op + children: + simplenick.nick: true simplenick.nick.color: description: allows color codes to be used in a nickname default: op + children: + simplenick.nick: true simplenick.nick.gradient: description: allows gradients to be used in a nickname default: op + children: + simplenick.nick: true simplenick.nick.rainbow: description: allows the rainbow tag to be used in a nickname default: op + children: + simplenick.nick: true simplenick.nick.format.reset: description: allows the reset formatting tag to be used in a nickname default: op + children: + simplenick.nick: true + simplenick.nick.format: true simplenick.nick.format.italic: description: allows the italic formatting tag to be used in a nickname default: op + children: + simplenick.nick: true + simplenick.nick.format: true simplenick.nick.format.strikethrough: description: allows the strikethrough formatting tag to be used in a nickname default: op + children: + simplenick.nick: true + simplenick.nick.format: true simplenick.nick.format.bold: description: allows the bold format tag to be used in a nickname default: op + children: + simplenick.nick: true + simplenick.nick.format: true simplenick.nick.format.obfuscated: description: allows the obfuscated format tag to be used in a nickname - default: op \ No newline at end of file + default: op + children: + simplenick.nick: true + simplenick.nick.format: true \ No newline at end of file