diff --git a/galaxy/src/main/java/com/alttd/chat/nicknames/Nicknames.java b/galaxy/src/main/java/com/alttd/chat/nicknames/Nicknames.java index 82613fa..285d394 100644 --- a/galaxy/src/main/java/com/alttd/chat/nicknames/Nicknames.java +++ b/galaxy/src/main/java/com/alttd/chat/nicknames/Nicknames.java @@ -45,89 +45,98 @@ public class Nicknames implements CommandExecutor, TabCompleter { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) { - if (sender instanceof Player player) { - if (args.length == 0) { - sender.sendRichMessage(helpMessage(sender, HelpType.ALL)); - return true; - } - switch (args[0].toLowerCase()) { - case "set": - if (args.length == 2 && hasPermission(sender, "chat.command.nick.set")) { - handleNick(player, player, args[1]); - } else if (args.length == 3 && hasPermission(sender, "chat.command.nick.set.others")) { - OfflinePlayer offlinePlayer = sender.getServer().getOfflinePlayer(args[1]); - - if (offlinePlayer.isOnline() || offlinePlayer.hasPlayedBefore()) { - handleNick(player, offlinePlayer, args[2]); - } else { - sender.sendRichMessage(helpMessage(sender, HelpType.SET_OTHERS)); - } - } else if (args.length > 3) { - sender.sendRichMessage(helpMessage(sender, HelpType.SET_SELF, HelpType.SET_OTHERS)); - } - break; - case "review": - if (args.length == 1 && hasPermission(sender, "chat.command.nick.review")) { - NicknamesGui nicknamesGui = new NicknamesGui(); - ChatPlugin.getInstance().getServer().getPluginManager().registerEvents(nicknamesGui, ChatPlugin.getInstance()); - nicknamesGui.openInventory(player); - } else { - sender.sendRichMessage(helpMessage(sender, HelpType.REVIEW)); - } - break; - case "request": - if (args.length == 2 && hasPermission(sender, "chat.command.nick.request")) { - new BukkitRunnable() { - @Override - public void run() { - handleNickRequest(player, args[1]); - } - }.runTaskAsynchronously(ChatPlugin.getInstance()); - } else { - sender.sendRichMessage(helpMessage(sender, HelpType.REQUEST)); - } - break; - case "try": - if (args.length == 2 && hasPermission(sender, "chat.command.nick.try")) { - LuckPerms api = ChatAPI.get().getLuckPerms(); - if (api != null) { - if (NickUtilities.validNick(player, player, args[1])) { - sender.sendRichMessage(Config.NICK_TRYOUT, - Placeholder.component("prefix", Utility.applyColor(api.getUserManager().getUser(player.getUniqueId()) - .getCachedData().getMetaData().getPrefix())), // TODO pull this from chatuser? - Placeholder.component("nick", Utility.applyColor(args[1])), - Placeholder.unparsed("nickrequest", args[1])); - } - } else { - sender.sendRichMessage(Config.NICK_NO_LUCKPERMS); - } - } else { - sender.sendRichMessage(helpMessage(sender, HelpType.TRY)); - } - break; - case "current": - if (hasPermission(sender, "chat.command.nick.current")) { - ChatUser chatUser = ChatUserManager.getChatUser(player.getUniqueId()); - TagResolver placeholders = TagResolver.resolver( - Placeholder.component("nickname", chatUser.getDisplayName()), - Placeholder.parsed("currentnickname", chatUser.getNickNameString()) - ); - player.sendRichMessage(Config.NICK_CURRENT, placeholders); - } - break; - case "help": - sender.sendRichMessage(helpMessage(sender, HelpType.ALL) - + "For more info on nicknames and how to use rgb colors go to: https://alttd.com/nicknames"); - break; - default: - sender.sendRichMessage(helpMessage(sender, HelpType.ALL)); - } - } else { + if (!(sender instanceof Player player)) { sender.sendMessage("Console commands are disabled."); + return true; + } + if (args.length == 0) { + sender.sendRichMessage(helpMessage(sender, HelpType.ALL)); + return true; + } + switch (args[0].toLowerCase()) { + case "set" -> setNickname(sender, args, player); + case "review" -> reviewNickname(sender, args, player); + case "request" -> requestNickname(sender, args, player); + case "try" -> tryNickname(sender, args, player); + case "current" -> showCurrentNickname(sender, player); + case "help" -> + sender.sendRichMessage(helpMessage(sender, HelpType.ALL) + "For more info on nicknames and how to use rgb colors go to: https://alttd.com/nicknames"); + default -> sender.sendRichMessage(helpMessage(sender, HelpType.ALL)); } return true; } + private void showCurrentNickname(@NotNull CommandSender sender, Player player) { + if (!hasPermission(sender, "chat.command.nick.current")) { + return; + } + ChatUser chatUser = ChatUserManager.getChatUser(player.getUniqueId()); + TagResolver placeholders = TagResolver.resolver( + Placeholder.component("nickname", chatUser.getDisplayName()), + Placeholder.parsed("currentnickname", chatUser.getNickNameString()) + ); + player.sendRichMessage(Config.NICK_CURRENT, placeholders); + } + + private void tryNickname(@NotNull CommandSender sender, String[] args, Player player) { + if (args.length != 2 || !hasPermission(sender, "chat.command.nick.try")) { + sender.sendRichMessage(helpMessage(sender, HelpType.TRY)); + return; + } + LuckPerms api = ChatAPI.get().getLuckPerms(); + if (api == null) { + sender.sendRichMessage(Config.NICK_NO_LUCKPERMS); + return; + } + if (!NickUtilities.validNick(player, player, args[1])) { + return; + } + sender.sendRichMessage(Config.NICK_TRYOUT, + Placeholder.component("prefix", Utility.applyColor(api.getUserManager().getUser(player.getUniqueId()) + .getCachedData().getMetaData().getPrefix())), // TODO pull this from chatuser? + Placeholder.component("nick", Utility.applyColor(args[1])), + Placeholder.unparsed("nickrequest", args[1])); + } + + private void requestNickname(@NotNull CommandSender sender, String[] args, Player player) { + if (args.length != 2 || !hasPermission(sender, "chat.command.nick.request")) { + sender.sendRichMessage(helpMessage(sender, HelpType.REQUEST)); + return; + } + new BukkitRunnable() { + @Override + public void run() { + handleNickRequest(player, args[1]); + } + }.runTaskAsynchronously(ChatPlugin.getInstance()); + } + + private void reviewNickname(@NotNull CommandSender sender, String[] args, Player player) { + if (args.length != 1 || !hasPermission(sender, "chat.command.nick.review")) { + sender.sendRichMessage(helpMessage(sender, HelpType.REVIEW)); + return; + } + NicknamesGui nicknamesGui = new NicknamesGui(); + ChatPlugin.getInstance().getServer().getPluginManager().registerEvents(nicknamesGui, ChatPlugin.getInstance()); + nicknamesGui.openInventory(player); + } + + private void setNickname(@NotNull CommandSender sender, String[] args, Player player) { + if (args.length == 2 && hasPermission(sender, "chat.command.nick.set")) { + handleNick(player, player, args[1]); + } else if (args.length == 3 && hasPermission(sender, "chat.command.nick.set.others")) { + OfflinePlayer offlinePlayer = sender.getServer().getOfflinePlayer(args[1]); + + if (offlinePlayer.isOnline() || offlinePlayer.hasPlayedBefore()) { + handleNick(player, offlinePlayer, args[2]); + } else { + sender.sendRichMessage(helpMessage(sender, HelpType.SET_OTHERS)); + } + } else if (args.length > 3) { + sender.sendRichMessage(helpMessage(sender, HelpType.SET_SELF, HelpType.SET_OTHERS)); + } + } + @Override public List onTabComplete(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { List completions = new ArrayList<>(); @@ -136,49 +145,58 @@ public class Nicknames implements CommandExecutor, TabCompleter { } if (args.length == 1) { - List choices = new ArrayList<>(); - if (sender.hasPermission("chat.command.nick.set")) { - choices.add("set"); - } - if (sender.hasPermission("chat.command.nick.review")) { - choices.add("review"); - } - if (sender.hasPermission("chat.command.nick.request")) { - choices.add("request"); - } - if (sender.hasPermission("chat.command.nick.try")) { - choices.add("try"); - } - if (sender.hasPermission("chat.command.nick.current")) { - choices.add("current"); - } - choices.add("help"); - - for (String s : choices) { - if (s.startsWith(args[0])) { - completions.add(s); - } - } + tabCompleteArgLengthOne(sender, args, completions); } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("set")) { - List choices = new ArrayList<>(); - List onlinePlayers = new ArrayList<>(); - Bukkit.getOnlinePlayers().forEach(a -> onlinePlayers.add(a.getName())); - - if (sender.hasPermission("chat.command.nick.set.others")) { - choices.addAll(onlinePlayers); - } - - for (String s : choices) { - if (s.startsWith(args[1])) { - completions.add(s); - } - } - } + tabCompleteArgLengthTwo(sender, args, completions); } return completions; } + private static void tabCompleteArgLengthTwo(CommandSender sender, String[] args, List completions) { + if (!args[0].equalsIgnoreCase("set")) { + return; + } + List choices = new ArrayList<>(); + List onlinePlayers = new ArrayList<>(); + Bukkit.getOnlinePlayers().forEach(a -> onlinePlayers.add(a.getName())); + + if (sender.hasPermission("chat.command.nick.set.others")) { + choices.addAll(onlinePlayers); + } + + for (String s : choices) { + if (s.startsWith(args[1])) { + completions.add(s); + } + } + } + + private static void tabCompleteArgLengthOne(CommandSender sender, String[] args, List completions) { + List choices = new ArrayList<>(); + if (sender.hasPermission("chat.command.nick.set")) { + choices.add("set"); + } + if (sender.hasPermission("chat.command.nick.review")) { + choices.add("review"); + } + if (sender.hasPermission("chat.command.nick.request")) { + choices.add("request"); + } + if (sender.hasPermission("chat.command.nick.try")) { + choices.add("try"); + } + if (sender.hasPermission("chat.command.nick.current")) { + choices.add("current"); + } + choices.add("help"); + + for (String s : choices) { + if (s.startsWith(args[0])) { + completions.add(s); + } + } + } + private void handleNickRequest(Player player, String nickName) { if (!NickUtilities.validNick(player, player, nickName)) { return; @@ -261,69 +279,75 @@ public class Nicknames implements CommandExecutor, TabCompleter { private void handleNick(Player sender, OfflinePlayer target, final String nickName) { if (nickName.equalsIgnoreCase("off")) { - - try { - if (target.isOnline()) { - resetNick(Objects.requireNonNull(target.getPlayer())); - } - Queries.removePlayerFromDataBase(target.getUniqueId()); - NickCache.remove(target.getUniqueId()); - nickCacheUpdate.add(target.getUniqueId()); - } catch (SQLException e) { - ALogger.error("Failed to remove nickname from database", e); - } - - if (!sender.equals(target)) { - sender.sendRichMessage(Config.NICK_RESET_OTHERS, - Placeholder.unparsed("player", Objects.requireNonNull(target.getName()))); - } - - if (target.isOnline() && target.getPlayer() != null) { - target.getPlayer().sendRichMessage(Config.NICK_RESET); - } - - NickEvent nickEvent = new NickEvent(sender.getName(), target.getName(), null, NickEvent.NickEventType.RESET); - nickEvent.callEvent(); - + handleNickOff(sender, target); } else if (NickUtilities.validNick(sender, target, nickName)) { - if (target.isOnline()) { - setNick(target.getPlayer(), nickName); - } else { - NickUtilities.bungeeMessageHandled(target.getUniqueId(), sender, "Set"); - } - - Queries.setNicknameInDatabase(target.getUniqueId(), nickName); - NickEvent nickEvent = new NickEvent(sender.getName(), target.getName(), nickName, NickEvent.NickEventType.SET); - nickEvent.callEvent(); - - if (NickCache.containsKey(target.getUniqueId())) { - Nick nick = NickCache.get(target.getUniqueId()); - nick.setCurrentNick(nickName); - nick.setLastChangedDate(new Date().getTime()); - setNick(target.getPlayer(), nickName); - } else { - NickCache.put(target.getUniqueId(), new Nick(target.getUniqueId(), nickName, new Date().getTime())); - } - - if (!sender.equals(target)) { - sender.sendMessage(Utility.parseMiniMessage(Config.NICK_CHANGED_OTHERS, - Placeholder.unparsed("targetplayer", Objects.requireNonNull(target.getName())), - Placeholder.unparsed("nickname", nickName))); - if (target.isOnline()) { - Objects.requireNonNull(target.getPlayer()) - .sendRichMessage(Config.NICK_TARGET_NICK_CHANGE, - Placeholder.unparsed("nickname", getNick(target.getPlayer())), - Placeholder.unparsed("sendernick", getNick(sender)), - Placeholder.unparsed("player", target.getName())); - } - } else if (target.isOnline()) { - Objects.requireNonNull(target.getPlayer()) - .sendRichMessage(Config.NICK_CHANGED, - Placeholder.unparsed("nickname", getNick(target.getPlayer()))); - } + setValidNick(sender, target, nickName); } } + private void setValidNick(Player sender, OfflinePlayer target, String nickName) { + if (target.isOnline()) { + setNick(target.getPlayer(), nickName); + } else { + NickUtilities.bungeeMessageHandled(target.getUniqueId(), sender, "Set"); + } + + Queries.setNicknameInDatabase(target.getUniqueId(), nickName); + NickEvent nickEvent = new NickEvent(sender.getName(), target.getName(), nickName, NickEvent.NickEventType.SET); + nickEvent.callEvent(); + + if (NickCache.containsKey(target.getUniqueId())) { + Nick nick = NickCache.get(target.getUniqueId()); + nick.setCurrentNick(nickName); + nick.setLastChangedDate(new Date().getTime()); + setNick(target.getPlayer(), nickName); + } else { + NickCache.put(target.getUniqueId(), new Nick(target.getUniqueId(), nickName, new Date().getTime())); + } + + if (!sender.equals(target)) { + sender.sendMessage(Utility.parseMiniMessage(Config.NICK_CHANGED_OTHERS, + Placeholder.unparsed("targetplayer", Objects.requireNonNull(target.getName())), + Placeholder.unparsed("nickname", nickName))); + if (target.isOnline()) { + Objects.requireNonNull(target.getPlayer()) + .sendRichMessage(Config.NICK_TARGET_NICK_CHANGE, + Placeholder.unparsed("nickname", getNick(target.getPlayer())), + Placeholder.unparsed("sendernick", getNick(sender)), + Placeholder.unparsed("player", target.getName())); + } + } else if (target.isOnline()) { + Objects.requireNonNull(target.getPlayer()) + .sendRichMessage(Config.NICK_CHANGED, + Placeholder.unparsed("nickname", getNick(target.getPlayer()))); + } + } + + private void handleNickOff(Player sender, OfflinePlayer target) { + try { + if (target.isOnline()) { + resetNick(Objects.requireNonNull(target.getPlayer())); + } + Queries.removePlayerFromDataBase(target.getUniqueId()); + NickCache.remove(target.getUniqueId()); + nickCacheUpdate.add(target.getUniqueId()); + } catch (SQLException e) { + ALogger.error("Failed to remove nickname from database", e); + } + + if (!sender.equals(target)) { + sender.sendRichMessage(Config.NICK_RESET_OTHERS, + Placeholder.unparsed("player", Objects.requireNonNull(target.getName()))); + } + + if (target.isOnline() && target.getPlayer() != null) { + target.getPlayer().sendRichMessage(Config.NICK_RESET); + } + + NickEvent nickEvent = new NickEvent(sender.getName(), target.getName(), null, NickEvent.NickEventType.RESET); + nickEvent.callEvent(); + } + private String helpMessage(final CommandSender sender, final HelpType... helpTypes) { StringBuilder message = new StringBuilder(); for (HelpType helpType : helpTypes) {