diff --git a/pom.xml b/pom.xml
index 2787afd..b535fc9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,9 +4,9 @@
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
+ 2.0.0
jar
SimpleNicks
@@ -39,6 +39,14 @@
false
+
+
+
+ mojang
+
+
+
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 55%
rename from src/main/java/adhdmc/simplenicks/SimpleNicks.java
rename to src/main/java/simplexity/simplenicks/SimpleNicks.java
index a34250a..0522bb6 100644
--- a/src/main/java/adhdmc/simplenicks/SimpleNicks.java
+++ b/src/main/java/simplexity/simplenicks/SimpleNicks.java
@@ -1,16 +1,22 @@
-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.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;
+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,8 +44,9 @@ public void onEnable() {
instance = this;
registerSubCommands();
this.saveDefaultConfig();
- Config.getInstance().setConfigDefaults();
+ ConfigHandler.getInstance().setConfigDefaults();
this.getCommand("nick").setExecutor(new CommandHandler());
+ this.getCommand("snreload").setExecutor(new SNReload());
if (this.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) {
new SNExpansion().register();
}
@@ -59,22 +66,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("reset", Constants.NICK_RESET, Constants.NICK_RESET_OTHERS, false));
+ 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("delete", Constants.NICK_DELETE, Constants.NICK_OTHERS_DELETE, false));
}
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..7fa9e5c
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/commands/CommandHandler.java
@@ -0,0 +1,137 @@
+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) {
+ sendMessage(sender, LocaleHandler.getInstance().getNotEnoughArgs());
+ return false;
+ }
+ if (args.length >= 2) {
+ Player player = getPlayerFromArgs(args);
+ 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;
+ }
+ }
+ commandOnSelf(sender, args);
+ return true;
+
+ }
+
+ 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();
+ SubCommand subCommand = SimpleNicks.getSubCommands().get(command);
+ if (subCommand == null) {
+ sendMessage(sender, LocaleHandler.getInstance().getInvalidCommand());
+ return;
+ }
+ if (!sender.hasPermission(subCommand.adminPermission)) {
+ sendMessage(sender, LocaleHandler.getInstance().getNoPermission());
+ return;
+ }
+ subCommand.executeOnOther(sender, player, args);
+ }
+
+ private void commandOnSelf(CommandSender sender, String[] args) {
+ String command = args[0].toLowerCase();
+ SubCommand subCommand = SimpleNicks.getSubCommands().get(command);
+ if (subCommand == null) {
+ sendMessage(sender, LocaleHandler.getInstance().getInvalidCommand());
+ return;
+ }
+ if (!sender.hasPermission(subCommand.basicPermission)) {
+ sendMessage(sender, LocaleHandler.getInstance().getNoPermission());
+ return;
+ }
+ Player player = null;
+ if (sender instanceof Player) {
+ player = (Player) sender;
+ }
+ if (player == null && !subCommand.canRunWithoutPlayer()) {
+ sendMessage(sender, LocaleHandler.getInstance().getMustBePlayer());
+ 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();
+ Player player = getPlayerForTabComplete(sender, args);
+ switch (args.length) {
+ case 0, 1 -> addSubCommandsToTabComplete(sender);
+ case 2 -> {
+ SubCommand subCommand = SimpleNicks.getSubCommands().get(args[0].toLowerCase());
+ if (SimpleNicks.getSubCommands().containsKey(args[0].toLowerCase())) {
+ if (sender.hasPermission(subCommand.adminPermission) && (player != null)) {
+ return null;
+ } else {
+ return subCommand.tabComplete(sender, args, player);
+ }
+ }
+ }
+ case 3 -> {
+ 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/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
new file mode 100644
index 0000000..8015aac
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/commands/Reset.java
@@ -0,0 +1,41 @@
+package simplexity.simplenicks.commands;
+
+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, 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
new file mode 100644
index 0000000..08b3f7a
--- /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, 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
new file mode 100644
index 0000000..4602ae5
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/commands/Set.java
@@ -0,0 +1,144 @@
+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.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;
+import simplexity.simplenicks.util.TagPermission;
+
+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();
+
+ 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) {
+ if (!isValidArgsLength(sender, player, args, 3)) {
+ return;
+ }
+ String nickname = args[2];
+ 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 (!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));
+ } else {
+ sender.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getInvalidTags(), nickname));
+ }
+ }
+
+ @Override
+ public void executeOnSelf(CommandSender sender, Player player, String[] args) {
+ if (!isValidArgsLength(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));
+ } else {
+ player.sendMessage(parsedMessage(sender, player, LocaleHandler.getInstance().getInvalidTags(), nickname));
+ }
+ }
+
+ private boolean setPlayerNick(Player player, Component nickComponent) {
+ if (nickComponent == null) {
+ return false;
+ }
+ String nickToSave = miniMessage.serialize(nickComponent);
+ NickHandler.getInstance().setNickname(player, nickToSave);
+ 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;
+ }
+
+ 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 (!user.hasPermission(tagPermission.getPermission())) {
+ continue;
+ }
+ permissionCount++;
+ resolverBuilder.resolver(tagPermission.getTagResolver());
+ finalNick = serializer.deserialize(nick, tagPermission.getTagResolver());
+ }
+ if (permissionCount == 0) {
+ return Component.text(strippedMessage);
+ }
+ String plainNick = PlainTextComponentSerializer.plainText().serialize(finalNick);
+ if (!plainNick.equals(strippedMessage)) {
+ return null;
+ }
+ 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/commands/SubCommand.java b/src/main/java/simplexity/simplenicks/commands/SubCommand.java
new file mode 100644
index 0000000..9b6db61
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/commands/SubCommand.java
@@ -0,0 +1,77 @@
+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, String[] args, Player player);
+
+ 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));
+ }
+
+ 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/adhdmc/simplenicks/config/Config.java b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java
similarity index 53%
rename from src/main/java/adhdmc/simplenicks/config/Config.java
rename to src/main/java/simplexity/simplenicks/config/ConfigHandler.java
index 2b6e510..bcd53f9 100644
--- a/src/main/java/adhdmc/simplenicks/config/Config.java
+++ b/src/main/java/simplexity/simplenicks/config/ConfigHandler.java
@@ -1,26 +1,35 @@
-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 String getRegexString() {
+ return regexString;
+ }
+
+ 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 String regexString = "[A-Za-z0-9_]+";
+ private long usernameProtectionTime = 0;
- 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;
}
@@ -30,12 +39,12 @@ 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);
- }
- 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 +56,41 @@ 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") * 86400000;
}
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);
+ config.addDefault("username-protection", 30);
+ }
+
+ public Pattern getRegex() {
+ return regex;
+ }
+
+ public SAVING_TYPE getSavingType() {
+ return savingType;
+ }
+
+ public int getMaxLength() {
+ return maxLength;
+ }
+
+ public int getMaxSaves() {
+ return maxSaves;
+ }
+
+ public boolean shouldNickTablist() {
+ return tablistNick;
}
- public Pattern getRegex() { return regex; }
- public SAVING_TYPE getSavingType() { return savingType; }
- public int getMaxLength() { return maxLength; }
- public int getMaxSaves() { return maxSaves; }
+ public long getUsernameProtectionTime() {
+ return usernameProtectionTime;
+ }
}
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..1ff7d86
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/config/LocaleHandler.java
@@ -0,0 +1,204 @@
+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, shownHelp;
+ //Errors
+ private String invalidCommand, invalidPlayer, invalidNick, invalidNickLength, invalidTags, invalidConfigRegex,
+ tooManyArgs, notEnoughArgs, nickIsNull, deleteFailure, nameNonexistent, 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",
+ """
+ ========================
+ · 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");
+ 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");
+ 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 !");
+ 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;
+ }
+
+ public String getNameNonexistent() {
+ return nameNonexistent;
+ }
+
+ public String getShownHelp() {
+ return shownHelp;
+ }
+}
+
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..1e1bab6
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/util/Constants.java
@@ -0,0 +1,20 @@
+package simplexity.simplenicks.util;
+
+import org.bukkit.permissions.Permission;
+
+public class Constants {
+ 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_DELETE = new Permission("simplenick.nick.delete");
+ 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/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..d00e567
--- /dev/null
+++ b/src/main/java/simplexity/simplenicks/util/TagPermission.java
@@ -0,0 +1,38 @@
+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;
+
+import java.util.ArrayList;
+
+public enum TagPermission {
+ //Nickname Perms
+ 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()),
+ 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 81%
rename from src/main/java/adhdmc/simplenicks/util/saving/YMLFile.java
rename to src/main/java/simplexity/simplenicks/util/saving/YMLFile.java
index c70d024..7ca4b4d 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
@@ -58,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;
}
@@ -81,8 +90,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..2ed7c73 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -13,4 +13,13 @@ 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
+
+# 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
diff --git a/src/main/resources/locale.yml b/src/main/resources/locale.yml
index 914bd14..98a8983 100644
--- a/src/main/resources/locale.yml
+++ b/src/main/resources/locale.yml
@@ -1,29 +1,44 @@
-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: "